Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вывести содержимое ВТОРОГО листа Excel 
:(
    Опции темы
Zero
Дата 29.8.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



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

...
    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];
 то содержимое первого листа выводится без проблем.

Подскажите пожалуйста, как правильно выбрать второй и большие листы????
PM MAIL ICQ   Вверх
Zero
Дата 30.8.2007, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



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

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

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

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0415 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.