不使用互操作将xls转换为xlsx

时间:2014-03-26 15:58:14

标签: vb.net excel office-interop

我的公司网络上有一台没有安装办公室的计算机(实际上有几台机器)。我需要开发一个vb.net程序,它将从电子表格中解析信息,该电子表格通常是.xls格式。我不认为有很多选项可以在没有互操作的情况下从.xls文档中读取数据。如果是这样,有什么选择?

如果我甚至可以在没有互操作的情况下以编程方式将.xls转换为.xlsx,那也是一个选项。然后我可以使用ClosedXML从xlsx解析。或者有没有办法用ClosedXML读取.xls文件,我没有看到?

任何帮助都会很棒,因为我无法找到答案。

2 个答案:

答案 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";

connection strings此处

的更多信息

答案 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';")