| |
VB.NET - Ein- und UmsteigerExport DataTable in Excel - Problem beim Speichern | | | Autor: xyron | Datum: 14.09.12 10:01 |
| Hi
Ich führe einen Datenexport von meinem Programm ins Excel aus. Der Vorgang funktioniert grösstenteils, jedoch wird das File nicht immer korrekt gespeichert.
Das Problem tretet auf, wenn ich ein neues File abgspeichern will. Obwohl der Code erfolgreich durchlaufen wird und der Speichervorgang mit der Zeile "oExcelApp.ActiveWorkbook.Save()" eingeleitet wird, erscheint anschliessend im Excel beim Speichern folgende Meldung:
problem.xls kann Merkmale enthalten, die mit Text (Tabstopp-getrennt) Nicht kompatibel sind. Möchten Sie die Arbeitsmappe in diesem Format speichern?
Wenn ich mit "Ja" bestätige wird dennoch nicht gespeichert. Wenn ich anschliessend Excel schliessen möchte werde ich gefragt, ob ich die Änderungen speichern möchte. Betätige ich mit "Ja", wird nicht automatisch gespeichert, sondern es erscheint der "Speichern unter..." Dialog und ich muss den Dateityp von "Text (Tabstopp-getrennt)(*.txt)" auf "Microsoft Excel-Arbeitsmappe (*.xls)" ändern. Da diese Datei bereits besteht, werde ich anschliessend noch gefragt, ob ich die Datei ersetzen möchte.
Mein Wunsch wäre es einfach Speichern zu klicken, ohne dass diese Meldungen oder der "Speichern unter..." Dialog erscheint. Wenn keine Änderungen am File gemacht wurden, sollte diese Meldung gar nicht erst erscheinen, da ich im Code bereits gespeichert habe.
Hier mein Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
ExcelExport(m_oDataTable, "C:\Dokumente und" & _
"Einstellungen\user\Desktop\problem.xls", Trim(txtSheetName.Text), True)
End Sub
Private Sub ExcelExport(ByVal oDataTable As DataTable, ByVal sPath As String, _
ByVal sSheetname As String, ByVal bNewFile As Boolean) ', ByVal sNewFilename
' As String)
Dim iRowsTotal As Integer
Dim iColsTotal As Integer
Dim oExcelApp As Object
oExcelApp = CreateObject("Excel.Application")
System.Windows.Forms.Cursor.Current = _
System.Windows.Forms.Cursors.WaitCursor
Try
If sPath = String.Empty Then
Exit Sub
End If
'File erstellen
If Not File.Exists(sPath) Then
Dim fs As FileStream = File.Create(sPath)
fs.Close()
End If
'Excel File öffnen
oExcelApp.Workbooks.Open(Filename:=sPath, ReadOnly:=False, _
Editable:=True)
'Neues Tabellenblatt einfügen
oExcelApp.Worksheets.Add(After:=oExcelApp.Worksheets( _
oExcelApp.Worksheets.Count)).Name = sSheetname
If bNewFile Then
'Alle bestehenden Tabellenblätter, mit Ausnahme des letzten
' werden, gelöscht
For i As Integer = 1 To oExcelApp.Worksheets.Count - 1 'Index
' beginnt bei 1
oExcelApp.Worksheets(i).Delete()
Next
End If
'Excel wird nicht in der Taskleiste angezeigt
oExcelApp.Visible = False
'Columns und Rows werden gezählt
iRowsTotal = oDataTable.Rows.Count - 1
iColsTotal = oDataTable.Columns.Count - 1
'Columns werden auf dem Excelsheet dargestellt...
For i As Integer = 0 To iColsTotal
oExcelApp.Cells(1, i + 1).Value = oDataTable.Columns(i).Caption
pbExport.PerformStep()
Next
'... und auch die Rows
For i As Integer = 0 To iRowsTotal - 1
For j As Integer = 0 To iColsTotal - 1
oExcelApp.Cells(i + 2, j + 1).value = oDataTable.Rows( _
i).Item(j)
Next j
pbExport.PerformStep()
Next i
'Titelzeilen werden Fett formatmiert und Grösse auf 10 pt gesetzt
oExcelApp.Rows("1:1").Font.FontStyle = "Bold"
oExcelApp.Rows("1:1").Font.Size = 10
'Spalten und Zellenbreiten werden automatisch angepasst
oExcelApp.Cells.Columns.AutoFit()
oExcelApp.Cells.Select()
oExcelApp.Cells.EntireColumn.AutoFit()
'Erste Zelle wird markiert
oExcelApp.Cells(1, 1).Select()
'Speichern
oExcelApp.ActiveWorkbook.Save()
'Excel wird nun angezeigt
oExcelApp.Visible = True
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
System.Windows.Forms.Cursor.Current = _
System.Windows.Forms.Cursors.Default
oExcelApp = Nothing
End Try Was mache ich falsch?
MfG xyron | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|