2013-03-11 3 views
1

Проблема здесь в соединении ADO с Excel - это все еще стандартный способ чтения/записи файлов excel в среде Dephi XE? Мы приближаемся с несколькими вопросами при чтении/записи, используя драйвер ACEOLEDB (ACE 12), и это включает в себяADO с файлами XLSX в Delphi XE

  • Чтения клетки с хэштег не возвращает результаты
  • «Invalid с плавающей точкой» при экспорте сетки.

Мы также заметили, что на веб-сайте Microsoft (через исполняемые файлы для доступа к базе данных) существует множество версий драйвера ACE 12, и у каждого из них, по-видимому, разные проблемы с Delphi.

С этими вещами в виду,

  1. Пользуется ADO с Excel плохо в этот момент?
  2. У кого-нибудь еще есть эти проблемы и что вы сделали для их решения (кроме использования файлов XLS вместо XLSX)?

ответ

1

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-подобные один.

+0

Спасибо за ответ и информацию. Это то, что мы выяснили, но не знали, было ли это общеизвестно или нет. В других приложениях мы использовали другие методы для использования Excel, поэтому звучит так, как будто у нас будет проект для изменения кода ADO. – DMeyer

+0

COM гибкий и простой, но довольно медленный. Это также зависит от версии Delphi. В XE2 я испытываю основные ошибки, появившиеся в последнем обновлении, прямо перед выпуском XE3 в качестве платного обновления: -/Лично на данный момент меня интересует только ограниченное подмножество функций и только экспорт, поэтому я грыз зубы в опцию 5 :-) –

+0

Кроме того, вы, похоже, новичок здесь, на 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 с устаревшей инфраструктурой. –

1

Я действительно только когда-либо находил возможным управлять Excel через COM. Я пробовал альтернативы, такие как ADO, но они всегда кажутся такими полными ошибок архана - или, может быть, это просто мое невежество.

COM определенно медленный в определенных областях. Я использовал комбинацию COM и (в файле Excel) VBA для достижения того, что мне нужно делать.

Учитывая, что Excel НЕ собирается уходить, но Microsoft не может полагаться на то, чтобы не предавать своих пользователей, например, устраняя поддержку VBA и COM, было бы здорово, если бы кто-нибудь (и я бы хотел, чтобы я обладал навыками) может создать некоторую надлежащую поддержку Excel из Delphi.