Работа с Excel

1. IlyaM 21.12.08 18:10 Сейчас в теме
Здравстуйте, Все!

Два основных вопроса по работе с Excel файлом из 1С.

1. Как можно наиболее быстро считать файл???

Лично, я делаю это в цикле, перебирая строки файла пока значение заполнено.
И соотвественно формирую таблицу значений, добавляя эти строки.
Но строк 18000 - длительный процесс получается.
Пока ЗначениеЗаполнено(ЛистИзФайла.Rows(ИндексСтроки).Columns(1).Value) Цикл
/-/-/-/-/
КонецЦикла;

2. Как программно изменить ширину колонок в Excel файле???

Есть там токое свойство у колонок и ячеек, как Width (ширина), но напрямую это свойство недоступно для записи. Когда я пытаюсь присвоить значение ширины сразу

ЭксельЛист.Columns(1).Width = 60;

ничего не выходит.
Я так понял это нужно каким-то методом менять???

Буду рад советам и если кто-то, может быть, даже подкинет список основных свойств и методов для работы с Excel... Или скажет, где взять. А не то я в справке по 2003 еще кой-чего нашел. Скупо и на английском... А в 2007 даже интернетная справка ни фига не выдает....

Всем спасибо!!!!!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. IlyaM 18.01.09 00:48 Сейчас в теме
Спасибо всем за ответы и советы... ))))
Я уже много фишек выяснил по поводу Эксель.....
А самый оптимальный для себя способ выяснил своим методом проб и ошибок и выяснением свойств и методов самого Экселя....
Так вот... Сам процесс чтения данных всех используемых ячеек листа Эксель заключается в одной строке... ))) МассивыИзЭксель = ЛистИзФайла.UsedRange.Value.Выгрузить();
Конечно, предварительно создается СомОбъект, получается его свойстово WorkBooks, добавляется в коллекцию книга путем открытия файла Эксель..........
А потом..... А потом...............
Достаточно одной строчки, чтобы получить все данные с листа.... В виде массива массивов, каждый из которых будет колонкой листа Эксель....
А уж теперь крутите их вертите, как хотите.... )))
Конечно, делается, обычно все через попытки, в исключениях выводится информация об ошибках...
Но если честно, и так работало.... )))

Эксель = Новый COMОбъект("Excel.Application");
ЭксельОбъектКниги = Эксель.Workbooks;
КнигаИзФайла = ЭксельОбъектКниги.Open(ЗагружаемыйФайл);
ЛистИзФайла = КнигаИзФайла.Worksheets(1);

МассивыИзЭксель = ЛистИзФайла.UsedRange.Value.Выгрузить();

П.С.
Кстати, надо попробовать все в одну строчку зафигачить..... :0))




И да.....
ЗагружаемыйФайл - это строка полного пути к файлу....
5. Душелов 4021 18.01.09 11:43 Сейчас в теме
(4) Попробуй так сделать с файлами, в которых миллионы записией.
8. IlyaM 05.02.09 01:37 Сейчас в теме
(5)
А что имелось в виду под миллионными записями???
Что это? Лист эксель с миллионами строк? Но их количество вроде ограничено 65тыс. с копейками???
Или книга эксель из херового количества листов????
2. Душелов 4021 21.12.08 19:10 Сейчас в теме
1. Смотри компоненту работы с экзель у меня в профиле.
2. Советую посмотреть MSDN на предмет работы с экзелем через оле.
9. PeRom 51 05.02.09 11:44 Сейчас в теме
У меня работает так:
Книга = Файл.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();

Комы пробовал пользовать - не то, файл с паролем и макросами(при открытии отключаю) содержит БД и через КОМ показывает структуру данных.
3. IlyaM 21.12.08 21:09 Сейчас в теме
6. IlyaM 28.01.09 23:00 Сейчас в теме
(4,5) Ну с миллионными записями не доводилось пока работать. Но 50 тыс. строк считывает где-то за 3 секунды с учетом времени создания СоmОбъекта(причем на машинке 2000 года со 128мб оперы и процем 1200Гц). Для той задачи, которую решал этого было более, чем достаточно...
7. LenaTorpeda 28.01.09 23:09 Сейчас в теме
(6) Пиши загрузчик ,размести здесь.Оценим. Зачем всем над одной и той-же задачей голову ломать.
10. IlyaM 07.02.09 20:19 Сейчас в теме

Пока (НЕ ПустаяСтрока(Строка(Лист.Cells(строкаXL,1).Value))) или
(НЕ ПустаяСтрока(Строка(Лист.Cells(строкаXL,2).Value))) Цикл
строкаXL = строкаXL+1;
КонецЦикла;

Смысл этого цикла получить номер последней заполненной строки???
А через UsedRange не подходит?
Конечно, выполняется долго. Циклом перебираются строки листа плюс преобразуются к строке и плюс проверяются на пустую строку значения из двух колонок.
Почему-то после этого ComSafeArray формируется из 249 колонок???
Может, конечно, для решаемой задачи нужно было, чтобы только первые две колонки были заполнены???
11. Душелов 4021 07.02.09 22:41 Сейчас в теме
А если есть пропуск в строках, то что?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот