Столкнулся тоже с этой проблемой.
Необходимо постоянно в TPS-ном файле(длина записи 420 байт) постоянно обновлять около ста пятидесяти тысяч строк при импорте из Excel (из сформированного обобщенного прайс-листа).
Попытался использовать предлагаемые решения. Все равно очень долго.
В начале темы прозвучало, на мой взгляд, решение выхода из этой ситуации - работа через ClipBoard.
Вопрос, опять на мой взгляд, не из простых, а для кого-то уже пройденный - а как можно работать напрямую с оперативкой, куда помещен ClipBoard всей таблицы. Каков формат этого куска памяти?
Заранее благодарен за совет.
Ускорение работы с Excel через OLE?
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 8032
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Мда ! 150 000 * 420 дает на вскидку около 60 MByte.
Даже если сделать аресацию такой строки - все равно к ней доступ будет последовательным и потребуется загрузка в ClipBoard такого массива данных. Может быть проще разместить данные из XLS таблицы последовательным чтением в виде индексированной QUEUE ?
И далее уже с ней работать ?
А если таблица XLS имеет линейную структуру - то можно вместо "медленного" OLE попробовать ODBC драйвер ...
Даже если сделать аресацию такой строки - все равно к ней доступ будет последовательным и потребуется загрузка в ClipBoard такого массива данных. Может быть проще разместить данные из XLS таблицы последовательным чтением в виде индексированной QUEUE ?
И далее уже с ней работать ?
А если таблица XLS имеет линейную структуру - то можно вместо "медленного" OLE попробовать ODBC драйвер ...
Буфер обмена состоит из строк, разделённых символами переноса строки <13,10>lexa писал(а):Столкнулся тоже с этой проблемой.
Необходимо постоянно в TPS-ном файле(длина записи 420 байт) постоянно обновлять около ста пятидесяти тысяч строк при импорте из Excel (из сформированного обобщенного прайс-листа).
Попытался использовать предлагаемые решения. Все равно очень долго.
В начале темы прозвучало, на мой взгляд, решение выхода из этой ситуации - работа через ClipBoard.
Вопрос, опять на мой взгляд, не из простых, а для кого-то уже пройденный - а как можно работать напрямую с оперативкой, куда помещен ClipBoard всей таблицы. Каков формат этого куска памяти?
Заранее благодарен за совет.
Строка состоит из полей в текстовом виде, разделенных знаком табуляции <9>
-
- Ветеран
- Сообщения: 311
- Зарегистрирован: 08 Июль 2005, 22:04
Спасибо. Это то, что нужно.Yufil писал(а):Буфер обмена состоит из строк, разделённых символами переноса строки <13>
Строка состоит из полей в текстовом виде, разделенных знаком табуляции <9>
Да!, просто для решения этой проблемы мне понадобились функция CLIPBOARD(1), переменная String максимальной длины и функции обработки строки по поиску в ней вышеупомянутых кодов разделителей.
Экспериментировал на не очень быстрой машинке с таблицей в 15тыс. строк. Считывание по каждой ячейке и последующей записи на диск занимало примерно 14 мин. Через закачку в String содержимого CLIPBOARD-а, последующей обработки и записи это заняло всего 4-5сек.
Более объемные таблицы через туже процедуру буду загружать частями, думаю, выигрыш будет тот же.