Запрос таблицы Excel в C # .NET без использования Jet OLE DB - PullRequest
7 голосов
/ 02 ноября 2010

Есть ли способ запросить электронную таблицу Excel 2010, не используя Jet или не экспортируя как CSV и не запрашивая файл CSV.

Причина, по которой я не могу использовать Jet, заключается в том, что приложение должно работать каквеб-сервис на Windows Server 2008 R2 без 32-битной поддержки - следовательно, Jet не будет работать.Это дано, так как WOW 64 не установлен на целевом сервере.

Этот поток предлагает использовать 32-битный прокси-компьютер, но это также не вариант.

Дополнительная информация: на сервере запущена Sharepoint 2010.

Спасибо,

JD

Ответы [ 4 ]

12 голосов
/ 02 ноября 2010

Да - вы можете использовать Excel.Interop - ссылаться на него из вашей программы на C #, добавив ссылку на Microsoft.Office.Interop.Excel (я думаю, что для Excel 2010 версия 13) на вкладке .Net диалогового окна добавления ссылок VS.

К вашему сведению: Не рекомендуется запускать демоны на сервере, используя Interop: http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2,, однако, если это коротко запущенная программа, запускаемая пользователем и вамиследите за этим, все должно быть в порядке.

Если вы хотите, чтобы ваши клиенты запускали программу, им нужно будет установить основные сборки взаимодействия (PIA), если они этого еще не сделали при установке офиса, их можно получить здесь:

XP: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=C41BD61E-3060-4F71-A6B4-01FEBA508E52
2003: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=3C9A983A-AC14-4125-8BA0-D36D67E0F4AD
2007: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=59DAEBAA-BED4-4282-A28C-B864D8BFA513
2010: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=938fe8ad-583b-4bd7-a345-23250dc15855

Я использовал Office11 на моей 64-разрядной Vistaмашина, так что я не думаю, что x64 создаст какие-либо проблемы.

Имейте в виду, что документация ужасна!Есть около 10 различных версий справки, документации там.Я рекомендую:

Ознакомьтесь с:

  • Приложение
  • Рабочая книга
  • Рабочая таблица
  • Диапазон

объекты.Вы можете читать данные в список(в этом случае все ваши ячейки должны были бы быть отформатированы как текст) или что-то в памяти, тогда вам больше не придется иметь дело с Interop и его v. быстро на нем.Из C # всегда используйте метод (некоторая документация ошибочно говорит вам, что вы не можете использовать там методы, которые они предназначены для внутреннего использования), такие как: Range.get_Values ​​("A1") в противоположность: Range.Cells;

ХорошийМесто для начала здесь: http://dotnetperls.com/excel-interop

Официальная документация здесь: http://msdn.microsoft.com/en-us/library/bb726434(v=office.12).aspx,, но она содержит множество маркетинговых вафель, пока вы не доберетесь до библиотеки Interop, которой уже десять лет.

И будьте осторожны: индексы Excel основаны на 1, т. Е. Первый элемент в возвращенном двумерном массиве начинается с my2DArray [1,1]!

4 голосов
/ 25 апреля 2012

Я тоже с этим сталкивался.Моя ситуация: нетривиальное клиентское приложение, которое должно работать на Windows 7 x64 и x86.Необходимо извлечь данные из таблиц Excel;не требуется гибкость и минимальная «пользовательская боль».ACEDB (Redist Engine Access Database Engine) не сделал этого, так как очевидно, что x64-версия этого не может быть установлена, когда x86 (32-битный) Office уже установлен.PIA не был вариантом - «минимальная пользовательская боль».

Я использовал эту библиотеку: http://npoi.codeplex.com

Она поставляется с обширными образцами, и я смог собрать приложение для «Любого процессора»."вместо того, чтобы ограничиваться x86, что вызывало проблемы с некоторыми другими сторонними библиотеками, которые мы пытались использовать.Я начал работать с NPOI примерно через 10 минут, поэтому я определенно рекомендую его.

4 голосов
/ 02 ноября 2010

Как и Excel.Interop, можете ли вы использовать ADO.Net для использования механизма ACE, а не более старого механизма JET?ACE был представлен в Excel / Access 2007 и предназначен для замены JET.

1 голос
/ 02 ноября 2010

Вот еще один сторонний пакет, который был только что предложен мне коллегой: Aspose Excel Spreadsheet Components

Похоже, это уменьшит необходимость взаимодействия и необходимостиустановите Office PIA.

Хотя цены отсутствуют, возможно, это не дешево.

...