【问题标题】:VB export listview to ExcelVB导出列表视图到Excel
【发布时间】:2012-10-17 16:26:08
【问题描述】:

我在运行代码时不断收到“HRESULT 异常:0x800A03EC”错误。 一些论坛说“1”需要更改为“0”,反之亦然。 在这一点上,我只是不知道出了什么问题,没有什么突出的。我相信我已经加载了我需要的所有参考资料,因此非常感谢任何建议/帮助。

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Dim objExcel As New Excel.Application
    Dim bkWorkBook As Workbook
    Dim shWorkSheet As Worksheet
    Dim i As Integer
    Dim j As Integer

    objExcel = New Excel.Application
    bkWorkBook = objExcel.Workbooks.Add
    shWorkSheet = bkWorkBook.ActiveSheet
    For i = 0 To Me.ListView1.Columns.Count
        shWorkSheet.Cells(1, Chr(64 + i)) = Me.ListView1.Columns(i)
    Next
    For i = 1 To Me.ListView1.Items.Count
        shWorkSheet.Cells(i + 2, "A") = Me.ListView1.Items(i).Text
        For j = 2 To Me.ListView1.Items.Count
            shWorkSheet.Cells(i + 2, Chr(64 + j)) = Me.ListView1.Items(i).SubItems(j - 1)
        Next
    Next

    objExcel.Visible = True
End Sub

谢谢,

【问题讨论】:

    标签: vb.net excel listview extract


    【解决方案1】:

    我重新测试并发现我没有完全测试一个包含多于几列的列表视图。试试这个:

        Try
            Dim objExcel As New Excel.Application
            Dim bkWorkBook As Workbook
            Dim shWorkSheet As Worksheet
            Dim i As Integer
            Dim j As Integer
    
            objExcel = New Excel.Application
            bkWorkBook = objExcel.Workbooks.Add
            shWorkSheet = CType(bkWorkBook.ActiveSheet, Worksheet)
            For i = 0 To Me.ListView1.Columns.Count - 1
                shWorkSheet.Cells(1, i + 1) = Me.ListView1.Columns(i).Text
            Next
            For i = 0 To Me.ListView1.Items.Count - 1
                For j = 0 To Me.ListView1.Items(i).SubItems.Count - 1
                    shWorkSheet.Cells(i + 2, j + 1) = Me.ListView1.Items(i).SubItems(j).Text
                Next
            Next
    
            objExcel.Visible = True
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    

    【讨论】:

    • 感谢您的回复。我也试过你的方法,但我仍然得到一个错误:'ArgumentOutOfRangeException was unhandled'; InvalidArgument=“1”的值对“索引”无效。对于您提供的第 7 行代码。有什么想法吗?
    • 谢谢,完美!我不得不取出 catch ex 作为异常和 msgbox 部分。我真的需要那部分吗?
    【解决方案2】:
    shWorkSheet.Cells(1, Chr(64 + i)) 
    

    应该是

    shWorkSheet.Cells(1, i) 
    

    Cells 需要一个或两个数字参数。

    【讨论】:

    • @Tim:感谢您的回复。当我尝试该解决方案时,我得到一个未处理的 COMException。这是否意味着我缺少 COM 引用?
    • 列索引是从 1 开始的,所以我应该从 1 开始
    • 我确保在这些情况下索引以 1 开头,所以我不知道为什么它仍然会出错。
    【解决方案3】:

    此代码仅添加:CreateObject 和 autofiT 行和列

      Public Sub ExportLw2Excel(Lw As ListView)
        Try
            Dim objExcel As Object ' New Excel.Application
            objExcel = CreateObject("Excel.Application")
            Dim bkWorkBook As Object 'As Workbook
            Dim shWorkSheet As Object 'As Worksheet
            Dim i As Integer
            Dim j As Integer
    
            'objExcel = New Excel.Application
            bkWorkBook = objExcel.Workbooks.Add
            shWorkSheet = bkWorkBook.activesheet '  CType(bkWorkBook.ActiveSheet, Worksheet)
            For i = 0 To Lw.Columns.Count - 1
                shWorkSheet.Cells(1, i + 1) = Lw.Columns(i).Text
            Next
            For i = 0 To Lw.Items.Count - 1
                For j = 0 To Lw.Items(i).SubItems.Count - 1
                    shWorkSheet.Cells(i + 2, j + 1) = Lw.Items(i).SubItems(j).Text
                Next
            Next
    
            objExcel.Cells.Select
            objExcel.Cells.EntireColumn.AutoFit
            objExcel.Cells.EntireRow.AutoFit
            objExcel.Range("A1:B1").Select
            objExcel.Selection.Font.Bold = True
            objExcel.Range("A1").Select
    
            objExcel.Visible = True
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
    

    【讨论】:

    • 非常感谢。这对我很有用。这是我需要使用的 createobject,因为我猜我没有为所选答案提供参考。
    【解决方案4】:

    如果您想将带有彩色线条的列表视图导出到 Excel,这是一个解决方案。请根据您的 ListViews 行和列索引正确定位索引!

    Try
        Dim objExcel As New Excel.Application
        Dim bkWorkBook As Excel.Workbook
        Dim shWorkSheet As Excel.Worksheet
        Dim i As Integer
        Dim j As Integer
    
        objExcel = New Excel.Application
        bkWorkBook = objExcel.Workbooks.Add
        shWorkSheet = CType(bkWorkBook.ActiveSheet, Excel.Worksheet)
        For i = 0 To objLv.Columns.Count - 1
            shWorkSheet.Cells(1, i + 1) = objLv.Columns(i).Text
        Next
    
        For i = 0 To objLv.Items.Count - 1
            Dim clr = ColorTranslator.ToOle(objLv.Items(i - 1).BackColor)
            shWorkSheet.Rows(i).Interior.Color = clr
            For j = 2 To objLv.Columns.Count
                    shWorkSheet.Cells(i + 1, j - 1).Value = objLv.Items(i - 1).SubItems(j - 1).Text
            Next
        Next
    
        objExcel.Visible = True
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      相关资源
      最近更新 更多