Имя: Пароль:
1C
1C 7.7
v7: Быстрое чтение Excel-файла
, ,
0 evgpinsk_
 
19.08.19
23:17
Вроде как и гуглится информация, но толком не могу найти решения.
Нужно для 7.7 решение по быстрому чтению xls файлов в ТЗ.
Файл из 500 строк и 10 колонок читается несколько минут через чтение каждой ячейки: Лист.Cells(i,j).value

Хотелось бы решение именно через
xl=createobject("Excel.Application");
чтобы не заморачиваться с корректным чтением данных из ячеек (проблема знака " и т.д.)
1 MakaMaka
 
19.08.19
23:46
(0) Да руками заколоти, всего 500 строк.
2 Asmody
 
20.08.19
00:30
Читай через ado
3 Злопчинский
 
20.08.19
01:57
программно в 1С через эксельаппликейшен сохранить в ДБФ. потом читать штатно из ДБФ - чтение раз в 10 быстрее получается.

можно как в (2) написано. только вот например когда я первый раз через адо попробовал прочитать эксель на примерно полтора десятка тысяч строк - адо упорно возвращало 4 с небольшим тысячи. и все. побороть я это не смог.
4 vcv
 
20.08.19
04:55
Через ADODB.Connection читает шустро. Но требует содержимое файла в виде плоской таблицы
5 big
 
20.08.19
05:13
Йоксель наше всё!!! ))
6 Fram
 
20.08.19
05:17
Через Cells вроде область можно прочитать. Или это только в 8ке можно.. не помню
7 Irbis
 
20.08.19
06:02
Я в csv сохраняю, правда там счет на гигабайты идёт.
8 Сияющий в темноте
 
20.08.19
08:24
читай их через Range в массив,а потом на VbScript по этому массиву пройтись,получается очень быстро и красиво.
9 Cyberhawk
 
20.08.19
08:46
Загрузить файл в гугл-докс, читать через АПИ оттуда что надо и с каким надо отбором и т.д.
10 evgpinsk_
 
20.08.19
08:53
(4) Что значит -  плоской таблицы?
11 Cyberhawk
 
20.08.19
08:54
(10) Матрица
12 evgpinsk_
 
20.08.19
09:08
Нагуглил:
rs = CreateObject("ADODB.Recordset");
Получается, спасибо. Буду тестить
13 Провинциальный 1сник
 
20.08.19
09:11
А чем yoksel.dll не устраивает?
14 evgpinsk_
 
20.08.19
09:24
(13) Всё может устроить.
Через ADODB второая ссылка гугла дала нормальный пример на обработку
http://www.skalnyy.com/1s-universalnaya-zagruzka-iz-excel-obrabotkoj/
Только пока не получилось xlsx файл прочитать.
Для xls - 8 столбцов и 8000 строк - 28 секунд. Меня устраивает
15 Злопчинский
 
20.08.19
11:58
(13) штатный йоксель не все форматы читает
16 МихаилМ
 
20.08.19
13:31
для адо используйте гетроус
17 evgpinsk_
 
22.08.19
00:01
Прошу помощи.
С ADO разобрался, читаются файлы быстро.
Но в момент чтения excell файла мне одновременно нужно и записывать в этот файл данные из 1с.

Когда я работал через createobject("Excel.Application");
писать было просто, в цикле читал строки excell файла и там же вставлял:
Лист.Cells(i,j).value=значение;


Вопрос, работая через ADO могу ли я использовать аналог команды Лист.Cells(i,j).value=значение;  ?
чтобы в цикле чтения excell файла одновременно и писать чтото в этот excell файл?
18 Fram
 
22.08.19
06:14
Сохраняй в новый документ.

ЗЫ и научись писать Excel правильно
19 DrZombi
 
гуру
22.08.19
06:26
(0) Быстрое чтение возможно только через АДО.
20 DrZombi
 
гуру
22.08.19
06:28
(17)

1. Сделать копию вашего ексельского файла
2. и работать с ним в 1С.
3. и так по кругу через интервал (регламентное задание)
21 trdm
 
22.08.19
08:06
(15) А есть нештатный, который xlsx может прочитать?
Я бы заюзал..
22 evgpinsk_
 
22.08.19
10:19
(18) (20)
Не совсем понимал.
Я сейчас не могу нагуглить, каким образом через ADO не только читать из xls файла
но и писать в него, в идеале чемто пожим на :
Лист.Cells(i,j).value=значение;

В цеикле я читаю файл, и в результате я должен получить изменённый файл (пусть и копию)
23 evgpinsk_
 
22.08.19
20:02
?
24 Djelf
 
22.08.19
20:22
(21) Увы, нет. Олег начал делать плагины к Йокселю для чтения сторонних файлов, но как их собирать и как они подключаются  к Йокселю я так и не разобрался :(
Пересохранить не сложно, стоит ли овчинка выделки - не понятно.
25 trdm
 
23.08.19
08:09
(24) я вот такую хрень юзаю: https://github.com/dilshod/xlsx2csv
26 trdm
 
23.08.19
08:09
пришлось с питоном разбираться.
27 Кирпич
 
23.08.19
08:45
(26) http://catalog.mista.ru/public/598691/
вот без питонов тоже самое
28 trad
 
23.08.19
08:53
использую range и oleexsup.dll
29 trad
 
23.08.19
08:59
ЗагрузитьВнешнююКомпоненту("OleExSup.dll");
OleExSup = СоздатьОбъект("OLEExSup");

Ексель = СоздатьОбъект("Excel.Application");
Книга = Ексель.Workbooks.Open(ПутьКФайлу);
Лист = Книга.Worksheets(1);

Массив = OleExSup.ПолучитьСвойство(Лист.usedrange, "value");

Для ТекСтр = Массив.НижняяГраница(1) По Массив.ВерхняяГраница(1) Цикл
    Для ТекКол = Массив.НижняяГраница(2) По Массив.ВерхняяГраница(2) Цикл
        Значение = Массив.ПолучитьЗначение(ТекСтр, ТекКол);
    КонецЦикла;
КонецЦикла;
30 Кирпич
 
23.08.19
09:04
(29) Ну с Excel то что угодно можно делать. Можно из него же в CSV сохранить и в 1с загрузить
31 trad
 
23.08.19
09:26
(30) у автора задача не без екселя, а чтоб быстро
32 Arbuz
 
23.08.19
13:29
на руби совсем всё просто и быстро.
например https://gist.github.com/xiejiangzhi/5464fa803e4260bde54b919c7e9219a3
33 Кирпич
 
23.08.19
13:57
(32) Ага. Лучше день потерять, а потом за пять минут долететь.
34 АгентБезопасной Нацио
 
23.08.19
14:03
(30) да в принципе xlsx можно и читать-писать без Excel'я..., чисто текстом...
35 trdm
 
24.08.19
00:09
(34) там просто xml, только со структурой разобраться.
36 trdm
 
24.08.19
00:13
(27) да ну, без сорцов не хляет.
37 DrZombi
 
гуру
25.08.19
11:09
(22) Писать в файл через АДО так же просто, как и читать.

http://catalog.mista.ru/public/69248/
38 MaxS
 
25.08.19
18:43
(31) 7-кой открыть Excel и сохранить как CSV, закрыть Excel, открыть CSV файл 7-кой.
Или 7-кой запустить 1С 8, в ней открыть Excel файл и вернуть табличный документ или сохранить в mxl и открыть его 7-кой.
39 evgpinsk_
 
02.09.19
00:17
(37) При создании через ADO excell файла, первой строкой идкт загловки "F1 F2 .."
как не добавлять заголовки в файл?
40 Мимохожий Однако
 
02.09.19
07:44
(39) Пропускай эту строку при чтении для загрузки данных
41 АгентБезопасной Нацио
 
02.09.19
08:34
(40) (39)
HDR=No;
?
42 evgpinsk_
 
02.09.19
09:26
(41) Пробовал и HDR и IMEX менять, всё-равно первой строкой создаются названия столбцов
43 Мимохожий Однако
 
02.09.19
09:41
сделай скрипт удаления первой строки после создания файла
44 DrZombi
 
гуру
02.09.19
09:42
(39) Что? Вам то суп кислит, то сахару много. Вы определитесь.
Если нужен человеческий формат, реально как в екселе, то сделайте для себя ШАБЛОН, первоначального пустого файла екселя.
А после копируйте его и заполняйте через АДО.
45 evgpinsk_
 
02.09.19
11:01
(44) С чем определяться , не понял.
Я хочу просто экспортнуть ТЗ в файл экселя, т.к. строк в ТЗ много, то через ADO.
Обработку взял с прсоторов инета, тольком даже не могу понять, в какой момент в ней создаётся первая строка заголовков полей.
Какой смысл решать через костыли и создание какогото шаблона, либо писать срипты по удалению первой строки /я так понял, через ADO нет возможности удалить строку?/

Предполагал что есть какоето просто решение через параметр подключения
46 evgpinsk_
 
02.09.19
11:04
Вот код, который создаёт файл ексель.
Уже на этом этапе /создания полей/ в файле уже появляется одна 1ая строка с названием этих полей.
А они мне не нужны.
http://prntscr.com/p0lw3e
47 evgpinsk_
 
02.09.19
11:07
строка подключения не влезла:
СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ПолноеИмяФайла+";Extended Properties=""Excel 8.0;HDR=NO;""";    

параметр HDR менял и на YES
48 DrZombi
 
гуру
02.09.19
11:36
(45) Я не вкурсе, что у вас, у меня нет проблемы.
Предлагаю вам разные варианты решения.

"Про суп и сахар", я к тому, что вам то так не нравится, то этак.

Шаблон нужен, для того, что бы иметь изначально правильно (т.е. так как вам надо) отформатированную ексельку. Ибо АДО просто тупо пишет, как на SQL, не обращая на то ,что может у вас там где Дата или число до двух знаков. :)
49 DrZombi
 
гуру
02.09.19
11:37
+ Для АДО все едино, ему побоку что там, все пойдет как текст :)
50 evgpinsk_
 
02.09.19
13:32
(48) (44)
"Если нужен человеческий формат, реально как в екселе, то сделайте для себя ШАБЛОН, первоначального пустого файла екселя. "
Я не сильный программер, а для ADO толкового хелпа в инете нет.

Каким образом использовать ШАБЛОН через ADO, я пока не в курсе, не уверен что тривиально.
Предполагал, что моя задача /экспорт ТЗ в ексель без заголовков столбцов/ решается просто, через параметр подключения.
51 trad
 
02.09.19
15:02
не наелись еще адо? )
все равно придете к application и range
52 Смотрящий
 
02.09.19
15:13
(51) Это вряд ли
53 RomaH
 
naïve
02.09.19
15:25
Попытка
        Ексель = Новый COMОбъект("Excel.Application");
        Книги = Ексель.Workbooks;
         Док = Книги.Open(ИмяФайла);
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    Для Каждого ТекЛист Из Док.WorkSheets Цикл
        
        МассивДанных = ТекЛист.UsedRange.Value.Выгрузить();
54 evgpinsk_
 
02.09.19
16:43
(51) Да какой смысл менять 100 строк кода, и изучать неизученную мною область, когда всё работает и осталось только убрать заголовки.
неужели это такая большая проблема? )
55 evgpinsk_
 
02.09.19
16:46
(53) Не совсем понял, к чему этот код.
Насколько я вижу - здесь чтение xls.
А мне нужна выгрузка в xls
56 trad
 
02.09.19
16:53
(54)"изучать неизученную"?
у тебя уже было сделано чтение/запись cell в цикле i,j
нужно было это заменить на range и все
57 evgpinsk_
 
02.09.19
18:22
(56) были и советы - ADO
я пошёл через ADO - и 99% всё сделано
AdBlock убивает бесплатный контент. 1Сергей