Здравстуйте, Все!
Два основных вопроса по работе с Excel файлом из 1С.
1. Как можно наиболее быстро считать файл???
Лично, я делаю это в цикле, перебирая строки файла пока значение заполнено.
И соотвественно формирую таблицу значений, добавляя эти строки.
Но строк 18000 - длительный процесс получается.
Пока ЗначениеЗаполнено(ЛистИзФайла.Rows(ИндексСтроки).Columns(1).Value) Цикл
/-/-/-/-/
КонецЦикла;
2. Как программно изменить ширину колонок в Excel файле???
Есть там токое свойство у колонок и ячеек, как Width (ширина), но напрямую это свойство недоступно для записи. Когда я пытаюсь присвоить значение ширины сразу
ЭксельЛист.Columns(1).Width = 60;
ничего не выходит.
Я так понял это нужно каким-то методом менять???
Буду рад советам и если кто-то, может быть, даже подкинет список основных свойств и методов для работы с Excel... Или скажет, где взять. А не то я в справке по 2003 еще кой-чего нашел. Скупо и на английском... А в 2007 даже интернетная справка ни фига не выдает....
Всем спасибо!!!!!
Два основных вопроса по работе с Excel файлом из 1С.
1. Как можно наиболее быстро считать файл???
Лично, я делаю это в цикле, перебирая строки файла пока значение заполнено.
И соотвественно формирую таблицу значений, добавляя эти строки.
Но строк 18000 - длительный процесс получается.
Пока ЗначениеЗаполнено(ЛистИзФайла.Rows(ИндексСтроки).Columns(1).Value) Цикл
/-/-/-/-/
КонецЦикла;
2. Как программно изменить ширину колонок в Excel файле???
Есть там токое свойство у колонок и ячеек, как Width (ширина), но напрямую это свойство недоступно для записи. Когда я пытаюсь присвоить значение ширины сразу
ЭксельЛист.Columns(1).Width = 60;
ничего не выходит.
Я так понял это нужно каким-то методом менять???
Буду рад советам и если кто-то, может быть, даже подкинет список основных свойств и методов для работы с Excel... Или скажет, где взять. А не то я в справке по 2003 еще кой-чего нашел. Скупо и на английском... А в 2007 даже интернетная справка ни фига не выдает....
Всем спасибо!!!!!
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Спасибо всем за ответы и советы... ))))
Я уже много фишек выяснил по поводу Эксель.....
А самый оптимальный для себя способ выяснил своим методом проб и ошибок и выяснением свойств и методов самого Экселя....
Так вот... Сам процесс чтения данных всех используемых ячеек листа Эксель заключается в одной строке... ))) МассивыИзЭксель = ЛистИзФайла.UsedRange.Value.Выгрузить();
Конечно, предварительно создается СомОбъект, получается его свойстово WorkBooks, добавляется в коллекцию книга путем открытия файла Эксель..........
А потом..... А потом...............
Достаточно одной строчки, чтобы получить все данные с листа.... В виде массива массивов, каждый из которых будет колонкой листа Эксель....
А уж теперь крутите их вертите, как хотите.... )))
Конечно, делается, обычно все через попытки, в исключениях выводится информация об ошибках...
Но если честно, и так работало.... )))
Эксель = Новый COMОбъект("Excel.Application");
ЭксельОбъектКниги = Эксель.Workbooks;
КнигаИзФайла = ЭксельОбъектКниги.Open(ЗагружаемыйФайл);
ЛистИзФайла = КнигаИзФайла.Worksheets(1);
МассивыИзЭксель = ЛистИзФайла.UsedRange.Value.Выгрузить();
П.С.
Кстати, надо попробовать все в одну строчку зафигачить..... :0))
И да.....
ЗагружаемыйФайл - это строка полного пути к файлу....
Я уже много фишек выяснил по поводу Эксель.....
А самый оптимальный для себя способ выяснил своим методом проб и ошибок и выяснением свойств и методов самого Экселя....
Так вот... Сам процесс чтения данных всех используемых ячеек листа Эксель заключается в одной строке... ))) МассивыИзЭксель = ЛистИзФайла.UsedRange.Value.Выгрузить();
Конечно, предварительно создается СомОбъект, получается его свойстово WorkBooks, добавляется в коллекцию книга путем открытия файла Эксель..........
А потом..... А потом...............
Достаточно одной строчки, чтобы получить все данные с листа.... В виде массива массивов, каждый из которых будет колонкой листа Эксель....
А уж теперь крутите их вертите, как хотите.... )))
Конечно, делается, обычно все через попытки, в исключениях выводится информация об ошибках...
Но если честно, и так работало.... )))
Эксель = Новый COMОбъект("Excel.Application");
ЭксельОбъектКниги = Эксель.Workbooks;
КнигаИзФайла = ЭксельОбъектКниги.Open(ЗагружаемыйФайл);
ЛистИзФайла = КнигаИзФайла.Worksheets(1);
МассивыИзЭксель = ЛистИзФайла.UsedRange.Value.Выгрузить();
П.С.
Кстати, надо попробовать все в одну строчку зафигачить..... :0))
И да.....
ЗагружаемыйФайл - это строка полного пути к файлу....
У меня работает так:
Комы пробовал пользовать - не то, файл с паролем и макросами(при открытии отключаю) содержит БД и через КОМ показывает структуру данных.
Книга = Файл.Workbooks.Open(ФайлХЛ); // Выполняется долго до 5 мин
Лист = Книга.Worksheets(2);
Пока (НЕ ПустаяСтрока(Строка(Лист.Cells(строкаXL,1).Value))) или
(НЕ ПустаяСтрока(Строка(Лист.Cells(строкаXL,2).Value))) Цикл
строкаXL = строкаXL+1;
КонецЦикла;
COMSafeArrayМассив = Лист.range(Лист.Cells(1,1),Лист.Cells(строкаXL,249)).Value;
Книга.Close();
Комы пробовал пользовать - не то, файл с паролем и макросами(при открытии отключаю) содержит БД и через КОМ показывает структуру данных.
(4,5) Ну с миллионными записями не доводилось пока работать. Но 50 тыс. строк считывает где-то за 3 секунды с учетом времени создания СоmОбъекта(причем на машинке 2000 года со 128мб оперы и процем 1200Гц). Для той задачи, которую решал этого было более, чем достаточно...
Пока (НЕ ПустаяСтрока(Строка(Лист.Cells(строкаXL,1).Value))) или
(НЕ ПустаяСтрока(Строка(Лист.Cells(строкаXL,2).Value))) Цикл
строкаXL = строкаXL+1;
КонецЦикла;
Смысл этого цикла получить номер последней заполненной строки???
А через UsedRange не подходит?
Конечно, выполняется долго. Циклом перебираются строки листа плюс преобразуются к строке и плюс проверяются на пустую строку значения из двух колонок.
Почему-то после этого ComSafeArray формируется из 249 колонок???
Может, конечно, для решаемой задачи нужно было, чтобы только первые две колонки были заполнены???
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот