26/04/21 12:55
dylan666
Ciao a tutti,
vorrei esportare il contenuto di un DataGridView in Excel con tutta la formattazione.
Ho trovato questo link:
stackoverflow.com/questions/39210329/…
Con una conversione online da C# a VB.Net sono arrivato a questo codice:
La riga con "Workbook()" VS me la segna come "non definita" e mi propone vari import, tra i quale scelgo "Imports Microsoft.Office.Interop.Excel"
Ma ditemi se già qui ho sbagliato! A questo punto eseguo il mio codice ed con un bottone passo il nome del DataGridView da salvare alla funzione.
Mi appare la finestra di salvataggio, premo "Salva" e mi appare questo errore, sempre per "Workbook()".
Cercando in giro consigliano di sostituire Workbook() con Workbooks.Add() ma non ho capito come.
Ho provato anche sostituendo Workbook() con XLWorkbook() così il file viene salvato ma non mi riporta la formattazione, o almeno non quella che a me interessa, cioè il colore di sfondo delle celle...
Mi fate capire (anche con esempi) come correggere?
Grazie
vorrei esportare il contenuto di un DataGridView in Excel con tutta la formattazione.
Ho trovato questo link:
stackoverflow.com/questions/39210329/…
Con una conversione online da C# a VB.Net sono arrivato a questo codice:
Public Sub ExportToExcelWithFormatting(ByVal dataGridView1 As DataGridView) Dim fileName As String Dim saveFileDialog1 As SaveFileDialog = New SaveFileDialog() saveFileDialog1.Filter = "xls files (*.xlsx)|*.xlsx|All files (*.*)|*.*" saveFileDialog1.Title = "To Excel" saveFileDialog1.FileName = Me.Text & " (" + DateTime.Now.ToString("yyyy-MM-dd") & ")" If saveFileDialog1.ShowDialog() = DialogResult.OK Then fileName = saveFileDialog1.FileName Dim workbook = New Workbook() Dim worksheet = workbook.Worksheets.Add(Me.Text) For i As Integer = 0 To dataGridView1.Columns.Count - 1 worksheet.Cell(1, i + 1).Value = dataGridView1.Columns(i).Name Next For i As Integer = 0 To dataGridView1.Rows.Count - 1 For j As Integer = 0 To dataGridView1.Columns.Count - 1 worksheet.Cell(i + 2, j + 1).Value = dataGridView1.Rows(i).Cells(j).Value.ToString() If worksheet.Cell(i + 2, j + 1).Value.ToString().Length > 0 Then Dim align As XLAlignmentHorizontalValues Select Case dataGridView1.Rows(i).Cells(j).Style.Alignment Case DataGridViewContentAlignment.BottomRight align = XLAlignmentHorizontalValues.Right Case DataGridViewContentAlignment.MiddleRight align = XLAlignmentHorizontalValues.Right Case DataGridViewContentAlignment.TopRight align = XLAlignmentHorizontalValues.Right Case DataGridViewContentAlignment.BottomCenter align = XLAlignmentHorizontalValues.Center Case DataGridViewContentAlignment.MiddleCenter align = XLAlignmentHorizontalValues.Center Case DataGridViewContentAlignment.TopCenter align = XLAlignmentHorizontalValues.Center Case Else align = XLAlignmentHorizontalValues.Left End Select worksheet.Cell(i + 2, j + 1).Style.Alignment.Horizontal = align Dim xlColor As XLColor = XLColor.FromColor(dataGridView1.Rows(i).Cells(j).Style.SelectionBackColor) worksheet.Cell(i + 2, j + 1).AddConditionalFormat().WhenLessThan(1).Fill.SetBackgroundColor(xlColor) worksheet.Cell(i + 2, j + 1).Style.Font.FontName = dataGridView1.Font.Name worksheet.Cell(i + 2, j + 1).Style.Font.FontSize = dataGridView1.Font.Size End If Next Next worksheet.Columns().AdjustToContents() workbook.SaveAs(fileName) End If End Sub
La riga con "Workbook()" VS me la segna come "non definita" e mi propone vari import, tra i quale scelgo "Imports Microsoft.Office.Interop.Excel"
Ma ditemi se già qui ho sbagliato! A questo punto eseguo il mio codice ed con un bottone passo il nome del DataGridView da salvare alla funzione.
Mi appare la finestra di salvataggio, premo "Salva" e mi appare questo errore, sempre per "Workbook()".
An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll Additional information: Recupero della class factory COM per il componente con CLSID {00020819-0000-0000-C000-000000000046} non riuscito a causa del seguente errore: 80040154 Interfaccia non registrata. (Eccezione da HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
Cercando in giro consigliano di sostituire Workbook() con Workbooks.Add() ma non ho capito come.
Ho provato anche sostituendo Workbook() con XLWorkbook() così il file viene salvato ma non mi riporta la formattazione, o almeno non quella che a me interessa, cioè il colore di sfondo delle celle...
Mi fate capire (anche con esempi) come correggere?
Grazie
Ultima modifica effettuata da dylan666 26/04/21 13:05
aaa