Salute.
Nel codice di sotto, utilizzo la libreria NPOI per creare un file Excel.
In sintesi, creo un IWorkbook leggendo i dati da un datatable, formattando le celle.
Il codice recupera il formato originale delle celle e ne modifica alcuni formati per creare righe alternate chiaro-scure.
Il codice funziona. Il problema è che è lento, tanto da farmi pensare a codice non corretto.
Spero nel vostro aiuto.
codice:Dim dt As System.Data.DataTable = msole.GetDataTable(gl.StringaConnessioneTest, "select * from campi ") Dim workbook As IWorkbook = l.DataTableToWorkbook(dt) Dim sheet As ISheet = workbook.GetSheetAt(0) 'sheet per indice For i As Integer = 0 To dt.Rows.Count - 1 Dim row As IRow = sheet.GetRow(i) For j As Integer = 0 To dt.Columns.Count - 1 Dim cell As ICell = row.GetCell(j) If i = 0 Then 'intestazione: aggiungo il bordo Dim hStyle As XSSFCellStyle = CType(cell.CellStyle, XSSFCellStyle) hStyle.SetBorderColor(Extensions.BorderSide.RIGHT, New XSSFColor(Color.LightGray)) : hStyle.BorderRight = BorderStyle.Thin hStyle.SetBorderColor(Extensions.BorderSide.TOP, New XSSFColor(Color.LightGray)) : hStyle.BorderTop = BorderStyle.Thin hStyle.SetBorderColor(Extensions.BorderSide.BOTTOM, New XSSFColor(Color.LightGray)) : hStyle.BorderBottom = BorderStyle.Thin Else 'righe dati: righe alternate con bordo Dim dStyle0 As XSSFCellStyle = CType(CType(cell.CellStyle, XSSFCellStyle).Clone, XSSFCellStyle) Dim dStyle1 As XSSFCellStyle = CType(CType(cell.CellStyle, XSSFCellStyle).Clone, XSSFCellStyle) With dStyle0 .SetFillForegroundColor(New XSSFColor(Color.White)) .FillPattern = FillPattern.SolidForeground .SetBorderColor(Extensions.BorderSide.LEFT, New XSSFColor(Color.LightGray)) .SetBorderColor(Extensions.BorderSide.RIGHT, New XSSFColor(Color.LightGray)) .SetBorderColor(Extensions.BorderSide.TOP, New XSSFColor(Color.LightGray)) .SetBorderColor(Extensions.BorderSide.BOTTOM, New XSSFColor(Color.LightGray)) .BorderLeft = BorderStyle.Thin .BorderRight = BorderStyle.Thin .BorderTop = BorderStyle.Thin .BorderBottom = BorderStyle.Thin End With With dStyle1 .SetFillForegroundColor(New XSSFColor(Color.AliceBlue)) .FillPattern = FillPattern.SolidForeground .SetBorderColor(Extensions.BorderSide.LEFT, New XSSFColor(Color.LightGray)) .SetBorderColor(Extensions.BorderSide.RIGHT, New XSSFColor(Color.LightGray)) .SetBorderColor(Extensions.BorderSide.TOP, New XSSFColor(Color.LightGray)) .SetBorderColor(Extensions.BorderSide.BOTTOM, New XSSFColor(Color.LightGray)) .BorderLeft = BorderStyle.Thin .BorderRight = BorderStyle.Thin .BorderTop = BorderStyle.Thin .BorderBottom = BorderStyle.Thin End With If i Mod 2 = 0 Then cell.CellStyle = dStyle0 Else cell.CellStyle = dStyle1 End If End If Next Next


Rispondi quotando