ADO с файлами XLSX в Delphi XE

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

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

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

Имея это в виду,

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

person DMeyer    schedule 11.03.2013    source источник


Ответы (2)


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. Ванильный OpenOffice может только их читать, но некоторые другие дистрибутивы также могут их записывать. OpenOffice также предоставляет внешние API-интерфейсы как на основе COM, так и на основе HTTP. Я знаю, что есть проекты Delphi, взаимодействующие с Delphi - OOo, но лично я их не использовал, и, не считая такого подхода, я не могу сказать, что его детальная оценка.

3) Microsoft также продавала Office для разработчиков или тому подобное, которые давали вам ядра Access и Excel в качестве распространяемых файлов, которые вы могли передать вместе со своим приложением, установить их и использовать. Не знаю, возможно ли это.

4) есть набор коммерческих компонентов, которые читают и записывают эти файлы напрямую, без необходимости наличия внешних EXE-файлов, выполняющих эту работу. Хотя это будет самый быстрый способ работы, он будет поддерживать только некоторые функции (которые могут или не могут быть подходящими для ваших конкретных целей) и могут иметь проблемы с «будущей совместимостью», поскольку Microsoft выпустит обновленные версии XLS. и форматы XLSX (которые снова могут вас не волновать). Как и TXLSFile для формата Biff8, существует, например, OExport библиотека. Также есть компонент от хорошо известной TMS Studio и, возможно, еще кое-что.

5) Вы можете присоединиться к какому-либо проекту с открытым исходным кодом и попытаться улучшить его для своих нужд, опять же, это зависит от того, сколько подмножества вам нужно.

Я знаю, что многие люди успешно используют OLE DB для доступа к данным Excel, но для меня это всегда звучало как какое-то извращение, потому что файлы Excel вообще не имеют внутренней регулярной структуры данных, в меньшей степени, такой строго табличной РСУБД.

person Arioch 'The    schedule 12.03.2013
comment
Спасибо за ответ и информацию. Это то, что мы предполагали, но не знали, было ли это общеизвестным или нет. В других приложениях мы использовали другие методы для использования Excel, так что похоже, что у нас есть проект по изменению кода ADO. - person DMeyer; 13.03.2013
comment
COM гибкий и простой, но довольно медленный. Это также зависит от версии Delphi. В XE2 я столкнулся с серьезными ошибками, появившимися в последнем обновлении прямо перед выпуском XE3 в качестве платного обновления: - / Лично на данный момент меня интересуют только очень ограниченный набор функций и только экспорт, поэтому я выбрал вариант 5 :-) - person Arioch 'The; 14.03.2013
comment
Кроме того, вы, кажется, новичок здесь, в SO, поэтому, пожалуйста, посмотрите google.ru/ Это ошибка для новичков, и я помню, как мне было стыдно после нескольких месяцев на SO :-) /// Учитывая, что Microsoft отказавшись от OLE DB, ADO Win32 также следует считать устаревшим IMHO. Не знаю об ADO.Net Так что держу пари, что MS не будет прикладывать много усилий для совместимости нового Office с устаревшей структурой. - person Arioch 'The; 14.03.2013

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

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

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

person user3707842    schedule 04.06.2014