ADO в Delphi склоняется к модели TDataSet, которая подразумевает строго табличные данные ... что excel не является. Каждый лист Excel содержит случайные ячейки, некоторые из которых могут составлять квази-табличные диапазоны или не могут.
В зависимости от установленного программного обеспечения вы можете
1) использовать приложение Excel, чтобы открыть XLSX, читать клетки и передать их в программу. Это самый простой и совместимый метод, хотя он заметно медленный из-за сортировки и коммутации COM IPC. Есть трюки, чтобы закрепить его, например, скрывать окно Excel, копируя массивы данных, а не поэтапный подход и т. Д.
Начало изучения TExcelApplication
компонент - http://docwiki.embarcadero.com/RADStudio/XE3/en/Using_Component_Wrappers
2) Если вы не хотите, чтобы полагаться на том, установлены коммерческие Excel, вы можете попробовать чтение XLSX файлы с OpenOffice. Vanilla OpenOffice может читать только их, но некоторые другие дистрибутивы тоже могут написать их. OpenOffice также предоставляет внешние API как на основе COM, так и на основе HTTP. Я знаю, что Delphi-проекты Delphi-OOo взаимодействуют, но лично их не использовали, и, не заметив этого подхода, я не могу сказать никаких подробных оценок.
3) Microsoft также продавала Office для разработчиков или такую, которая предоставила вам ядра Access и Excel как распространяемые компоненты, которые вы могли бы передать с вашим приложением, установить и использовать их. Не знаю, если это все еще возможно.
4) существует набор коммерческих компонентов, которые считывают и записывают эти файлы напрямую, без необходимости использования внешнего EXE. Хотя это будет самый быстрый способ работы, он будет поддерживать только некоторые подмножества функций (которые могут или не могут быть одобрены для ваших конкретных целей) и могут иметь проблемы с «будущей совместимостью», поскольку Microsoft выпустит обновленные версии XLS и XLSX (что опять-таки может быть для вас чем-то или не связано с вами). Как и было TXLSFile
для формата Biff8, есть, например, OExport
library. Существует также компонент из хорошо известной TMS Studio and maybe some more.
5) Вы можете присоединиться к проекту с открытым исходным кодом и попытаться улучшить его для своих нужд, а затем это зависит от того, сколько подмножества вам нужно.
Я знаю, что многие люди добиваются использования OLE DB для доступа к данным Excel, но для меня это всегда звучало как нечто перверсино, потому что файлы Excel не имеют никакой внутренней регулярной компоновки данных вообще, менее строго-табличные RDBMS-подобные один.
Спасибо за ответ и информацию. Это то, что мы выяснили, но не знали, было ли это общеизвестно или нет. В других приложениях мы использовали другие методы для использования Excel, поэтому звучит так, как будто у нас будет проект для изменения кода ADO. – DMeyer
COM гибкий и простой, но довольно медленный. Это также зависит от версии Delphi. В XE2 я испытываю основные ошибки, появившиеся в последнем обновлении, прямо перед выпуском XE3 в качестве платного обновления: -/Лично на данный момент меня интересует только ограниченное подмножество функций и только экспорт, поэтому я грыз зубы в опцию 5 :-) –
Кроме того, вы, похоже, новичок здесь, на SO, поэтому, пожалуйста, посмотрите https://www.google.ru/search?client=opera&q=stackoverflow.com+accept+answer&sourceid=opera&ie=utf-8&oe=utf-8&channel= Предлагаем Это гонка для новичков, и я помню, как мне стыдно через несколько месяцев на SO :-) /// Учитывая, что Microsoft обесценивает OLE DB, ADO Win32 следует считать устаревшим, а также IMHO. Не знаю об ADO.Net. Итак, я уверен, что MS не приложит много усилий для совместимости нового Office с устаревшей инфраструктурой. –