![]() |
StringGrid mit Spalten nach Excel exportieren
Ich würde gerne die Daten eines Stringrid nach Excel exportieren und dabei die Spalten/Zeilengröße mit nach Excel übertragen Ist das möglich? und ggf. wie?
|
Re: StringGrid mit Spalten nach Excel exportieren
Hi,
statt einen neuen Post zu erstellen benutz ich einfach den hier, das Problem ist das gleiche :) Gibt es eine Möglichlkeit in einem Array gesammelte Daten nach Excel zu exportieren? Vllt hat ja einer in den vergangenen zwei Jahren seit meinem Vorgänger einer ne Möglichkeit gefunden :) MfG ErdNussLocke |
Re: StringGrid mit Spalten nach Excel exportieren
Zitat:
[Edit] Satzbau [/Edit] |
Re: StringGrid mit Spalten nach Excel exportieren
Hi,
habe es, mit Hilfe von DT, geschafft, dass mein Stringgrid in Excel exportiert wird. Ich habe es dahingehend geändert, dass es nach dem Exportieren die Exceldatei speichert und Excel sofort wieder schließt. Nun fragt Excel immer, ob die Datei (wenn sie bereits besteht) überschrieben werden soll. Kann man einstellen, dass die Datei automatisch überschrieben wird? Danke schonmal, MfG ErdNussLocke Speichercode:
Delphi-Quellcode:
//Save Excel Worksheet try for M := 1 to BookCount do begin SaveFileName := Copy(FileName,1,Pos('.',FileName)-1) + IntToStr(M) + Copy(FileName,Pos('.',FileName), Length(FileName)-Pos('.',FileName)+1); XLApp.Workbooks[M].SaveAs(SaveFileName); end; Result := True; except // Error? end; EDIT: Problem erledigt :) Der File wird einfach vor dem speichern gelöscht, falls er existiert. |
Re: StringGrid mit Spalten nach Excel exportieren
Oder du setzt vor dem Speichern
Delphi-Quellcode:
XlApp.AlertBeforeOverwriting = False // resp.
XlApp.DisplayAlerts = False |
Re: StringGrid mit Spalten nach Excel exportieren
Neue Frage:
Wenn ich mein StringGrid nach Excel exportiere wird die Formatierung nicht übernommen, also die Spalten sind alle "Standardbreit", was für einige Spalten zu eng ist. Wie stell ich ein das die Formatierung aus dem StringGrid nach Excel übernommen wird? MfG ErdNussLocke |
Re: StringGrid mit Spalten nach Excel exportieren
Hallo,
Eine Spaltenbreite kannst du so setzen:
Delphi-Quellcode:
Jetzt gilt es nur noch herauszufinden, mit was für Einheiten Excel resp VBA arbeitet.
ColumnRange := ExcelApp.Workbooks[M].WorkSheets[1].Columns; // ColumnRange: OleVariant;
ColumnRange.Columns[1].ColumnWidth := 15; |
Re: StringGrid mit Spalten nach Excel exportieren
Hallo,
mach's mal so:
Delphi-Quellcode:
Alles selektieren, Breite soll Excel gefälligst selbst machen, selektion aufheben.
XLApp.Workbooks[M].Cells.Select;
XLApp.Workbooks[M].Cells.EntireColumn.AutoFit; XLApp.Workbooks[M].Range['A1','A1'].Select; Stephan PS: Mit Delphimaßen nach Excelmaßen umrechnen, da läufst Du Dir 'nen Wolf. |
Re: StringGrid mit Spalten nach Excel exportieren
Hmm der Moment der Wahrheit :)
Hab das mit dem Excelexport aus dem Tutorial übernommen, weiß aber nicht genau wie es funktioniert :) Könnte mir wer sagen wo ich das AutoFit einsetzen muss?
Delphi-Quellcode:
Wäre sehr nett :):)
//StringGrid-Inhalt nach Excel exportieren
function StringGridToExcelSheet(Grid: TStringGrid; SheetName, FileName: string; ShowExcel: Boolean): Boolean; const xlWBATWorksheet = -4167; var SheetCount, SheetColCount, SheetRowCount, BookCount: Integer; XLApp, Sheet, Data: OLEVariant; I, J, N, M: Integer; SaveFileName : string; begin //notwendige Sheetanzahl feststellen SheetCount := (Grid.ColCount div 256) + 1; if Grid.ColCount mod 256 = 0 then SheetCount := SheetCount - 1; //notwendige Bookanzahl feststellen BookCount := (Grid.RowCount div 65536) + 1; if Grid.RowCount mod 65536 = 0 then BookCount := BookCount - 1; //Create Excel-OLE Object Result := False; XLApp := CreateOleObject('Excel.Application'); try //Excelsheet anzeigen if ShowExcel = false then XLApp.Visible := False else XLApp.Visible := True; //Workbook hinzufügen for M := 1 to BookCount do begin XLApp.Workbooks.Add(xlWBATWorksheet); //Sheets anlegen for N := 1 to SheetCount - 1 do begin XLApp.Worksheets.Add; end; end; //Sheet ColAnzahl feststellen if Grid.ColCount <= 256 then SheetColCount := Grid.ColCount else SheetColCount := 256; //Sheet RowAnzahl feststellen if Grid.RowCount <= 65536 then SheetRowCount := Grid.RowCount else SheetRowCount := 65536; //Sheets befüllen for M := 1 to BookCount do begin for N := 1 to SheetCount do begin //Daten aus Grid holen Data := VarArrayCreate([1, Grid.RowCount, 1, SheetColCount], varVariant); for I := 0 to SheetColCount - 1 do for J := 0 to SheetRowCount - 1 do if ((I+256*(N-1)) <= Grid.ColCount) and ((J+65536*(M-1)) <= Grid.RowCount) then Data[J + 1, I + 1] := Grid.Cells[I+256*(N-1), J+65536*(M-1)]; XLApp.Worksheets[N].Select; XLApp.Workbooks[M].Worksheets[N].Name := SheetName + IntToStr(N); //Zellen als String Formatieren XLApp.Workbooks[M].Worksheets[N].Range[RefToCell(1, 1), RefToCell(SheetRowCount, SheetColCount)].Select; XLApp.Selection.NumberFormat := '@'; //XLApp.Workbooks[M].Cells.EntireColumn.AutoFit; -> Hier hätte ich es eingesetzt XLApp.Workbooks[M].Worksheets[N].Range['A1'].Select; //Daten dem Excelsheet übergeben Sheet := XLApp.Workbooks[M].WorkSheets[N]; Sheet.Range[RefToCell(1, 1), RefToCell(SheetRowCount,SheetColCount)].Value := Data; end; end; //Save Excel Worksheet try for M := 1 to BookCount do begin SaveFileName :=Copy(FileName,1,Pos('.',FileName)-1) + Copy(FileName,Pos('.',FileName), Length(FileName)-Pos('.',FileName)+1); if fileexists(pfadE+Form1.EExportname.text+'.xls')=true then deletefile(pfadE+Form1.EExportname.text+'.xls'); XLApp.Workbooks[M].SaveAs(SaveFileName); end; Result := True; except // Error? end; finally //Excel beenden XLApp.DisplayAlerts := False; XLApp.Quit; XLAPP := Unassigned; Sheet := Unassigned; end; end; Daaanke |
Re: StringGrid mit Spalten nach Excel exportieren
Hallo, Autofit muss natürlich erst nach dem Füllen des Worksheets aufgerufen werden.
Den Selection-Range könntest du in einer OleVariant SelRange speichern, damit dieser nicht 2 Mal berechnet werden muss: also diese Variable hinzufügen
Delphi-Quellcode:
und dann so:
SelRange: OLEVariant;
Delphi-Quellcode:
SelRange := XLApp.Workbooks[M].Worksheets[N].Range[RefToCell(1, 1), RefToCell(SheetRowCount, SheetColCount)];
SelRange.Select; XLApp.Selection.NumberFormat := '@'; // .. SelRange.Select; XLApp.Selection.Columns.AutoFit; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz