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


Автор: Zero 29.8.2007, 15:40
При попытке найти последнюю ячейку во втором или другом листе экселя отличном от первого выдаётся ошибка. Сам код вот:
Код

...
    Excel := CreateOleObject('Excel.Application');
    Excel.Visible := false;
    Excel.Workbooks.Open(OpenDialog1.FileName);
    Sheet := Excel.Workbooks[1].WorkSheets[2];
    // Чтобы знать размер листа (WorkSheet), т.е. количество строк и количество
    // столбцов, мы активируем его последнюю непустую ячейку
    Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
    x := Excel.ActiveCell.Row;
    y := Excel.ActiveCell.Column;
    StringGrid1.ColCount := y;
    StringGrid1.RowCount := x;
    RangeMatrix := Excel.Range['A1', Excel.Cells.Item[X, Y]].Value;
    Excel.Quit;

    k := 1; Gauge1.Progress := 0;
    repeat
      for r := 1 to y do
        StringGrid1.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R];
      Gauge1.Progress := Gauge1.Progress + 1;
      Inc(k, 1);
      StringGrid1.RowCount := k + 1;
    until k > x;
    RangeMatrix := Unassigned;
...

Сама ошибка возникает в этой строке:
Код

...
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
...

Но возникает, если именно в этой строке выбирается второй или листы отличные от первого:
Код

Sheet := Excel.Workbooks[1].WorkSheets[2];

А если написать так:
Код

Sheet := Excel.Workbooks[1].WorkSheets[1];
 то содержимое первого листа выводится без проблем.

Подскажите пожалуйста, как правильно выбрать второй и большие листы????

Автор: Zero 30.8.2007, 10:25
Сам разобрался, оказывается всего-лишь нужно было активировать лист.
В DRKB допущена грубая ошибка в этом плане.

Если кому понадобится, тогда вот изменённый код который работает без проблем:
Код

...
  // Инициализация Excel объекта
  Excel := CreateOleObject('Excel.Application');
  // Сделать его невидимым
  Excel.Visible := false;
  // Открыть книги текущего файла
  Excel.Workbooks.Open(FilePath);
  // Получить первую книгу из текущего файла
  Book := Excel.Workbooks[1];
  // Выбрать заданный в параметрах лист из неё
  Sheet := Book.WorkSheets[NumSheet];
  // сделать этот лист активным
  Sheet.Activate;
...

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