2011-10-18 53 views
1

我需要開發一個服務,並將其安裝到一個w2003框來讀取excel文件,然後處理其信息。過程如下,用戶將使用FTP上傳excel文件,然後我的服務必須接受這些文件,驗證並更新SQL Server數據庫。閱讀excel服務器端

該應用程序在我的計算機上運行正常,但在服務器上請求這些庫,但是當我嘗試安裝MS Office 2003主互操作程序集時,系統顯示「請在安裝產品之前安裝Microsoft Office 2003」。

我寧願遠離任何服務器升級,因爲我們應該要求確定等。所以,有沒有一種簡單的方法來讀取excel文件,而無需在服務器中安裝任何更新。

歡迎任何評論。

謝謝, m0dest0。

ps。用vb.net和VS 2008

+0

我認爲如果您使用Excel對象庫來操作Excel文件,您將需要在服務器計算機上安裝excel。 –

+1

如果您允許用戶上傳文件,您是否將版本限制爲僅限Office 2003?如果用戶安裝了更新版本的Office,該怎麼辦? – zeroef

+0

@Matt,這將是一個痛苦的安裝過程。 – m0dest0

回答

2

在服務器上使用互操作不被微軟支持 - 看http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2

由於Windows Vista中引入了MS幾個安全有關的措施,防止Windows服務從做「臺式機一樣的「事情......這意味着你將不得不繞過幾項安全措施才能使其運行(不推薦!)。

爲了處理與Excel服務器中的場景有幾個選項(免費的和商業)那裏:

我可以推薦Aspose.CellsFlexcel ......沒有嘗試SpreadsheetGear但聽到+閱讀了大量良好關於它的東西...

自由選項(雖然只適用於較新的xlsx格式!)是例如OpenXML 2 from MSEPPlus

+0

+1 for OpenXML - 在這裏找到優秀的例子有點困難,但是一旦你設置了一些東西,你就可以用它做出驚人的事情。 – zeroef

+0

@zeroef是真的,但OP寫了Excel 2003,這意味着XLS不是XLSX,所以使用它取決於OP是否可以切換到更新的Excel格式...我提到的(商業)庫可以做到這兩個, ... – Yahia

+0

我一定瞥了一眼。好趕上 – zeroef

0

對於沒有任何安裝在任何最新版本的Windows Server上的解決方案.....我不確定確切的VB.NET代碼,但您應該可以輕鬆地在任何使用Microsoft的計算機上執行此操作OLEDB驅動程序應該可以在任何最新版本的Windows服務器上使用,或者可以從微軟網站免費下載,以便安裝非常舊版本的Windows服務器。我會嘗試僞代碼,所以你必須適應VB.NET。請注意,爲了按名稱引用字段,工作表中所選區域的第一行必須包含列值中的字段名。否則,您只需使用數字值來按列位置對每個返回的字段進行索引。

Set objExcelConnection = CreateObject("ADODB.Connection") 
objExcelConnection.Provider = "Microsoft.Jet.OLEDB.4.0" 
objExcelConnection.ConnectionString = "Data Source=d:\path\to\excel\file\on\your\server.xls;Extended Properties=""Excel 8.0;IMEX=1;"";" 
objExcelConnection.CursorLocation = 3 
objExcelConnection.Open 


sSQL = "select * from [worksheetname$]" 
set rsWorksheet = objExcelConnection.Execute(sSQL) 
do while not rsWorksheet.Eof 
    sValue = rsWorksheet("FieldName") 
    rsWorksheet.MoveNext 
loop 
rsWorksheet.Close 

set objExcelConnection = nothing 
0

當我需要處理Excel文件時,我使用Excel Data Reader(http://exceldatareader.codeplex.com/)。它可以毫無困難地處理xls和xlsx文件,並且我已經在服務器操作系統上的幾個應用程序中運行它。它將每個工作表保存爲一個DataTable對象,並且DataTable中的每個「單元」對應於具有相同地址的Excel單元。根據您設置SQL服務器鏈接的方式,可能不需要太多轉換將內容轉儲到數據庫中。