2010-11-02 32 views
7

是否有任何方式查詢Excel 2010電子表格,而不使用Jet或導出爲CSV並查詢csv文件。使用C#.NET查詢Excel電子表格而不使用Jet OLE DB

爲什麼我不能使用Jet的原因是因爲應用程序需要作爲Web服務運行,在Windows Server 2008 R2中,沒有32位支持 - 因此噴氣機將無法正常工作。這是給定的,因爲WOW 64沒有安裝在目標服務器上。

This thread建議使用一個32位的代理機,但是這也不是一個選項。

進一步信息:服務器正在運行SharePoint 2010的

感謝,

JD

+2

難道你不能只將excel電子表格導入「真實」的數據庫?由於您正在編寫Web服務,因此如果將數據源保存爲Excel文件,那麼您可能會遇到併發性問題......然後,您可以安排一項工作來不時更新SQL Server表。 – rsenna 2010-11-02 00:56:11

+0

否。信息存儲在excel文件中是業務需求。不是我的選擇... – Darbio 2010-11-02 01:01:23

+0

我不知道有可能排除WOW64的安裝 - 根據我的經驗,任何32位程序在64位機器上運行 - 大概是WOW64在那裏,但你甚至沒有注意到它。 – markmnl 2010-11-02 01:20:47

回答

12

是 - 通過向引用從C#程序引用它 - 你可以使用Excel.Interop Microsoft.Office.Interop.Excel(版本13我認爲對於Excel 2010)在VS的.Net選項卡中添加了引用對話框。

FYI:它不是一個好主意,使用互操作運行在服務器上的守護進程:http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2,但是如果它是一個短期運行的程序,由用戶運行,你可以監控它,它應該是確定..

如果你希望你的客戶端運行,他們將需要安裝主互操作程序集(PIA的),如果他們不已經安裝Office時,他們都可以在這裏得到了程序:

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的機器上,所以我不認爲64位將不會造成任何問題。

被警告文檔太糟糕了!有大約10個不同版本的幫助文檔。我建議:

熟悉的:

  • 應用
  • 工作簿
  • 工作表
  • 範圍

對象。您可以將數據讀入一個列表<列表<串> >(在這種情況下,所有的細胞將不得不文本格式)或東西在內存中,然後你不必再並就此其訴快處理互操作。從C#總是使用方法(一些文件錯誤地告訴你,你不能使用的方法有他們內部使用),如: Range.get_Values(「A1」) ,而不是: 範圍。細胞;

一個良好的開始是在這裏:http://dotnetperls.com/excel-interop

正式文件是在這裏:http://msdn.microsoft.com/en-us/library/bb726434(v=office.12).aspx,但它包含了營銷餅的負載,直到你得到的互操作庫零件,其中有十年的歷史。

並注意:Excel索引的基數爲1,即返回的二維數組中的第一個元素從my2DArray [1,1]開始!

+0

這就是我正在建議的。 64位可能會造成一兩個皺紋,但它應該工作。 – winwaed 2010-11-02 00:55:10

+0

輝煌!唯一的問題是,這需要在服務器上安裝Office 2010的副本,這並不理想,但我相信它會起作用。謝謝。 – Darbio 2010-11-02 00:58:09

+0

我認爲,無論您決定如何,您都需要至少部分Office組件。 – winwaed 2010-11-02 01:01:58

4

除了Excel.Interop,你可以使用ADO.Net來使用ACE引擎而不是舊的JET引擎嗎? ACE是在Excel/Access 2007中引入的,旨在取代JET。

1

這裏是另一個第三方包剛剛被一個同事向我建議: Aspose Excel Spreadsheet Components

看起來這將減輕對互操作的需求,並具有已安裝的Office PIA的。

雖然沒有價格,所以它可能並不便宜。

+0

我認爲真正的微軟組件將會更可靠,並且不應該存在成本問題,因爲它已經是基於微軟的服務器 - 也就是說,它並不像是一個強制使用第三方組件的Linux機器。 – winwaed 2010-11-02 01:18:11

+1

如上所述,它需要在服務器上安裝Office 2010,因此使用Interop方法會產生相關成本問題(因爲您需要使用Office的Microsoft許可證)。其次,我建議的軟件包是一個小型的DLL文件,它更適合安裝Office 2010的服務器環境。 – Darbio 2010-11-02 02:12:50

4

我也遇到過這個。我的情況:需要在Windows 7 x64以及x86上運行的非平凡客戶端應用程序。需要從Excel電子表格中提取數據;沒有靈活性和最小的「用戶痛苦」要求。 ACEDB(Access數據庫引擎redist。)沒有這樣做,因爲顯然當x86(32位)Office已經安裝時,無法安裝x64版本。 PIA不是一種選擇 - 「最小的用戶痛苦」。

我使用這個庫:http://npoi.codeplex.com

它配備了豐富的樣本,我能夠構建應用程序,以「任何CPU」,而不是限制爲86,這造成的問題與我們的一些其他第三方的DLL試圖使用。我在10分鐘內就開始和NPOI一起運行,所以我可以肯定地推薦它。

相關問題