Имя: Пароль:
1C
 
Как обойти страницы книги Exel в цикле?
0 Fish
 
гуру
23.10.08
14:18
Добрый день. У меня небольшая проблемка:
Открываю файл экселя как комобъект:

Экс = Новый COMОбъект("Excel.Application");
Книга = Экс.WorkBooks.Open(ПутьКЭкселю);
НомерСтраницыВКниге = 1;
ВсегоСтраницВКниге = Книга.WorkSheets.Count;

далее хочу обойти страницы книги в цикле:

Пока НомерСтраницыВКниге <= ВсегоСтраницВКниге Цикл
Страница = Книга.WorkSheets(НомерСтраницыВКниге);
ТекСтраница = Книга.Worksheets(Страница.Name).Activate;
...
...
КонецЦикла;


Ругается, что "Поле объекта не обнаружено (Activate)", подскажите как перебрать страницы.
1 111222333444
 
23.10.08
14:25
Без скобок происходит обращение к свойствам. В данном случае нужен метод. Соответственно - Activate()
2 dk
 
23.10.08
14:26
ТекСтраница = Книга.Worksheets(Страница.Name).Activate;
заменить на
Страница.Activate();
3 Fragster
 
гуру
23.10.08
14:27
А зачем ее активировать? данные и так тырить через Книга.Worksheets(Страница.Name).Cells(x,y).value можно
4 Kolyasik
 
23.10.08
14:28
а зачем активейт? ты и так получил страницу... делай с ней что хочешь... %)
5 smaharbA
 
23.10.08
14:28

Листы=Книга.WorkSheets;
Для каждого Лист из Листы Цикл
 Сообщить(Лист.Name);
...


либо


Листы=Книга.WorkSheets;
Для к=1 По Листы.Count Цикл
 Лист=Листы.Item(к);
 Сообщить(Лист.Name);
...
6 Voffka
 
23.10.08
14:36
Excel = новый COMОбъект("Excel.Application");
   
   Excel.WorkBooks.Open(ИмяФайлаЭксель);
   //WorkBooks = Эксель.WorkBooks();
   КоличествоЛистовКниги = Excel.Sheets().count();
   
   //Сообщить("КоличествоЛистовКниги " + КоличествоЛистовКниги);
   
   Лист = Excel.Sheets(1);
   ИмяЛиста = Лист.Name();
   
   Для Каждого ТекЛист Из Excel.Sheets() Цикл
       гчНомерЗакладки = гчНомерЗакладки + 1;
       ИмяЛиста = ТекЛист.Name();
       Если Найти(ИмяЛиста, "Протокол") > 0 Тогда
           Продолжить;
       КонецЕсли;
       
       ЗагрузитьЛист(ТекЛист);
       
   КонецЦикла;
   
   Excel.Application.Quit();
7 smaharbA
 
23.10.08
14:39
(6) с просто щетсами и обломаешься
8 Fish
 
гуру
23.10.08
14:41
(2) Спасибо, все получилось.

(3) Просто до меня обработка была заточена под файлы с одним листом, и данные там читаются через Экс.Cells проще страницу активировать, чем все переписывать.
9 Fragster
 
гуру
23.10.08
14:43
(8) зачем переписывать?
Пока НомерСтраницыВКниге <= ВсегоСтраницВКниге Цикл
Страница = Книга.WorkSheets(НомерСтраницыВКниге);
ТекСтраница = Книга.Worksheets(Страница.Name);
...
...
КонецЦикла;
10 Voffka
 
23.10.08
14:43
(7) В чем?
11 smaharbA
 
23.10.08
14:44
(10) щетс это не только электронные таблицы, но к примеру и диаграммы и еще чего может быть...
12 dk
 
23.10.08
14:44
(9) мимо
13 Voffka
 
23.10.08
14:45
(11) Ну я заведомо знаю что там нету диаграм, но за совет спс.
14 dk
 
23.10.08
14:46
(13) я бы еще "попинал" за обращение к пропертям с () на конце :)
15 Voffka
 
23.10.08
14:49
(14) Не надо :)
16 b_ru
 
23.10.08
14:58
а зачем Activate() ? Просто переменная Страница в твоем коде и будет тем что нужно.
17 Fish
 
гуру
23.10.08
15:22
(16) я в (8) написал, что данные с листа берутся через Экс.Cells - т.е. из активной страницы Экс.ActiveSheet. т.е. Страница перебирается, а активная страница - нет.
18 b_ru
 
23.10.08
15:35
(17) Страница.Cells...
19 dk
 
23.10.08
15:36
(18) читай (8) до полного просветления :)
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший