Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Доступ к Worksheet по имени


Автор: Святогор 31.10.2006, 16:27
Собственно, как обратиться к конкретному листу по имени?

Код

  EApp.AutoConnect:=true;
  ExcelWorkbook1.ConnectTo(EApp.Workbooks.OpenXML(edtFileName.Text,EmptyParam));
  ExcelWorksheet1.ConnectTo(ExcelWorkbook1.ActiveSheet as ExcelWorksheet);
  EApp.Visible[0]:=true;
  row:=ExcelWorksheet1.UsedRange[0].Rows.Count;
    for i:=2 to row do
       begin
       v:=ExcelWorksheet1.Range['A'+inttostr(i),EmptyParam];
       TempList_.Add(v);
       Application.ProcessMessages;
       end;
  eApp.Quit;


Нужно чтобы значени извлекались из листа с именем, например, "Лист 1". 
Как это сделать?

Автор: Albinos_x 31.10.2006, 22:37
перебираешь листы, смотришь имя каждого, если совпадает, то извлекаешь данные...

Автор: Святогор 1.11.2006, 07:34
Albinos_x, Спасибо.

Автор: Mepcuk 1.11.2006, 21:41
Так как обратится к лмсту я так и не понял  smile 

Автор: Albinos_x 1.11.2006, 22:45
 smile 
я ж написал... вот код:
Код

procedure TForm1.Button2Click(Sender: TObject);
var B:Boolean;
    ColSheet,i,j,k:Integer;
    ActivCol,ActivRow:integer;
begin
B:=True;
if not OpenDialog1.Execute then Exit;
ExcelApplication1.ConnectKind:=ckNewInstance;
ExcelApplication1.Visible[LOCALE_USER_DEFAULT]:=false;
ExcelApplication1.AutoConnect:=true;
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(OpenDialog1.FileName,LOCALE_USER_DEFAULT));
ColSheet:=ExcelWorkbook1.Sheets.Count;
for i:=1 to ColSheet do
   begin
   ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets[i] as ExcelWorksheet);
   if (ExcelWorksheet1.Name='Лист1') then
      begin
      B:=false;
      ActivCol:=ExcelWorksheet1.UsedRange[LOCALE_USER_DEFAULT].Columns.Count;
      ActivRow:=ExcelWorksheet1.UsedRange[LOCALE_USER_DEFAULT].Rows.Count;
      if (ActivCol>0) and (ActivRow>0) then
         begin
         if ActivRow>1 then
            Table.RowCount:=ActivRow
            else
            Table.RowCount:=2;
         Table.ColCount:=ActivCol;
         for j:=0 to (ActivRow) do
            for k:=0 to ActivCol do
               begin
               Table.Cells[k,j]:=ExcelWorksheet1.Range[AddresColExcel(k)+inttostr(j+1), EmptyParam].Value2;
               Application.ProcessMessages;
               end;
         end; {if (ActivCol>0) and (ActivRow>0) then}
      Break;
      end;
   end;
if b then ShowMessage('Лист1 в книге '+OpenDialog1.FileName+' не найденí');
ExcelApplication1.Visible[0]:=true;
end;

Автор: Albinos_x 1.11.2006, 23:23
вот

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)