#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. Что именно вы ожидаете от новой базы данных? И код просто не останавливается, он будет предоставлять обратную связь, рассказывающую вам, что происходит. Где именно он останавливается?