我的公司网络上有一台没有安装办公室的计算机(实际上有几台机器)。我需要开发一个vb.net程序,它将从电子表格中解析信息,该电子表格通常是.xls格式。我不认为有很多选项可以在没有互操作的情况下从.xls文档中读取数据。如果是这样,有什么选择?
如果我甚至可以在没有互操作的情况下以编程方式将.xls转换为.xlsx,那也是一个选项。然后我可以使用ClosedXML从xlsx解析。或者有没有办法用ClosedXML读取.xls文件,我没有看到?
任何帮助都会很棒,因为我无法找到答案。
答案 0 :(得分: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";
的更多信息
答案 1 :(得分: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';")