|
Можно ли ускорить процесс Импорта значений из Excel | ☑ | ||
---|---|---|---|---|
0
Herber
28.07.12
✎
12:28
|
НомерЛиста = 1;
Попытка Excel = новый COMОбъект("Excel.Application"); Исключение Сообщить("Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel."); КонецПопытки; // Подключились удачно, открываем файл Excel.Workbooks.Open("D:/2.xls"); // Открываем необходимый лист Excel.Sheets(НомерЛиста).select(); // Получим количество строк и колонок. // В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1); Если Версия = "8" тогда КолСтрок = Excel.Cells.CurrentRegion.Rows.Count; КолКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13); Иначе КолСтрок = Excel.Cells(1,1).SpecialCells(11).Row; КолКолонок = Excel.Cells(1,1).SpecialCells(11).Column; Конецесли; При переборе строк очень быстро уменьшается быстродействие. Есть ли альтернтива? |
|||
1
МихаилМ
28.07.12
✎
12:35
|
||||
2
manyak
28.07.12
✎
12:45
|
до начала работы отключай обн. экрана и пересчет формул:
excell.Calculation = -4135 excell.screenupdating = false после окончания включи обратно: excell.screenupdating = true excell.Calculation = -4105 значительно ускорит процесс |
|||
3
Jaap Vduul
28.07.12
✎
12:54
|
Получать сразу весь массив значений, одним вызовом, без перебора.
|
|||
4
Агент Инфостарта
28.07.12
✎
13:04
|
(0) Быстрая функция чтения данных с листа Excel http://infostart.ru/public/20090/
|
|||
5
Herber
28.07.12
✎
13:24
|
(4) Не нашел как передать имя файла
|
|||
6
Агент Инфостарта
28.07.12
✎
13:28
|
(5) Почитай комментарии, сообразишь как.
|
|||
7
Herber
28.07.12
✎
13:52
|
(6) Хм.. Нету в комментариях
|
|||
8
Агент Инфостарта
28.07.12
✎
14:01
|
Есть, просто включи мозг. Если не получиться, значит высокие материи не для тебя.
|
|||
9
Herber
28.07.12
✎
14:09
|
(8) На той странице ответа не было. Ну да ладно. Гугл помог
Процедура Загрузить() ПутьКФайлу = "D:\2.xls"; Если НЕ ЗначениеЗаполнено(ПутьКФайлу) Тогда Предупреждение("Файл не выбран!"); Возврат; КонецЕсли; Попытка Эксель = Новый COMОбъект("Excel.Application"); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Книга = Эксель.WorkBooks.Open(ПутьКФайлу); Лист = Книга.WorkSheets(1); СчитанныйФайл = ПрочитатьЛистExcel(, Лист, 1); Эксель.Quit(); КонецПроцедуры Функция ПрочитатьЛистExcel(ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт Если ЛистЭксель = Неопределено Тогда ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application"); КонецЕсли; Если ВсегоСтрок = 0 Тогда ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row; КонецЕсли; Если ВсегоКолонок = 0 Тогда ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column; КонецЕсли; Если ТЗ = Неопределено Тогда ТЗ = Новый ТаблицаЗначений; Для Счетчик = 1 По ВсегоКолонок Цикл ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка")); КонецЦикла; КонецЕсли; Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл НоваяСтрока = ТЗ.Добавить(); КонецЦикла; Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок)); Данные = Область.Value.Выгрузить(); Для Счетчик = 0 По ВсегоКолонок-1 Цикл ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик); КонецЦикла; ЛистЭксель = Неопределено; Возврат ТЗ; КонецФункции В ТЗ кроме пустых колонок ничего нету |
|||
10
Herber
29.07.12
✎
12:16
|
Апну
|
|||
11
rs_trade
29.07.12
✎
12:17
|
(0) через адо читай
|
|||
12
andrey153
29.07.12
✎
12:53
|
Через ado на много быстрей
|
|||
13
zladenuw
29.07.12
✎
13:03
|
(11) через адо ведь получаем выборку ? а можно сразу выделенные ячейки или нет ?
|
|||
14
Mashinist
29.07.12
✎
13:38
|
я тоже за ADO
select вернет и нужные колонки и нужные строки |
|||
15
Herber
29.07.12
✎
15:42
|
А что быстрее Com или ADO ?
|
|||
16
Herber
29.07.12
✎
15:43
|
ComArray
|
|||
17
Jaap Vduul
29.07.12
✎
15:57
|
(15)
По-разному бывает. Я бы сказал, что сопоставимо. У ADO преимущества - гибче, не требует наличия MSOffice. У Com - доступ к оформлению, можно обрабатывать файлы с плохо выраженной табличной структурой. |
|||
18
rs_trade
29.07.12
✎
18:56
|
(17) к предыдущему оратору. если просто читать, то адо. причем быстрее на порядок как минимум.
|
|||
19
zladenuw
30.07.12
✎
02:55
|
тоесть мне в адо нужно построить запрос что бы он вернул готовую тз для обработки или нет ?
примеры только по строковой. http://www.sql.ru/forum/actualthread.aspx?tid=678251. а всю область можно или нет ? |
|||
20
zladenuw
30.07.12
✎
02:57
|
у меня ексель по 64 к строк и по н страниц. как быть?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |