2012-10-17 44 views
0

当我运行我的代码时,我总是收到'Exception from HRESULT:0x800A03EC'错误。有些论坛认为'1'需要更改为'0',反之亦然。 在这一点上,我只是不知道什么是错的,没有什么是突出的。我相信我已经加载了所有我需要的参考资料,所以任何建议/帮助都会很感激。VB导出listview到Excel

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 

谢谢,

回答

0

我重新测试,发现我还没有完全测试一个列表视图比几个列更多。试试这个:

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 
+0

感谢您的回复。我也尝试了你的方法,但是我仍然得到一个错误:'ArgumentOutOfRangeException was unhandled'; InvalidArgument ='1'的值对'index'无效。您提供的第七行代码。有什么想法吗? – cheapkid1

+0

@ cheapkid1 - 代码已更新 – UnhandledExcepSean

+0

谢谢,这很完美!我不得不把catch ex作为例外和msgbox部分。我真的需要那个部分吗? – cheapkid1

1
shWorkSheet.Cells(1, Chr(64 + i)) 

应该是

shWorkSheet.Cells(1, i) 

细胞预计的一个或两个数字参数。

+0

这是问题的一部分。 – UnhandledExcepSean

+0

@ Tim:谢谢你的回应。当我尝试这个解决方案时,我得到一个COMException异常。这是否意味着我错过了COM参考? – cheapkid1

+0

列索引是基于1的,所以我应该从1 –

-1

这是一个解决方案,如果你想用彩色导出你的listview到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