Имя: Пароль:
1C
1С v8
Загрузка данных из большого файла Excel
,
0 Lohmatiy
 
11.12.13
11:14
Добрый день! Прошу помощи у админов и всех остальных тоже :) Возникла проблема с импортом данных из Excel. Сам файл большой, если его сократить вдвое, то нормально грузится и первая и вторая половина по-отдельности. Сам код на всякий случай (хоть он и стандартный):

Excel = Новый COMОбъект("Excel.Application");
//...
ОкноЕхс = Excel.Sheets(ИмяЛиста);
//...
ТекМассив = ОкноЕхс.Range(ОкноЕхс.Cells(КоординатаВерхнейСтроки,1), ОкноЕхс.Cells(КоординатаНижнейСтроки, Право)).Value.Выгрузить();

Вопрос: куда смотреть? Явных отклонений на мониторе ресурсов я не увидел. Случались пики по загрузке ЦП и дисков, но физическая память до 100% ни разу не доходила. Несмотря на это после превышения определенного количества строк в загружаемом файле свойство Value вызывает неизвестную ошибку. Можете подсказать, где тут может быть собака зарыта?
1 unregistered
 
11.12.13
11:22
Юзайте ADODB.
2 Lohmatiy
 
11.12.13
11:24
Это отпадает. Есть технические сложности. Какие еще варианты?))
3 shuhard
 
11.12.13
11:28
(2) [Есть технические сложности]
сними их
4 unregistered
 
11.12.13
11:29
(2) У нас была описанная проблема, но мы предпочли преодолеть "технические сложности" и перевели проблемные загрузки на использование запросов через  ADODB.
5 spectre1978
 
11.12.13
11:29
(2) Ну не знаю, ВК какую-нть поискать, которая с BIFF файлами напрямую работает. Хотя мне думается, что как-то проще будет разобраться с техническими сложностями :)
6 Lohmatiy
 
11.12.13
11:36
(3) Это не совсем от меня зависит. Давайте, на время забудем про ADODB.

Если знаете, какие именно ресурсы затрагиваются, подскажите. Возможно, я не всё отследил. Место на диске С есть :) Я хочу узнать, чего именно ему не хватает для счастья? На сайте Мелкомягких написано, что размеры массивов, получаемых свойством Value, ограничены только ресурсами компьютера. Т.е. проблем на мощном железе быть не должно. А железо хорошее. Я пробовал этот же файл обработать на другом гораздо более скромном серваке - всё взлетело, хоть и медленно. Поэтому мне нужно именно понять истинную причину.
7 wms
 
11.12.13
11:43
(0)стандартныйй, хм ,все в память выгружаем?
всегда перебором делаю и проблем не было
8 Lohmatiy
 
11.12.13
11:44
(7) Это тоже не очень айс. 400 000 строк и 33 колонки (((
9 Серго62
 
11.12.13
11:45
(6) Может не соответствует версия excel в котором файл был создан и та версия которая установлена на компе, с которого пытаешься открыть этот файл? У excel-а есть ограничение на к-во строк. В 2007-ом офисе это к-во увеличили. Может как раз налетаешь на это ограничение?
10 wms
 
11.12.13
11:45
(8)да пофик сколько
немного это доработать
Эксель = ПолучитьCOMОбъект(ПутьКФайлу);
НомерЛиста=1;НомерСтроки=2;НомерКолонки=1;НаимЯчейки = "начало";

Пока СокрЛП(НаимЯчейки) <> "" Цикл // можно использовать другой признак окончания данных на листе
    НаимЯчейки =сокрлп(Эксель.Sheets(НомерЛиста).Cells(НомерСтроки,НомерКолонки).Value);
    НомерСтроки=НомерСтроки+1;
конеццикла;
11 wms
 
11.12.13
11:46
потом все равно же перебираешь свой огромный массиф
12 Серго62
 
11.12.13
11:47
+ (9)
Количество строк
В Excel ниже 97 - 16384
В Excel 97-2003 - 65536
В Excel 2007 - 1048576
13 wms
 
11.12.13
11:47
а ну еще кусками делай по своему методу
т.е. если много строк то частями обрабатывай
14 Lohmatiy
 
11.12.13
11:50
(9) Excel 2010. Интерактивно всё открывается нормально и т.п.

(8) Это будет очень долго. Можно разбить мой большой массив на два и загрузить. Должно прокатить. Но мой вопрос всё же немного не в этом. Вопрос именно в том, чего ему не хватает?
15 Chum
 
11.12.13
11:50
(8) ну и грузи кусками, если перебором не хочешь:

1. КоординатаВерхнейСтроки = 1, КоординатаНижнейСтроки = 200000.

2. КоординатаВерхнейСтроки = 200001, КоординатаНижнейСтроки = 400000.
16 Lohmatiy
 
11.12.13
11:51
(15) да-да, это я понимаю всё. Но это просто путь обхода, а мне хочется знать причину болезни.
17 wms
 
11.12.13
11:53
(16)по моему все ясно "Мелкомягких написано, что размеры массивов, получаемых свойством Value, ограничены только ресурсами компьютера. Т.е. проблем на мощном железе быть не должно" а есть
попробуй кусками и убедишься в этом
18 Жан Пердежон
 
11.12.13
11:56
(2) odbc?
19 Мыш
 
11.12.13
12:16
(0) ComSafeArray ускорит чтение на порядки
20 Lohmatiy
 
11.12.13
12:36
Ребята, спасибо за советы. Но у меня возникает ощущение, что кроме моего первого поста большинство ничего не читало. Я же несколько раз поставил интересующий меня вопрос. "По какой причине это происходит? Каких ресурсов не хватает серверу?" Мне не интересно, как эту ситуацию обойти, понимаете?

Может быть, я резко написал, но просто хочется тут прочесть ответ на мой вопрос, а не чей-то другой.

В любом случае, всем еще раз спасибо. Очень жду, что кто-то наведет на верную мысль, пока я сам до нее не добрался.
21 Жан Пердежон
 
11.12.13
12:41
(20) SoftIce наведет тебя на верные мысли
22 Eugeneer
 
11.12.13
12:45
Загрузка миллиона строк за 1 минуту
http://subsystems.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=1831
23 Жан Пердежон
 
11.12.13
12:46
(22) ему не нужно быстро считывать
24 Eugeneer
 
11.12.13
12:47
(20) готовое решение http://subsystems.ru/catalog/27/158/
загрузка происходит нативной компонентой.
25 Eugeneer
 
11.12.13
12:47
(23) а что?
26 spectre1978
 
11.12.13
12:55
(20) а почему обязательно ресурсов? Может быть тупо ошибка где-нибудь в коде Excel, которую никто специально для вас немедленно исправлять не будет. И очень велика вероятность, что именно так оно и есть. Ввиду чего разумно поискать обходное решение проблемы, на что и пытаются вас натолкнуть.
27 acsent
 
11.12.13
12:56
может 2гб памяти на процесс заканчивается?
28 dervishsy
 
11.12.13
13:02
(20) Ну так правильно советуют.  COMОбъект("Excel.Application")
Для больших таблиц это может быть геморой.
29 Lohmatiy
 
11.12.13
14:05
(26) Я это заключил из того, что на другом сервере у меня всё загрузилось. На этом тоже загрузилось, когда я эксель поделил на два файла. Вероятность такой ошибки поэтому очень мала.

(27) Там сервак х64.

(28) Я объясню, почему я так упорствую. Когда непонятна природа ошибки, нельзя дать хоть каких-то гарантий, что система будет работать стабильно в будущем. Условно, я поменяю сейчас координаты так, чтобы у меня загрузилось двумя частями по 200 000 строк. Но я не могу зарекаться, что через неделю он не начнет падать и на этом объеме. А через месяц и 100 000, возможно, не получится загрузить.
30 spectre1978
 
11.12.13
14:26
(29) а софт один и тот же на обоих серваках? Версия винды, версия офиса, обновки, сервис-паки?
31 Lohmatiy
 
11.12.13
14:47
(30) Нет, софт различный. Вы всё же думаете, что проблема именно в софте?
32 mikecool
 
11.12.13
14:56
автор, тебе надо с маней пообщаться ,у него экселевские файлы любого размера в долю секунды загружаются
33 Йохохо
 
11.12.13
15:13
(32) на скрине видно, что курсы валют он там грузит
34 spectre1978
 
11.12.13
18:49
(31) думаю, да. Я бы посмотрел в сторону обновок и билдов офиса, доведя состояние пакета на машине с нерабочим вариантом до того, которое на машине с рабочим. Возможно, что во втором случае накатан хотфикс, который исправляет ошибку. И то же по обновлениям винды, потому что косяк может быть и в системной библиотеке, необязательно из поставки офиса.