#0
by Гений 1С
В общем большие файлы (7000 строк на 15 столбцов) читаются долго. Насильно ли ускорится загрузка, если юзать АДО?
#0
by Гений 1С
В общем большие файлы (7000 строк на 15 столбцов) читаются долго. Насильно ли ускорится загрузка, если юзать АДО?
#2
by 774816
по карйне мере не придеться загружать весь application, а работать через адо надо что б файл имел структуры эксель бд, + если выборка данных по условию то скул запрос и цикл по рекодсету на порядок быстрее должно быть
#4
by Гений 1С
а потом читать как обычный текстовый? меня ведь только значения в ячейках интересуют...
#5
by Lendy
ускорится очень. Пример из жизни - 5 минут чтения файла 50тыс строк на 60 столбцов. Кусками через СОМ, через АДО 5-7 секунд.
#7
by smaharbA
заспорим что по ОЛЕ быстрее ? а еще у адо есть неприятное ограничение (правдо оно невсегда мешает)
#8
by Lendy
не готов )) Понравилось, что одним запросом можно быстро получить данные с любым фильтром, объединить данные с разных листов и т.п.
#11
by Kasper076
Если использовать компоненту GameWithFire, то можно сразу ТЗ получить. Я последнее время с Ехелем только через нее работаю.
#13
by Гений 1С
Пытаюсь читать через АДО, выдает ошибку: {Обработка.ЧтецЭлектронныхТаблиц}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft JET Database Engine): Не был задан текст команды для командного объекта. Можно вместо имени таблицы указывать ее номер, или причина не в этом?
#15
by Гений 1С
Интересно, а можно, чтобы дата преобразовывалась в строку по нужному правилу? И число тоже по определенному формату?
#16
by Гений 1С
т.е. я хочу чтобы при чтении по ADO дата преобразовывалась в строку YYYYMMDDHHMMSS, а число - строго в NNNNNNNNNNNNNNNNNN.NNNNNNNN т.е. без разделителей триад и с точкой как разделителем дробной части?
#20
by Гений 1С
АДОЗапись.Fields(iCount).Value - для поля типа дата выдает строку, видимо из-за IMEX=1 в строке коннекта: Смархаб, не говори загадками, я из АДО получаю уже преобразованную в строку значение, а мне нужно чтобы оно преобразовывалось как-то однообразно, независимо от локальных настроек...
#27
by lamme
а покажи весь код работы с АДО т.е. - открыть excel файл пройтись по строчкам получить из строчки N параметр из колкни M ?
#28
by RKx
Специально для фиксина:) Кусок рабочего кода: Для 8-ки тоже работает. Пробовал. db=CreateObject("ADODB.Connection");
#29
by Леха Дум
Драйвер MS читает первые 8 строк и, в зависимости от того какого типа данных больше, такой тип и выставляет для всей колонки, не соответствующие типу данные заменяются на NULL. IMEX=1 нужен чтобы сохранить формат разных данных и сами данные в колонке.
#31
by lamme
а что означает строка Для сч=0 По cat.Tables.Count-1 Цикл в отладчике показывает что cat.Tables.Count = 0
#34
by Гений 1С
чтение файла у меня работает, но мне нужно чтобы даты и числа преобразовывались по фиксированному формату, а не по локальному формату компа... Чтобы на разных компах я получал преобразование даты и числа по одному формату. Так что вы меня не поняли, код у меня есть. Вот о режиме IMEX=1 и идет речь.
#37
by lamme
да ... я уж разобрался. только не понятно вот что ... у меня лист имеет название не Лист 1 - как обычно, а timesheet_freelance_sales_ret_l и водоная структура доступа - не видит лист вообще. Говоит - что листов 0
#43
by lift
Попробуй кинуть из Excel в текстовый формат, а потом считать, с текстовиком 1С шустро работает, быстрее чем с дбф.
#44
by Гений 1С
Для этого нужно заранее знать тип данных в колонке, а если в колонке есть и даты и числа и строки, не катит, ведь АДО как-то догоняет... Не катит. АДО тоже летает, при преобразовании в текст будут такие же траблы с форматами, что и при АДО, так что проблема ВИСИТ.
#45
by 774816
не очень понял <а если в колонке есть и даты и числа и строки> значение колонок зависят от типа колонки в одной колонке не может быть значение с типом дата или число если конечно это обычный текст и значения текстовые, а что бы определить тип колонок для этого есть АДОЗапись.Fields.Type, что именно ты пытаешься сделать универсальную обработку чтения из экс файла?
#46
by Гений 1С
Товарищ, у меня в экселе хранится не таблица значений, а некая форма, поэтому тип колонок не катит... Неужели непонятно - АДО по локальным правилам преобразовывает дату и число в строку, а мне надо, чтобы он преобразовывал по глобальным правилам.
#47
by Гений 1С
То бишь я например знаю, что в ячейке 100-45 хранится дата, но она мне дает дату в локальном формате, поэтому я не знаю, как ее преобразовать в нормальную дату...
#48
by Гений 1С
К тому же заказчики не очень аккуратны и числа не всегда соответствуют формату, кроме того данные грузятся не из таблицы, а скорее из печатной формы, где таблица начинается гдето на 20-й строке, а в шапке - разные реквзииты...
#49
by Eugene555
Кстати установка IMEX=1 почему-то не помогает с типами...ситуация: выборка делается из Excel файла: c61661 111 c68001 121 В последней строке, где значение = "Н/М" как получить то что нужно, т.е "Н/М"???
#51
by nii
кстати, протестил варианты у себя через массив и ADO.... простой лист Excel, 15000 строк, 9 столбцов - через массив 3 сек - это с загрузкой в таблицу значений... через Ado ощутимо дольше.. даже дожидаться не стал... (массив супер!!!) :)
#55
by Sasha_H
Я у себя сделал вот такого универсального типа: Это Обработка в конфе. Далее с нужной мне обработины я использую данную функцию: Я это проганял через тест. А вот теперь хочу сказать в защиту 1С 7.7, она быстрее работает с АДО и быстрей работает с апликацией Екселя я был ошеломлен. Если сравнить загрузку с ексель СОМ-присоединением 8.х и Е = СоздатьОбъект("Excel.Application"); в 7.7 то семерка обходит по скорости адназначна с чтением Екселя. Аналогично прописал у себя в глобнике 7.7 Оттестил обращение: В загрузке участвовало 5000 строк, да 7.7 отсало на: === НАЧАЛО ТЕСТА ЕКСЕЛЬ-чтение через 1С === Начало тестирования: 29.10.07 10:13:19 Окончание тестирования: 29.10.07 10:13:36 ===================== === НАЧАЛО ТЕСТА ЕКСЕЛЬ-чтение через ADO === Начало тестирования: 29.10.07 10:13:53 Окончание тестирования: 29.10.07 10:13:57 =====================
#57
by Sasha_H
Заметил причину тяжелости работы 8.х с апликацией Екселя. 8.х может работать только с формаьтами Ексель 97-2003 на 2007 не пробовал. 7.7 работает с апликацией Екселя 5.0/95
#58
by Гений 1С
Ндык корифеи таки АДО есть? Ответят таки по локальным форматам даты и чисел? Неужели это не лечится?
#64
by vde69
полезно полазить в папочке C:Program FilesCommon FilesSystemado там гораздо больше интересного чем кажеться на перый взгляд тоже вместо апа
#66
by BabySG
Когда очень давно делал так на VBA: Format([ДатаОформления]," + Chr$ + "Short Date" + Chr$ + ") AS ДатаО, Format([ДатаВыдачи]," + Chr$ + "Short Date" + Chr$ + ") AS ДатаВ
#67
by Гений 1С
Не катит, ибо у меня в экселе не таблица из колонок, а таблица с шапкой (печатная форма документа)... Все еще интересно... Неужели мелкософтовцы не предусмотрели управление конвертацией форматов? Вот идиоты.
#70
by Гений 1С
Чувак, огромное спасибо, через ComSafeArray все буквально летает, АДО нервно курит в сторонке, единственно на компе должен быть установлен Эксель. ;-) Так что буду юзать CSA, большое спасибо. Но вопрос про форматы АДО остается открытым, в CSA кстати типизация исходного файла передается...
#72
by Гений 1С
Кстати, я не уверен, что CSA быстрее ADO... В общем он у меня работает с такой же скоростью, как обычное чтение из Экселя, т.к. обычное чтение читает по 2-3 позиции в строке, а CSA грузит весь файл, хоть и быстро, но по времени то на то выходит. ;-)
#76
by Гений 1С
Неа, батенько, це планируется как универсальный загрузчик, в том числе и для Star Office...
#77
by Леха Дум
я за оптимизацию кода. Кроме того можно использовать методы вызываемых сом-объектов для определения числа строк и столбцов. Одно дело планировать, а другое дело использовать в ожидании запланированного чего то еще - нет более постоянного чем временное :)
#78
by Гений 1С
Леха, не тупи, мне это 9999 нисколечко не мешает... Это всего лишь задание рамки... Как грится, слышал звон, да не знаешь где он... Короче, проехали...
#80
by Гений 1С
Гы, нарвался на засаду АДО. У него оказывается ограниченное число колонок только может считываться, трандец. Вот режимы подключения: Выдает ошибку, когда в файле у меня BD колонок...
#81
by Гений 1С
Ха, прикиньте, нашел еще способ ускорить через CSA. У меня грузилось штук 200 файлов. Ндык я каждый раз создавал приложение, открывал книгу, читал, закрывал книгу, закрывал приложение. Профайлер показал на строке Excel=Неопределено 56% времени. Трандец. Теперь я изменю цикл: создавал приложение, открывал книгу, читаю, закрываю, .... и так со всеми книгами и только в конце закрою приложение эксель. Предполагаю экономию в 50%. О, как , если с мозгами!
#82
by Гений 1С
Гы, сэкономить 50% времени за счет получилось! ;-) В общем результат трудов оформил в виде обработки, лазайте на infostart, качайте, изучайте. ;-) А АДО Зараза - не дает открывать файл, где много колонок, вот сволочь Бил гейтс!
#84
by dk
С чтением не проверял, но при записи на больших объемах можно ускориться в 2-3 раза, если снизить приоритет процесса Excel. Т.е. приоритет процесса "1cv7s.exe" записывающего в Excel должен быть выше, чем у процесса "Excel.exe". Запись от абрахамса через массив будет шустрее, но не получится использовать форматирование, ... и прочие прелести OLE.
#85
by Pashkaa
Как бы еще ускорить метод Excel ExcelЛист.Cells(Строка, Столбец).Locked Это проверка защищена ли ячейка от записи
#86
by Pashkaa
Я понимаю что конфа писалась быстро и исключительно для тестирования скорости и в помощь другим, но предлагаю Гению 1С доработать вещи которые бросились мне в глаза: 1. Выбор файла xls. Пришлось писать руками путь. Ну добавь ты у реквизита ИмяФайла кнопку выбора по типу xls 2. Добавь выбор загружаемого листа (хотя бы номер что бы можно было указывать или имя)
#89
by Гений 1С
Конфа писалась для программистов и пока находится в завершенном виде. ;-) Лень дописывать. Вот если кто драйвер для доков опен-офиса в этом же формате накидает, тогда вставлю и поправлю. Долой коммерцию на любовном фронте... Я и так 50% сэкономил за счет возможности держать коннекшн в открытом состоянии (и драйвер такой режим поддерживает)... см.
#90
by Pashkaa
Гений объясни почему ТекЛист.UsedRange.Rows.Count не правильно получает последнюю строку на листе? Какие есть предположения? Есть другие методы получения последней строки, например ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row; но как показала практика, если на листе есть связи с другими файлами Excel то метод выдает ошибку.
#92
by Pashkaa
Он выдает больше чем есть на самом деле (в доке 1525 строка а выдает 1570), т.е. 45 последних пустые а Ексель говорит что типа нет. Пробовал в доке выделить строки с 1526 по .... пока хватило нервов, и удалил их. Один чёрт выдает 1570. Может есть какая то особенность этого метода?
#93
by Pashkaa
Кстати спасибо за метод через CSA, использоваю в своей обработке, стало шустрее. Теперь всё тормозит ExcelЛист.Cells(Строка, Столбец).Locked может есть альтернатичные способы определения защиты ячейки?
#95
by Гений 1С
а если посмотреть вид для печати, эти строки показываются? Ну больше - это не меньше, не страшно... Может у этих ячеек заполнено форматирование, попробуй удалить их
#96
by Pashkaa
на предварительном просмотре этих строк нет. Удалять пробовал, не помогло. Я тоже подумал что больше это не меньше. Но боюсь, а вдруг выдас меньше :( Locked нужен по условию задачи, нужно заполнять ячейки только те которые не защищены в Excel. Этот метод дает возможность определения. Но поскольку он Excel-вский, то и работает это определение как черепаха
#97
by Гений 1С
Попробуй FindFormat юзать чтобы найти все Locked ячейки... или пробуй занести значение в ячейки, потом прочитай изменения, если изменились,значит не локед.
#98
by Pashkaa
А используя CSA можно ли назад запихать данные в Excel Или какие есть способы ускорить ExcelЛист.Cells(Строка.Номер, Столбец.Номер).Value = 0;
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Можно ли ускорить вывод таблицы на экран?
- Как ускорить загрузку из Экселя?
- Загрузка из Экселя напрямую, т.е. без Экселя.
- Как можно ускорить работу 1С ки 8.1 и экселя, 2003 2007.
- Как ускорить запрос по регистру?
- Формирование движений по партиям товаров и НДС ускорить можно?
- БП. Как ускорить закрытие периода?
- v7: Загрузка в 1с 77 из Экселя, без установки Экселя
В этой группе 1С
- Перебор строк в табличной части документа!?
- Как изменить тип поля Вид (тип составной) регистра сведений "Контактная инф
- v7: УПП. Учетная политика: Стратегия списания партий товаров по хронологии
- Регистр сведений. Выбрать последнее значение.
- Универсальный отчет Остатки и обороты
- 3D сканер своими руками - просто!
- v7: Как списать с 26 счёта если не было реализации?
- Необходимо перейти с конфы ВДГБ:Бухгалтерия на Бухгалтерию Предприятия типо
- Отбор в списке документа не по реквизитам документа.
- 1С: Руководитель проекта
- v7: Ремонт ОС
- Как получить идентификаторы всех реквизитов документа?
- Двоит остатки при соединении виртуальной таблицы с основной
- Windows server 2003 Как убрать ограничение на количество подключений?
- Левое соединение с переменными модуля в запросах
- 1c81_УПП Косяк - перепроведение документа - Ввод нач.ост. ОС
- POS-терминал и 1С
- Для опытных. При соединении таблицы остатков и оборотов с основной таблицей
- Как в запросе указать тип значения документа ?
- v7: Не могу скопировать документ в Бухгалтерии 8.1