0

我在循环和创建 MS Excel 文档时遇到了一些问题,代码片段如下

Private Sub selectedRowsButton_Click( _
ByVal sender As Object, ByVal e As System.EventArgs) _
Handles selectedRowsButton.Click

    Dim selectedRowCount As Integer = _
        DataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected)

    If selectedRowCount > 0 Then

        Dim sb As New System.Text.StringBuilder()
        Dim objexcel As New Excel.Application
        Dim i As Integer
        Dim FACode As Integer
        Dim Sitename As Integer
        Dim Sitecode As Integer
        Dim Address As Integer
        Dim City As Integer
        Dim State As Integer
        Dim ZIP As Integer


        FACode = 1
        Sitename = 5
        Sitecode = 2
        Address = 6
        City = 7
        State = 9
        ZIP = 10
        Dim xlWorkbook As Excel.Workbook
        xlWorkbook = objexcel.Workbooks.Open("template path")
        For i = 0 To selectedRowCount - 1

            objexcel.Visible = True
            objexcel.Range("B2").Value = DataGridView1.SelectedCells(Sitename).Value.ToString()

            objexcel.Range("B3").Value = DataGridView1.SelectedCells(Sitecode).Value.ToString()

            objexcel.Range("B5").Value = DataGridView1.SelectedCells(FACode).Value.ToString()

            Dim thisfile As Object


            thisfile = objexcel.Range("B5").Value & "." & _
            objexcel.Range("B3").Value & "." & "otherstring" & "." & "otherstring2" & "." & ".xls"

            With objexcel

                xlWorkbook.SaveAs(Filename:="c:\test\" & thisfile)
                '~~> Close the Excel file without saving
                xlWorkbook.Close(False)
            End With          

        Next i

    End If

我从 HRESULT 收到错误异常:语句的 0x800A03EC

  objexcel.Range("B2").Value = DataGridView1.SelectedCells(Sitename).Value.ToString()

如果我在创建程序之前只选择了我的 DataGrid 的一行工作正常,那么当我选择多行时就会发生此错误。因为我是专门为多行选择创建程序,所以我很难理解我哪里出错了。任何帮助或指针表示赞赏,谢谢!

4

1 回答 1

0

两件事情

  1. 你已经声明了objexcelAsExcel.Application所以你不应该使用objexcel.Range("B2").Value. 使用xlWorkbook.Range("B2").Value. 在您的代码中随处更改它。

  2. 你不能那样使用SaveAs。请参阅下面的快照。如果要保存为 xls 文件,则必须使用FileFormat:=56

请参阅此代码示例

'~~> Save As file
xlWorkbook.SaveAs(Filename:="c:\test\" & thisfile, FileFormat:=56)

如果您未指定文件格式,则在打开文件后打开文件时会收到错误消息。

您可能想查看此链接,了解如何从 VB.Net 自动化 Excel

主题:VB.NET 和 Excel

链接http ://www.siddharthout.com/vb-dot-net-and-excel/

在此处输入图像描述

我不太确定你到底想用 DGV 做什么。就像肖恩提到的那样,您没有增加值。如果您可以发布 DGV 外观的快照以及导出后 Excel 文件的外观,那么我们可以以更好的方式为您提供帮助 :)

于 2012-06-25T15:35:36.493 回答