2014-03-26 61 views
1

我的公司網絡上沒有安裝辦公室的計算機(實際上有多臺機器)。我需要開發一個vb.net程序來解析通常爲.xls格式的電子表格中的信息。我不覺得在沒有互操作的情況下從.xls文檔讀取數據有很多選擇。如果是的話,有什麼選擇?將xls轉換爲xlsx無需互操作

如果我甚至可以在沒有interop的情況下以編程方式將.xls轉換爲.xlsx,那也是一個選項。然後我可以使用ClosedXML從xlsx解析。或者有沒有辦法用ClosedXML讀取一個.xls文件,我沒有看到?

任何幫助將是偉大的,因爲我無法找到這個答案。

回答

2

您不需要使用com interop從Excel文件讀取。您可以使用OLEDB(雖然你可能需要安裝office data connectivity components

Imports System.Data.OleDb: 

Public Shared Function ReadExcelWorkSheet(ByVal sheetName As String, ByVal connectionString As String) As DataTable 
    Dim sql As String = String.Format("SELECT * FROM [{0}$]", sheetName) 
    Dim dt = New DataTable() 

    Using conn As OleDbConnection = New OleDbConnection(connectionString) 
     Using cmd = New OleDbCommand(sql, conn) 
      conn.Open() 
      Using adapter = New OleDbDataAdapter(cmd) 
       adapter.Fill(dt) 
      End Using 
     End Using 
     conn.Close() 
    End Using 
    Return dt 
End Function 

如果連接字符串是XLSX文件:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES"; 

或XLS文件:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myOldExcelFile.xls;Extended Properties="Excel 8.0;HDR=YES"; 

更多信息在connection strings這裏

+0

謝謝!我也很欣賞代碼片段。我只需要安裝Microsoft.Ace.OleDB.12.0提供程序,但我認爲這應該起作用。 – HKImpact

1

您可以通過ADO.Net閱讀它。我需要查看您現有的代碼,但是這應該允許您在沒有Excel的情況下打開它。

System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx; 
Extended Properties='Excel 12.0 Xml;HDR=YES';") 
+0

更新:它使用的組件可能必須單獨安裝,p呃這[其他答案](http://stackoverflow.com/a/3971925/2258) –

+0

謝謝吉米,這幾乎是我要做的。感謝幫助 – HKImpact