Имя: Пароль:
1C
 
перебор листов в рабочей книге .xls при загрузке
0 SuperLiving Star
 
25.03.10
12:27
стоит задача загрузки прайс листов с нескольких листов рабочей книги .xls. Как можно загружать сначало с одного листа, потом переходить к следующему и загружать с него и так по их количеству?
1 Rie
 
25.03.10
12:29
(0) Циклом :-)

Для НомерЛиста=1 По Книга.Worksheets.Count Цикл
   Лист = Книга.Worksheets(НомерЛиста);
   // загружаем, загружаем
КонецЦикла;
2 SuperLiving Star
 
25.03.10
12:30
вопрос в том как перемещаться по листам после загрузки с текущего, как происходит перемещение по ним?
3 aka AMIGO
 
25.03.10
12:30
вообще я номер листа (по требованию юзера) указываю на форме отчета:
   Попытка
       НашЛист = НашФайл.Sheets(НомерЛиста); //Устанавливаем нужный лист
   Исключение
       Предупреждение("Указан несуществующий номер листа! = "+НомерЛиста);
       ОбЭксел.WorkBooks.close();
       ОбЭксел.Quit();
       Возврат;
   КонецПопытки;

но ничего не стоит приделать это к циклу
4 SuperLiving Star
 
25.03.10
12:31
(1) а если вот это загружает с текущего листа, то есть считывает значения, как задавать обработку конкретного листа?

   xl.WorkBooks.Open(СокрЛП(Путь), 0, 1);
   rows = xl.ActiveSheet.UsedRange.Rows.Count;
   НачатьТранзакцию();
   Для row = 1 По rows Цикл
       Деталь      = СокрЛП(xl.Cells(row,1). Text); // 1.  нужен
       Марка       = СокрЛП(xl.Cells(row,2). Text); // 2.  нужен
       Модель      = СокрЛП(xl.Cells(row,3). Text); // 3.  нужен
5 Rie
 
25.03.10
12:32
(2) Что в (1) непонятно?
Или же - как происходит загрузка с листа (как указан в ней текущий лист)?
6 aka AMIGO
 
25.03.10
12:33
(5) имхо - не успел прочитать :)
7 SuperLiving Star
 
25.03.10
12:33
(3) то есть пользователь ставит номер листа?
у меня просто есть прайс где несколько листов, хочется загрузить их все сразу... А вообще тема у вас хорошая!
8 Rie
 
25.03.10
12:33
(4) Если с текущего листа - то и сделай текущим лист с номером НомерЛиста в (1):

xl.Worksheets(НомерЛиста).Activate()

если мне память не изменяет.

Хотя грузить с текущего листа - не есть хорошо.
9 SuperLiving Star
 
25.03.10
12:35
(5)ну да, как устанавливать загрузку с нужного листа? Исходя из (4) ...
10 bake
 
25.03.10
12:36
WS=WB.Sheets(Страница);
Страница на форме
11 bake
 
25.03.10
12:38
WB = Excel.Workbooks.Open(СокрЛП(Путь));
12 SuperLiving Star
 
25.03.10
12:38
(+5) перебераю листы потом перед обработкой активирую каждый лист, обрабатываю и перехожу к следующему?
13 SuperLiving Star
 
25.03.10
12:40
(11) Это открытие конкретного файла эксель....
я его уже открыл ->(4), сейчас выясняю как загрузить данные со всех имеющихся у него листов так как их там несколько...
14 Rie
 
25.03.10
12:41
(12) Можно так.

Но, IMHO, лучше заменить в этой самой загрузке xl.Cells(...) на Лист.Cells(...), а в начале загрузки поставить

Лист = xl.Sheets(НомерЛиста);
15 Ахиллес
 
25.03.10
12:45
А вот еще интересный вопрос :-) как грузить из экселевского файла когда в нем нет листов? Такая фигня происходит, когда из 1С в эксель через (_!_) выгружают. я так понял, что создается не книга с листами а только один лист. Приходилась в экселе создавать файл и копировать туда информацию. Может есть другой способ?
16 Chum
 
25.03.10
12:48
(15) Гонишь! Там есть лист и называется он "Sheet1". Сервис - параметры - вид - ярлычки листов
17 SuperLiving Star
 
25.03.10
13:04
(14) то есть вот так?

xl.WorkBooks.Open(СокрЛП(Путь), 0, 1);
Для НомерЛиста=1 По xl.Worksheets.Count Цикл
   Лист = xl.Sheets(НомерЛиста);    // загружаем, загружаем
   Лист.Cells(...обработка...
КонецЦикла;
18 SuperLiving Star
 
25.03.10
13:10
(+17) или...
// *>>> перебор имеющихся листов рабочей книги и загрузка с них номенклатуры
xl.WorkBooks.Open(СокрЛП(Путь), 0, 1);  
Для ListNumber = 1 По xl.Worksheets.Count Цикл
   List = xl.Sheets(ListNumber);    // загружаем, загружаем
   xl.Worksheets(List).Activate()
   rows = xl.ActiveSheet.UsedRange.Rows.Count;
   
   
   List.Cells(...обработка...
КонецЦикла;
19 dk
 
25.03.10
13:18
(17) нормуль
(18) не нормуль, зачем тебе activesheet?
щас придет абрахамс и наругается )))
20 Гость2
 
25.03.10
13:22
21 smaharbA
 
25.03.10
13:26
(19) голова болит, лениво ругаться ))
22 SuperLiving Star
 
25.03.10
13:30
xl.Worksheets(List).Activate();
вот это не правильно, выдается ошибка (
23 smaharbA
 
25.03.10
13:32
24 SuperLiving Star
 
25.03.10
13:34
(19) да просто я сейчас на Mandriva и тут с клавиатурой проблема что то не дописал... Сейчас вот проверяю перебор листов, пока что не удачно (
25 SuperLiving Star
 
25.03.10
13:42
xl.WorkBooks.Open(ÑîêðËÏ(Ïóòü), 0, 1);  
Для ListNumber = 1 Ïî xl.Worksheets.Count Цикл
   List = xl.Sheets(ListNumber);    
   rows = List.UsedRange.Rows.Count;
   
   
   
КонецЕсли

сработало!
СПАСИБО!
26 smaharbA
 
25.03.10
13:51
(25) за такой код из рогатки отстреливают
27 Ахиллес
 
25.03.10
16:40
(16) Не гоню. При обращении к листу "Sheet1" либо "Лист1" выдает ошибку.
28 dk
 
25.03.10
16:42
(27) WorkSheets(1)