Hallo zusammen,
und zwar verzweifle ich gerade an NPOI. Ich will mit NPOI ein Excel befüllen bzw. erstellen und habe das Problem das immer nur die letzte Spalte gefüllt wird. Habe schon einiges versucht und mir auch andere Projekte in der Firma angesehen die mit NPOI arbeiten die machen das genau so wie ich (nur halt eben komplexer). Habe auch die Kollegen um Rat gefragt die sich mit NPOI besser auskennen und die wissen auch keinen Rat. Sobald ich eine Spalte aus dem Datatable lösche schreibt er mir die zuvor vorletzte Spalte in das Excel. An den For-Schleifen kanns nicht liegen da hab ich auch schon alles erdenklich ausprobiert. Genauso habe ich die einzelnen Zellen ausgelesen im Objekt testsheet sind die Daten definitiv vorhanden, nur eben im Excel nicht. Problem besteht nur mit NPOI-Versionen 2.xxx oder höher. Mit älteren funktionierts, bei denen wiederrum andere Dinge fehlen, also umstieg auf ne ältere Verion kommt nicht in Frage.
Hoffe ihr könnt mir helfen.
Hier noch das Ergebnis was in Excel bei rauskommt: http://www.bilderhost.eu/display-i9330bcybwr.html
Imports System.IO
Imports NPOI.XSSF.UserModel
Imports NPOI.HPSF
Imports NPOI.XSSF.Util
Imports NPOI.POIFS.FileSystem
Imports System.Data.Common
Imports System.Data.SqlClient
Imports System.Windows.Forms
Imports NPOI.SS.UserModel
Imports NPOI.SS
Imports System.Text.RegularExpressions
Public Class Form1
Dim testtable As New DataTable
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) _
Handles Button1.Click
Dim rownumber As Integer = 3
Dim column As Integer = 0
Dim oExcelworkbook As IWorkbook = New XSSFWorkbook(New FileStream( _
My.Settings.Templatexls, FileMode.Open, FileAccess.Read))
Dim oFontLarge As XSSFFont = oExcelworkbook.CreateFont()
oFontLarge.FontName = "Arial"
oFontLarge.FontHeightInPoints = 10
'oFontLarge.Color = 13
Dim testStyle As XSSFCellStyle
testStyle = oExcelworkbook.CreateCellStyle()
testStyle.SetFont(oFontLarge)
Dim testsheet As XSSFSheet = oExcelworkbook.GetSheet("Testblatt")
For Each row As DataRow In testtable.Rows
testsheet.CreateRow(rownumber).CreateCell(0).SetCellValue(row( _
0).ToString)
For Each col As DataColumn In testtable.Columns
testsheet.CreateRow(rownumber).CreateCell(column).SetCellValue( _
row(column).ToString)
testsheet.GetRow(rownumber).GetCell(column).CellStyle = _
testStyle
column += 1
Next
column = 0
rownumber += 1
Next
testsheet.CreateRow(rownumber + 2).CreateCell(column).SetCellType( _
NPOI.SS.UserModel.CellType.Formula)
testsheet.GetRow(rownumber + 2).GetCell(column).SetCellFormula("SUM(" & _
"A3:" & "A6)")
testsheet.CreateRow(rownumber + 2).CreateCell(column + 1).SetCellValue( _
"test1")
testsheet.CreateRow(rownumber + 2).CreateCell(column + 2).SetCellValue( _
"test2")
Dim savefiledialog1 As New SaveFileDialog()
savefiledialog1.DefaultExt = "xlsx"
savefiledialog1.Filter = "xlsx|*.xlsx"
savefiledialog1.Title = "Save Excel File"
Dim result As DialogResult = savefiledialog1.ShowDialog()
If (result = DialogResult.OK) Then
Dim oFileStream As FileStream = System.IO.File.Create( _
savefiledialog1.FileName)
oExcelworkbook.Write(oFileStream)
oFileStream.Close()
Else
MsgBox("Speichervorgang abgebrochen")
End If
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) _
Handles MyBase.Load
testtable.Columns.Add("Alter")
testtable.Columns.Add("Name")
testtable.Columns.Add("wohnort")
testtable.Columns.Add("Beschreibung")
testtable.Rows.Add("34", "Torsten", "Bluebanana", "idm")
testtable.Rows.Add("42", "Michael", "hohes Ross", "Chef")
testtable.Rows.Add("32", "Patrick", "Busbahnhof", "DVD")
testtable.Rows.Add("31", "Sebasitan", "Olymp", "Arschkarte")
testtable.Rows.Add("52", "Berthold", "Chefsessel", "Profi")
DataGridView1.DataSource = testtable
DataGridView1.AutoGenerateColumns = True
End Sub
End Class |