Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在所有版本的excel中工作的程序_Vb.net_Excel_Officedev - Fatal编程技术网

Vb.net 在所有版本的excel中工作的程序

Vb.net 在所有版本的excel中工作的程序,vb.net,excel,officedev,Vb.net,Excel,Officedev,我最近开发了一个Windows窗体应用程序,它有几个数据网格。我的客户需要将数据导出到Excel中。他们使用不同版本的Excel(即20032007202013),但我使用的是Office 2013。我使用过excel 2013参考资料 (Microsoft excel 15.0对象库) 在我的节目里。最近,我的客户报告说导出选项不起作用。从我的调查来看,我的应用程序对于那些使用Office 2013但不使用以前的Office版本的人来说运行良好 如何确保我的应用程序在旧版本的Excel中工作?

我最近开发了一个Windows窗体应用程序,它有几个数据网格。我的客户需要将数据导出到Excel中。他们使用不同版本的Excel(即20032007202013),但我使用的是Office 2013。我使用过excel 2013参考资料

(Microsoft excel 15.0对象库)

在我的节目里。最近,我的客户报告说导出选项不起作用。从我的调查来看,我的应用程序对于那些使用Office 2013但不使用以前的Office版本的人来说运行良好


如何确保我的应用程序在旧版本的Excel中工作?

即使根本没有安装Excel,您的应用程序也可以工作。您可以使用本机excel库,也可以使用免费的.NET库

对于您可以使用的XLS格式和XLSX,这种方法的缺点是,如果您决定这样做,您将不得不更改现有代码

EPPlus将DataTable导出到excel的示例,来自此SO:

有关NPOI示例,请参见此处:


如果您知道所有用户都将使用excel,则可以将excel引用转换为“对象”,而不是硬编码的excel对象,然后从项目中删除DLL引用。这将适用于所有版本的office,只要您不使用旧版本中没有的某些新功能

例如,与此相反:

Dim _xlApp As Excel.Application
Dim _xlBook As Excel.Workbook
试试这个:

Dim _xlApp As Object 'Excel.Application
Dim _xlBook As Object 'Excel.Workbook
除了excel应用程序的实例化之外,所有操作都是相同的(除了没有智能):

_xlApp = CreateObject("Excel.Application") 'New Excel.Application

我这样做已经有15年了,从来没有根据不同的版本修改过代码。

谢谢你的帮助@Steve和@Antonio Bakula

这是我最新的绑定代码,可以在所有版本的excel上使用

 Try
            Dim app As Object
            Dim xlbook As Object
            Dim xlsheet As Object
            app = CreateObject("Excel.Application")
            xlbook = app.Workbooks.Add()
            xlsheet = xlbook.ActiveSheet
            app.Visible = True
            Dim iX As Integer
            Dim iY As Integer
            Dim iC As Integer
            Dim iz As Integer
            For iC = 0 To DataGridView1.Columns.Count - 1
                xlsheet.Cells(1, iC + 1).Value = DataGridView1.Columns(iC).HeaderText
            Next
            iz = 1
            For iX = 0 To DataGridView1.Rows.Count - 1
                For iY = 0 To DataGridView1.Columns.Count - 1
                    Dim a As String = DataGridView1(iY, iX).Value
                    If a <> Nothing Then xlsheet.Cells(iz + 1, iY + 1).value = DataGridView1(iY, iX).Value.ToString
                Next
                iz = iz + 1
            Next

            MsgBox("Export Done", MsgBoxStyle.Information, "MODEL AND WARRANTY")

            app.Visible = True
            app.UserControl = True
            releaseobject(app)
            releaseobject(xlbook)
            releaseobject(xlsheet)
        Catch ex As Exception
            MessageBox.Show(ex.ToString())
        End Try

谢谢你的回复。我要试试这个。。如果需要帮助,请告诉你。正在工作!我完全失去了理智。。我在VB6中多次使用这种方法(后期绑定)。感谢您的回复。您是否可以提供任何代码示例(我是新手)更新我的答案,但如果您不想更改现有代码,Steve的答案是我处理非常有效的示例的方法。。但是我不能改变我项目的全部代码。。我可能会在下一个项目中使用这种方法。。非常感谢您抽出时间:)
 Try
            Dim app As Object
            Dim xlbook As Object
            Dim xlsheet As Object
            app = CreateObject("Excel.Application")
            xlbook = app.Workbooks.Add()
            xlsheet = xlbook.ActiveSheet
            app.Visible = True
            Dim iX As Integer
            Dim iY As Integer
            Dim iC As Integer
            Dim iz As Integer
            For iC = 0 To DataGridView1.Columns.Count - 1
                xlsheet.Cells(1, iC + 1).Value = DataGridView1.Columns(iC).HeaderText
            Next
            iz = 1
            For iX = 0 To DataGridView1.Rows.Count - 1
                For iY = 0 To DataGridView1.Columns.Count - 1
                    Dim a As String = DataGridView1(iY, iX).Value
                    If a <> Nothing Then xlsheet.Cells(iz + 1, iY + 1).value = DataGridView1(iY, iX).Value.ToString
                Next
                iz = iz + 1
            Next

            MsgBox("Export Done", MsgBoxStyle.Information, "MODEL AND WARRANTY")

            app.Visible = True
            app.UserControl = True
            releaseobject(app)
            releaseobject(xlbook)
            releaseobject(xlsheet)
        Catch ex As Exception
            MessageBox.Show(ex.ToString())
        End Try
Sub releaseobject(ByVal obj As Object)
    Try
        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
        obj = Nothing
    Catch ex As Exception
        obj = Nothing
    End Try
End Sub