Выгрузка SQL запроса в xlsx без использования OLE на Delphi XE8

vector0001
Дата: 11.09.2019 18:56:07
Простите меня дорогие форумчане!!! Тема очень сильно избитая но я не смог решить свою проблему. Поэтому прошу помощи у Вас.

Моя проблема заключается в том что я нашел компонент NativeExcel в RAD Studio XE8. Меня все устраивало. Отличная библиотека.
Но оказалось что при выгрузке моего запроса в xlsx символы Unicode например стрелочки кубы и т.д. экспортировались некорректно и файл становится битым. На просторах интернета нашел что у данного компонента есть проблема с выгрузкой unicode кодировки.

Прошу Вас помочь в решении данной проблемы. Возможно ссылкой на компонент для выгрузки запроса. Построчное добавление или вставкой массива в шаблон очень не хочется.
Построчное исполнение подвисает программу а при выгрузке 100 тыс строк это критично.
Также при моей реализации кода с OLE нельзя было пользоваться EXCEL параллельно.

Очень прошу не говорить о платных библиотеках. И если можно то с ссылкой на то чтобы загрузить и применить в собственных проектах не коммерческие использование.
Dimitry Sibiryakov
Дата: 11.09.2019 19:00:47

Если Вы не в состоянии ни проводить выгрузку в фоновом потоке, ни стартовать для неё
отдельный COM-сервер, то и формирование XML (которым, собственно, является xlsx) Вам не по
плечу. Выгружайте в .CSV, Ёксель его понимает.

Posted via ActualForum NNTP Server 1.5

JayDi
Дата: 11.09.2019 19:47:51
автор
100 тыс строк

Большие объемы через OLE лучше не грузить, очень медленно. Если нет стороннего компонента, то можно формировать CSV-файл (TStringList.DelimetedText в помощь) и уже его открывать/подключать в экселе.

автор
подвисает программу а при выгрузке 100 тыс строк это критично

Если нельзя/сложно делать выгрузку в потоке, то есть простое решение -- вызов Application.ProcessMessages между записью в цикле (программа обработает всю очередь виндовых сообщений словно ничего и не зависло, заодно можно где-нибудь прогресс-бар обновить, чтобы показать процент выполнения).
rgreat
Дата: 11.09.2019 20:16:00
JaDi
автор
100 тыс строк
Большие объемы через OLE лучше не грузить, очень медленно.

Фигня. Вгружается мгновенно, если вгружать весь массив данных как массив 1-м запросом.
vector0001
Дата: 11.09.2019 22:06:08
Csv удобен для выгрузки одного ответа когда ты говоришь 3-10 отчётов то расеологаешь их на разных листах excel и ты красавчик. Нет ли бесплатного компанента? Если нет то из своего опыта подскажите какой путь более прост в изучении и достаточно эффективен для решения моей задачи.
OLE ещё не нравится ибо после ввода кода везде подчеркивание и красные как я понимаю компилятор ругается. Но исполняет. Понимаю что это для профессионала не страшно но для отладки мне бредокодеру удобнее видеть ошибки в отладчике.
vector0001
Дата: 11.09.2019 22:13:26
Application.ProcessMessages я использую в приложении. В принципе потоки начал разбирать для того чтобы приложение не зависело в момент исполнения множественных действий с данными получаемых из БД но освоить excel я надеялся проще поэтому искал компонент. Все мои предыдущие приложения этим мне и не нравились выгрузка это код больше чем рабочий код на обработку информации.
ёёёёё
Дата: 11.09.2019 22:21:30
vector0001
Csv удобен для выгрузки одного ответа когда ты говоришь 3-10 отчётов то расеологаешь их на разных листах excel и ты красавчик. Нет ли бесплатного компанента? ...

Для чего? Для выгрузки в CSV?
asutp2
Дата: 11.09.2019 22:40:02
vector0001,

есть прекрасная библиотека XLSReadWriteII. Да, она платная, зато полностью решает твою проблему. Плюс если будешь генерировать xlsx в отдельных потоках, а не в основном потоке приложения, то вообще все будет быстро делаться и ничего тормозить не будет.

Но если ты принципиальный противних платных компонент, то твой выбор - csv.
JayDi
Дата: 11.09.2019 23:11:06
rgreat
Фигня. Вгружается мгновенно, если вгружать весь массив данных как массив 1-м запросом.

Неа, не поможет. Предлагаю записать в эксель через OLE 100к записей по 100 колонок и замерить время. Будет много сюрпризов. Эксель очень тормозной по сравнению с другими методами записи/создания.
X-Cite
Дата: 11.09.2019 23:18:45
Подключитесь через ODBC используя FireDAC
Либо через Microsoft.ACE.OLEDB.12.0 и ADO