2010-03-19 57 views
2

我必須用C#處理一些Excel文檔。這是一個沒有用戶交互的批處理過程。它會將數據解析到數據庫中,然後輸出很好的報告。數據非常髒,無法使用ADO準備好。數據遠不是一個很好的表格格式。閱讀髒兮兮的excel表單的最佳方式

Best被定義爲最穩定(更新不太可能中斷)/清除(簡潔)代碼。快速並不重要。如果它運行不到8小時,我很好。

我有邏輯來找出數據。我所需要做的只是基本的單元格導航和getvalue類型的函數。給我X單元格的值作爲字符串,如果它與Y值相等並且距離爲< 3,那麼給我Z單元格的值。

我的問題是,挖掘excel的最佳方法是什麼?

VSTO? Excel對象庫? 第三個選項我不知道?

回答

2

由於權限以及您的dll掛鉤到您正在使用的文檔,VSTO是一種痛苦。假設你實際上並沒有改變這些文件,而且ADO絕對不是一種選擇,我會說通過Excel COM接口進行自動化是你最好的選擇。它可以讓你按照通常的方式編程任何其他應用程序,併爲VSTO提供與數據提取一樣多的選項。

0

Office程序可以作爲.NET中的對象加載。以下是我用來將Excel加載到VB6中的編碼存根。無論您使用哪種MS語言,代碼基本上都是相同的。

Dim xlApp As New Excel.Application 
Dim wb As Excel.Workbook 
Dim ws As Excel.Worksheet 

On Error Resume Next 
wb = xlApp.Workbooks.Open("c:\testdata.xls") 
If Err.Number > 0 Then 
    If Err.Number = 1004 Then 
     MsgBox("File not found") 
    Else 
     MsgBox("Error " & Err.Number & " occurred.") 
    End If 
    Exit Sub 
End If 

ws = wb.Sheets("Sheet1") 
Text1.Text = ws.Cells(1, 1).Value 

wb = Nothing 
ws = Nothing 
xlApp = Nothing 
-1

試試,看看堆放超過流量問題Convert Excel Range to ADO.NET DataSet or DataTable, etc

+0

這就是爲什麼我確信我闡述的數據是不是在任何類型的數據格式的這非常容易轉換到一個表... – 2010-03-20 16:22:23

+0

@十噸大猩猩 - 總是有選擇的工作。如果你看看那裏的答案,你可能會說服自己。選擇最好的是你的興趣。從我的經驗來看,我使用的代碼是非常大的電信Excel表。它工作正常,完全沒有問題。 – wonde 2010-03-20 17:00:08