HRESULT的例外:0x800A03EC(Excel 2007) [英] Exception from HRESULT: 0x800A03EC (Excel 2007)

查看:212
本文介绍了HRESULT的例外:0x800A03EC(Excel 2007)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用数据集创建Excel电子表格.这是我的代码.

I am using a dataset to create an Excel spreadsheet. Here is my code.

Public Sub excelcheck()
        Try
            ' Create the Excel Application object
            Dim excelApp As New ApplicationClass()

            ' Create a new Excel Workbook
            Dim excelWorkbook As Workbook = excelApp.Workbooks.Add(Type.Missing)

            Dim sheetIndex As Integer = 0
            Dim col, row As Integer
            Dim excelSheet As Worksheet

           
            ' Copy each DataTable as a new Sheet

            dsold = Utilities.exceldataset.Copy
            If dsold.Tables(0).Rows.Count > 65000 Then
                Dim i As Integer = 0
                Dim startind As Integer
                Dim endind As Integer
                startind = 0
                endind = 64999
                Dim totalcount As Double
                totalcount = dsold.Tables(0).Rows.Count
                Dim currentcount As Double
                currentcount = Math.Ceiling(totalcount / 65000)
                While (i < currentcount)

                    Dim dt As New System.Data.DataTable("Table" + Convert.ToString(i))
                    dt = splitrecords(dsold.Tables(0), dsold.Tables(0).Rows.Count, startind, endind)

                    If i = 0 Then
                        ds.Tables.Add(dt.Copy)
                    Else
                        dt.TableName = "Table" + Convert.ToString(i)
                        ds.Tables.Add(dt.Copy)
                    End If

                    startind = startind + 65000
                    endind = endind + 65000
                    i = i + 1
                End While
            Else
                ds = dsold.Copy
            End If


            For Each dt As System.Data.DataTable In ds.Tables

                sheetIndex += 1

                ' Copy the DataTable to an object array
                Dim rawData(dt.Rows.Count, dt.Columns.Count - 1) As Object

                ' Copy the column names to the first row of the object array
                For col = 0 To dt.Columns.Count - 1
                    rawData(0, col) = dt.Columns(col).ColumnName
                Next

                ' Copy the values to the object array
                For col = 0 To dt.Columns.Count - 1
                    For row = 0 To dt.Rows.Count - 1
                        rawData(row + 1, col) = dt.Rows(row).ItemArray(col)
                    Next
                Next

                ' Calculate the final column letter
                Dim finalColLetter As String = String.Empty
                Dim colCharset As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                Dim colCharsetLen As Integer = colCharset.Length

                If dt.Columns.Count > colCharsetLen Then
                    finalColLetter = colCharset.Substring( _
                     (dt.Columns.Count - 1) \ colCharsetLen - 1, 1)
                End If

                finalColLetter += colCharset.Substring( _
                  (dt.Columns.Count - 1) Mod colCharsetLen, 1)

                ' Create a new Sheet
                excelSheet = CType( _
                    excelWorkbook.Sheets.Add(excelWorkbook.Sheets(sheetIndex), _
                    Type.Missing, 1, XlSheetType.xlWorksheet), Worksheet)

                excelSheet.Name = dt.TableName

                ' Fast data export to Excel
                Dim excelRange As String = String.Format("A1:{0}{1}", finalColLetter, dt.Rows.Count + 1)
                excelSheet.Range(excelRange, Type.Missing).Value2 = rawData

                ' Mark the first row as BOLD
                CType(excelSheet.Rows(1, Type.Missing), Range).Font.Bold = True
                excelSheet = Nothing
            Next
            Dim strDate1 As String = String.Format("{0:dd}", DateTime.Now).ToUpper
            Dim strMonth As String = String.Format("{0:MM}", DateTime.Now).ToUpper()
            Dim stryear As String = String.Format("{0:yyyy}", DateTime.Now).ToUpper()
            StrServerFile = Utilities.Jobid + " " + strDate1 + strMonth + stryear + ".xls"
            ' Save and Close the Workbook
            excelWorkbook.SaveAs("C:\Bcp\" + StrServerFile, XlFileFormat.xlWorkbookNormal, Type.Missing, _
             Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, _
             Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing)
            excelWorkbook.Close(True, Type.Missing, Type.Missing)
            excelWorkbook = Nothing
            ' Release the Application object
            excelApp.Quit()
            excelApp = Nothing
            insertexcelfile(StrServerFile)
            ' Collect the unreferenced objects
            GC.Collect()
            GC.WaitForPendingFinalizers()

            MessageBox.Show("Excel Report Genearted Sucessfully")
            SetLabelText(False)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub


异常详细信息如下:
System.Runtime.InteropServices.COMException(0x800A03EC):来自HRESULT的异常:0x800A03EC
在System.RuntimeType.ForwardCallToInvokeMember处(字符串memberName,BindingFlags标志,对象目标,Int32 [] aWrapperTypes,MessageData& msgData)
在Microsoft.Office.Interop.Excel.Range.set_Value2(Object)
在D:\ exceltest \ Exceltest \ Form1.vb中的Exceltest.Form1.excelcheck()处:行118


The exception details are:
System.Runtime.InteropServices.COMException (0x800A03EC): Exception from HRESULT: 0x800A03EC
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
at Microsoft.Office.Interop.Excel.Range.set_Value2(Object )
at Exceltest.Form1.excelcheck() in D:\exceltest\Exceltest\Form1.vb:line 118

推荐答案

从给出的详细信息中得到答案.我建议修改捕获以显示ex.ToString()而不是仅显示消息.然后,您将获得堆栈跟踪,可以缩小原因范围,或者返回此处了解更多详细信息.

一个快速的Google似乎指示尝试保存时抛出此错误,您可能想签出SaveCopyAs.
This is a lot of code for people to glean an answer from given the dearth of detail. I''d recommend modifying the catch to show ex.ToString() instead of just the message. Then you''ll get a stack trace and you''ll be able to narrow down the cause, or come back here with more details.

A quick google seems to indicate this error is thrown when trying save, you might want to check out SaveCopyAs.


是的,您是对的;我已经将我的例外情况详细信息编辑到了问题中.
Yes, you''re right; I''ve edited my exception details into the question.


这篇关于HRESULT的例外:0x800A03EC(Excel 2007)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆