AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi StringGrid mit Spalten nach Excel exportieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid mit Spalten nach Excel exportieren

Offene Frage von "L85"
Ein Thema von L85 · begonnen am 14. Mai 2006 · letzter Beitrag vom 19. Sep 2008
Antwort Antwort
Seite 1 von 2  1 2      
L85

Registriert seit: 14. Mai 2006
29 Beiträge
 
#1

StringGrid mit Spalten nach Excel exportieren

  Alt 14. Mai 2006, 12:14
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?
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#2

Re: StringGrid mit Spalten nach Excel exportieren

  Alt 9. Sep 2008, 17:24
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
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: StringGrid mit Spalten nach Excel exportieren

  Alt 9. Sep 2008, 17:37
Zitat von ErdNussLocke:
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
Haste 2 Jahre gewartet um ein Grid nach Excel zu exportieren?..da muss ich aber mal herzhaft lachen...da gibt es hier genug Themen mit Hilfe der "Suchfunktion" der DP zu finden

[Edit] Satzbau [/Edit]
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#4

Re: StringGrid mit Spalten nach Excel exportieren

  Alt 10. Sep 2008, 16:51
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.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5

Re: StringGrid mit Spalten nach Excel exportieren

  Alt 10. Sep 2008, 17:30
Oder du setzt vor dem Speichern

Delphi-Quellcode:
XlApp.AlertBeforeOverwriting = False // resp.
XlApp.DisplayAlerts = False
Thomas
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#6

Re: StringGrid mit Spalten nach Excel exportieren

  Alt 17. Sep 2008, 11:19
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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#7

Re: StringGrid mit Spalten nach Excel exportieren

  Alt 17. Sep 2008, 12:03
Hallo,

Eine Spaltenbreite kannst du so setzen:

Delphi-Quellcode:
  ColumnRange := ExcelApp.Workbooks[M].WorkSheets[1].Columns; // ColumnRange: OleVariant;
  ColumnRange.Columns[1].ColumnWidth := 15;
Jetzt gilt es nur noch herauszufinden, mit was für Einheiten Excel resp VBA arbeitet.
Thomas
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

Re: StringGrid mit Spalten nach Excel exportieren

  Alt 17. Sep 2008, 12:51
Hallo,

mach's mal so:

Delphi-Quellcode:
XLApp.Workbooks[M].Cells.Select;
XLApp.Workbooks[M].Cells.EntireColumn.AutoFit;
XLApp.Workbooks[M].Range['A1','A1'].Select;
Alles selektieren, Breite soll Excel gefälligst selbst machen, selektion aufheben.

Stephan

PS: Mit Delphimaßen nach Excelmaßen umrechnen, da läufst Du Dir 'nen Wolf.
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#9

Re: StringGrid mit Spalten nach Excel exportieren

  Alt 18. Sep 2008, 10:24
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:
//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;
Wäre sehr nett
Daaanke
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#10

Re: StringGrid mit Spalten nach Excel exportieren

  Alt 18. Sep 2008, 10:42
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

 SelRange: OLEVariant; und dann so:

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;
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz