Vb.net не удается перенести данные с изображением из access в excel

#excel #vb.net #ms-access

Вопрос:

Привет, есть ли способ перенести базу данных access с изображением в excel ? Так как мое изображение использует ole-объект.

     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    If DataGridView1.RowCount = Nothing Then
        MessageBox.Show("Sorry nothing to export into excel sheet.." amp; vbCrLf amp; "Please retrieve data in datagridview", "", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Exit Sub
    End If
    Dim rowsTotal, colsTotal As Short
    Dim I, j, iC As Short
    System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
    Dim xlApp As New excel.Application

    Try
        Dim excelBook As excel.Workbook = xlApp.Workbooks.Add
        Dim excelWorksheet As excel.Worksheet = CType(excelBook.Worksheets(1), excel.Worksheet)
        xlApp.Visible = True

        rowsTotal = DataGridView1.RowCount - 1
        colsTotal = DataGridView1.Columns.Count - 1
        With excelWorksheet
            .Cells.Select()
            .Cells.Delete()
            For iC = 0 To colsTotal
                .Cells(1, iC   1).Value = DataGridView1.Columns(iC).HeaderText
            Next
            For I = 0 To rowsTotal - 1
                For j = 0 To colsTotal
                    .Cells(I   2, j   1).value = DataGridView1.Rows(I).Cells(j).Value
                    .Shapes.AddPicture("C:pic.jpg", MsoTristate.msofalse, msotristate.msoCTrue, 50, 50, 300, 45) <-I just add this to transfer the image
                Next j
            Next I
            .Rows("1:1").Font.FontStyle = "Bold"
            .Rows("1:1").Font.Size = 12
            .Cells.Columns.AutoFit()
            .Cells.Select()
            .Cells.EntireColumn.AutoFit()
            .Cells(1, 1).Select()

        End With
    Catch ex As Exception
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    Finally
        'RELEASE ALLOACTED RESOURCES
        System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
        xlApp = Nothing
    End Try
End Sub
 

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

Импорт, который я использую:

 Imports system.data.oledb
Imports microsoft.office.core
imports excel = microsoft.office.interop.excel
 

Комментарии:

1. Когда вы говорите «Просто не работает», что это значит? Возможно, вы получаете какое-то исключение? Являются ли данные другими, чем вставляемая картинка? Вообще никаких данных не вставлено? Обратите внимание, что у вас жестко закодировано имя файла изображения, это правильное изображение?

2. Это то, что все данные не будут переданы, если есть изображение. Если есть изображение, то в Excel экспортируются только предыдущие данные перед изображением. Есть ли способ получить файл без жестко заданного имени объекта ?.

3. Ну, посмотрим на код, если он работает без этого . Формы. AddPicture, я не вижу никакой очевидной причины, почему бы этого не сделать с добавлением изображения. Вы уверены, что изображение не вставляется поверх данных, скрывая его из поля зрения?

4. Не совсем…. В представлении картинка есть, но она вообще не передается. Мой экспорт остановился прямо перед изображением, поэтому вставляется только первая база данных. Я попробую использовать новую базу данных, чтобы посмотреть, есть ли другая..

5. Что вы имеете в виду под «базой данных», вы читаете строки из представления DataGrid. Что именно вы ожидаете от новой базы данных? И код просто не останавливается, он будет предоставлять обратную связь, рассказывающую вам, что происходит. Где именно он останавливается?