Member 11011853 Ответов: 1

Необработанное исключение типа 'System.во время выполнения.interopservices.исключение comexception произошел в microsoft.visualbasic.dll дополнительная информация: исключение из HRESULT: 0x800a03ec. Ошибка


Привет,
Я получаю ошибку "необработанное исключение типа System. Runtime.InteropServices.COMException произошло в microsoft.visualbasic.dll дополнительная информация: исключение из HRESULT: 0x800A03EC. " при присвоении значения ячейке рабочего листа excel. Использование VB.net 2005 и SQL server 2008.
Ошибка, возникающая в следующем коде:
worksheet1.Ячейки (1, tmp) = dc. ColumnNam


Полный код ниже для создания файла EXCEL:
Private Sub btnExport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExport.Click
        Dim APP As New Microsoft.Office.Interop.Excel.Application()
        Dim worksheet1 As Microsoft.Office.Interop.Excel.Worksheet
        Dim workbook As Microsoft.Office.Interop.Excel.Workbook

        Dim oldCI As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture
        System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("en-US")
        APP.Workbooks.Add()
        Dim misValue As Object = System.Reflection.Missing.Value

        workbook = APP.Workbooks.Add()
        worksheet1 = workbook.Sheets("sheet1")
        System.Threading.Thread.CurrentThread.CurrentCulture = oldCI


        ''''''' ---------------------Fetching data from database n exporting to excel ---------------------------
        Dim dt As New System.Data.DataTable()
        Dim sqlcon As New SqlConnection(BusinessObject.ConnectionString)
        If sqlcon.State = ConnectionState.Closed Then sqlcon.Open()
        Dim sqlcmd As New SqlCommand()
        sqlcmd.Connection = sqlcon
        sqlcmd.CommandText = "select CLBC.*,PO.PONumber,OC.OCNumber,PI.PINumber,ChkLstNo,ChkLst.Status from ChklstBarCodeDetail CLBC INNER JOIN PO ON CLBC.POId=PO.POId INNER JOIN ChkLst ON ChkLst.ChkLstId=CLBC.ChkLstId left JOIN OC ON CLBC.OCId=OC.OCId LEFT OUTER JOIN PI ON PI.PIId=CLBC.PIID where CLBC.ChkLstId='" & SelChkLst.Id & "' order by dbo.DOCId(ChkLstBarCodeDetailId)"
        Dim adpt As New SqlDataAdapter(sqlcmd)
        adpt.Fill(dt)

        Dim columnsCount As Integer = 0
        If dt.Rows.Count > 0 Then
            columnsCount = dt.Columns.Count
        End If

        Dim tmp As Integer = 0
        Dim dc As DataColumn
        For Each dc In dt.Columns
            'Console.Write("{0,15}", dc.ColumnName)
            Dim s As String = dc.ColumnName.ToString()
            tmp = tmp + 1
            'worksheet.Cells(1, tmp).Value = dc.ColumnName.ToString()
            worksheet1.Cells(1, tmp) = dc.ColumnName
            tmp = tmp + 1
        Next

        'Export Each Row Start
        Dim i As Integer
        For i = 0 To dt.Rows.Count - 1
            Dim columnIndex As Integer = 0
            Do Until columnIndex = columnsCount
                worksheet1.Cells(i + 2, columnIndex + 1).Value = dt.Rows(i)(columnIndex).ToString()
                columnIndex += 1
            Loop
        Next
        'Export Each Row End



        '''' saving excel file
        Dim saveFileDialog1 As New SaveFileDialog()
        saveFileDialog1.Filter = "Excel File|*.xlsx"
        saveFileDialog1.Title = "Save In"
        saveFileDialog1.ShowDialog()
        Dim filename As String = saveFileDialog1.FileName
        If Len(filename) > 0 Then
            workbook.SaveAs(filename)
        End If

        APP.Quit()

        releaseObject(APP)
        releaseObject(workbook)
        releaseObject(worksheet1)
    End Su




Любая помощь ценится...!

Спасибо...!

Что я уже пробовал:

Я ссылался на многие решения с форумов, но не получал правильного решения.

1 Ответов

Рейтинг:
0

Jochen Arndt

Источник ошибки находится здесь:

Dim tmp As Integer = 0

В Excel индексы ячеек начинаются с "1".

Извините, пропустил приращение.

Поскольку ошибка является общей, трудно обнаружить источник.

Я предлагаю проверить, все ли задействованные объекты действительны.
Другая проверка может быть попыткой сначала прочитать ячейку.


Member 11011853

Спасибо за ваш ответ. Перед тем, как присвоить значение в ячейку,"темп" значение увеличивается на единицу.

Jochen Arndt

Уупс.

Мне этого не хватало. Проблема в том, что эти ошибки являются общими и поэтому могут иметь несколько причин.

Member 11011853

Я попытался реализовать это по-другому, в том числе и получив ту же ошибку.

Private Sub btnExport_Click(ByVal sender As System.Объект, бывал е как система.EventArgs) обрабатывает btnExport.Щелчок
Dim xlApp как объект
Dim xlBook как объект
Dim xlSheet как объект
Dim xlSheet_PI как объект

Dim xsht как Excel.Рабочая тетрадь

xlApp = CreateObject ("Excel.Приложение")
Дим олдси как система.Глобализация.CultureInfo = Система.Нарезание резьбы.Нить.CurrentThread.Текущая культура
Система.Нарезание резьбы.Нить.CurrentThread.CurrentCulture = Новая Система.Глобализация.CultureInfo ("en-US")
xlApp.Книги.Добавь()
xlBook = xlApp.Книги.Добавь
xlSheet = xlBook.Рабочие листы(1)
'xlSheet_PI = xlBook.Рабочие листы(2)
xlSheet.Активировать()


xlSheet.Name = " Контрольный Список Материалов"
Система.Нарезание резьбы.Нить.CurrentThread.Свойства currentculture = oldCI



С xlSheet.Приложение
. Cells(1, 1). value = " ChkLstBarCodedetailId"
.Клетки(1, 2).значение = "ChkLstId"
. Ячейки (1, 3). Значение = " POId"
. Ячейки(1, 4). значение = " OCId"
. Ячейки(1, 5). значение = " PIId"
. Ячейки(1, 6). значение = " ShipTo"
. Ячейки (1, 7). значение = " TrayNo"
. Cells(1, 8). value = " ItemMasterId"
. Cells(1, 9). value = " ItemCode"
.Клетки(1, 10).значение = "BarCodeNo"
. Cells(1, 11). value = " ItemName"
. Cells(1, 12). value = " PackSize"
. Ячейки(1, 13). значение = " Лотно"
.Клетки(1, 14).значение = "QtyOrdered"
.Клетки(1, 15).значение = "QtyInBin"
. Ячейки(1, 16). значение = " DOC"
. Cells(1, 17). value = " имя пользователя"
.Клетки(1, 18).значение = "PONumber"
.Клетки(1, 19).значение = "OCNumber"
.Клетки(1, 20).значение = "PINumber"
. Ячейки (1, 21). value = " ChkLstNo"
. Ячейки (1, 22). значение = " статус"
Конец С

xlSheet.Приложения.видимое = истинное

Конец Подводной Лодки

Member 11011853

Код, опубликованный ранее, отлично работает в VS2010, но показывает ошибку в VS2005.

Jochen Arndt

Вы должны отредактировать свой вопрос и добавить эту информацию.
Но зачем вам использовать более старую версию?

Member 11011853

Проект был реализован на VS2005, и сейчас он совершенствуется. Пытаясь реализовать генерацию файлов excel разными способами, все методы показывают одну и ту же ошибку.
путь-1:
Dim tmp как целое число = 1
Дим постоянного тока как объект datacolumn
Для каждого постоянного тока в dt.Столбцы
- Консоль.Write ("{0,15}", dc. ColumnName)
Дим как строка = постоянного тока.Имя_столбца.Метод toString()
'tmp = tmp + 1
- рабочий лист.Ячейки (1, tmp). Value = dc.ColumnName.Метод toString()
worksheet1.Ячейки (1, tmp) = dc. ColumnName
tmp = tmp + 1
Следующий

путь-2:
worksheet1.Ячейки (1, 1). значение = " abc"
worksheet1.Ячейки (1, 2). Значение = " xyz"
worksheet1.Ячейки (1, 3). Значение = " pqrs"

путь-3:
С worksheet1.Приложение
. Ячейки(1, 1). значение = " число PO"
. Ячейки (1, 2). Значение = " Поно"
. Ячейки (1, 3). значение = " дата PO"

Конец С