|
Долго отрабатывает выгрузка в xls, что не так делаю? | ☑ | ||
---|---|---|---|---|
0
SherifSP
05.02.14
✎
18:40
|
Количество строк 30000, количество колонок 17, цикл отрабатывает быстро, но строка сохранения очень долго, ждал 10 минут и завершил сеанс, что не так делаю?
МассивКОМ = Новый COMSafeArray("VT_VARIANT", КоличествоКолонок, КоличествоСтрок); Для инд = 0 По КоличествоСтрок - 1 Цикл СтрокаТаблицы = ТаблицаЗаказы[инд]; Для счКолонок = 1 По КоличествоКолонок - 1 Цикл МассивКОМ.SetValue(счКолонок - 1, инд, СтрокаТаблицы[счКолонок]); КонецЦикла; КонецЦикла; ЛистXls.Range(ЛистXls.Cells(1,1), ЛистXls.Cells(КоличествоСтрок,КоличествоКолонок)).Value = МассивКОМ; |
|||
1
МихаилМ
05.02.14
✎
18:42
|
выгрузите 5 строк
и узнаете, что не так |
|||
2
SherifSP
05.02.14
✎
18:48
|
(1) 1000 строк и 17 колонок за 2.5 секунды выгружаются, а 30000 и 17 колонок, больше 10 минут
|
|||
3
МихаилМ
05.02.14
✎
18:52
|
(2)
выгружайте 30 раз по 1000 строк |
|||
4
SherifSP
05.02.14
✎
18:52
|
И птица как на зло нет, он писал что все летает
|
|||
5
МихаилМ
05.02.14
✎
18:55
|
||||
6
SherifSP
05.02.14
✎
18:58
|
(5) 65000 строк всего(
|
|||
7
МихаилМ
05.02.14
✎
19:03
|
(6)
в условии задачи в (0) дано 30000 строк |
|||
8
SherifSP
05.02.14
✎
19:06
|
(7) Как цикл себя поведет, если у меня будит 27500 строк и я разобью их на 1000?
Для XlsЛист = 0 По КоличествоСтрок/1000 Цикл МассивКОМ = Новый COMSafeArray("VT_VARIANT", КоличествоКолонок, КоличествоСтрок); Для инд = 0 По 1000 Цикл СтрокаТаблицы = ТаблицаЗаказы[инд]; Для счКолонок = 1 По КоличествоКолонок - 1 Цикл МассивКОМ.SetValue(счКолонок - 1, инд, СтрокаТаблицы[счКолонок]); КонецЦикла; КонецЦикла; ЛистXls.Range(ЛистXls.Cells(1,1), ЛистXls.Cells(КоличествоСтрок,КоличествоКолонок)).Value = МассивКОМ; КонецЦикла; |
|||
9
SherifSP
05.02.14
✎
19:12
|
Маня помогай, я знаю, ты знаешь))
|
|||
10
МихаилМ
05.02.14
✎
19:20
|
||||
11
SherifSP
05.02.14
✎
19:32
|
(10) Через Ado пробовать?
|
|||
12
Мимохожий Однако
05.02.14
✎
19:33
|
Стандартные методы Табличного документа почему не устраивают?
|
|||
13
SherifSP
05.02.14
✎
19:40
|
(12) Это как?
|
|||
14
SherifSP
05.02.14
✎
19:41
|
У меня 2007 офис установлен, говорят можно больше 65000 строк записывать, но подключение то идет как к 2003?
|
|||
15
Torquader
05.02.14
✎
21:25
|
(14) Так у него есть режим совместимости.
|
|||
16
SherifSP
06.02.14
✎
11:13
|
25 000 строк записываются очень долго, но метод перебора мне понравился, очень быстро работает
|
|||
17
SherifSP
07.02.14
✎
11:56
|
Ап
|
|||
18
SherifSP
07.02.14
✎
12:00
|
Если КоличествоСтрок = 10000 - строка ЛистXls.Range(ЛистXls.Cells(1,1), ЛистXls.Cells(КоличествоСтрок,КоличествоКолонок)).Value = МассивКОМ; отрабатывает за 2 секунды
|
|||
19
SherifSP
07.02.14
✎
12:01
|
А если больше, то 10+ минут
|
|||
20
SherifSP
07.02.14
✎
12:04
|
Разбил запись по 1000 строк, ругается на МассивКОМ.SetValue(счКолонок - 1, инд, СтрокаТаблицы[счКолонок]); Индекс находится за границами массива
Для XlsЛист = 0 По (КоличествоСтрок/1000) Цикл МассивКОМ = Новый COMSafeArray("VT_VARIANT", КоличествоКолонок, 1000); Для инд = XlsЛист*1000 По ((XlsЛист+1)*1000) - 1 Цикл СтрокаТаблицы = ТаблицаЗаказы[инд]; Для счКолонок = 1 По КоличествоКолонок - 1 Цикл МассивКОМ.SetValue(счКолонок - 1, инд, СтрокаТаблицы[счКолонок]); КонецЦикла; КонецЦикла; ЛистXls.Range(ЛистXls.Cells((XlsЛист+1)*1000,1), ЛистXls.Cells(1000,КоличествоКолонок)).Value = МассивКОМ; КонецЦикла; |
|||
21
ptiz
07.02.14
✎
12:13
|
Замер производительности что показывает? Где именно тормозит?
|
|||
22
МихаилМ
07.02.14
✎
12:18
|
(КоличествоСтрок/1000)
может округлить в большую сторону.. и ошибка |
|||
23
КонецЦикла
07.02.14
✎
12:23
|
Писал много строк через OLEDB
|
|||
24
ptiz
07.02.14
✎
12:24
|
Посмотрел у себя:
....Value = МассивКОМ; - отрабатывает 50 тыс. строк за 2 сек. Так что замер в руки и вперед. |
|||
25
SherifSP
07.02.14
✎
12:26
|
(21) Тормозит ЛистXls.Range(ЛистXls.Cells((XlsЛист+1)*1000,1), ЛистXls.Cells(1000,КоличествоКолонок)).Value = МассивКОМ; Вот на этой строке
|
|||
26
SherifSP
07.02.14
✎
12:27
|
(24) А колонок сколько?
|
|||
27
SherifSP
07.02.14
✎
12:31
|
(24) У меня в общем итоге 300000 строк в МассивКОМ, 50000 тоже за 2 секунды записывает
|
|||
28
ptiz
07.02.14
✎
13:02
|
(27) 17 колонок, 310 000 строк - 9 сек.
Офис 2013 Ну раз медленно, то записать в (на выбор): табличный документ 1С (и сразу сохранить в xls), dbf, csv, потом скормить екселю и форматировать. Или, как советуют тут - ADO (не пробовал). Или - кусками, только строку Для инд = XlsЛист*1000 По ((XlsЛист+1)*1000) - 1 Цикл поменяй на Для инд = XlsЛист*1000 По Мин(ТаблицаЗаказы.Количество() - 1, ((XlsЛист+1)*1000) - 1) Цикл |
|||
29
SherifSP
10.02.14
✎
15:31
|
Разбил 30000 строк по 1000 строк, записывается 19000 быстро, 20000 уже долго(30) минут
|
|||
30
Адинэснег
10.02.14
✎
15:35
|
(0)купи манин загрузчик! Логан надо тоже заправлять чем-то
|
|||
31
SherifSP
10.02.14
✎
15:35
|
(30) гг
|
|||
32
SherifSP
10.02.14
✎
15:49
|
Пробую через Ado, ошибка при открытии(
СтрокаСоединения ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " +СокрЛП(ИмяФайла) +" ;Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"""; Connection = Новый COMОбъект("ADODB.Connection"); Connection.ConnectionString = СтрокаСоединения; Попытка Connection.Open(); - Вот здесь ошибка Исключение Сообщить ("Проблемы с подключением к Excel" ); Возврат; КонецПопытки; |
|||
33
SherifSP
10.02.14
✎
15:52
|
Внешняя таблица не имеет предполагаемый формат
|
|||
34
Адинэснег
10.02.14
✎
15:54
|
(33) excel в процессах висит
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |