AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

StinGrid - Inhalt nach Excel exportieren

Ein Thema von Oz der 1. · begonnen am 21. Mär 2006 · letzter Beitrag vom 21. Mär 2006
Antwort Antwort
Oz der 1.

Registriert seit: 9. Mär 2006
Ort: München
2 Beiträge
 
Delphi 7 Personal
 
#1

StinGrid - Inhalt nach Excel exportieren

  Alt 21. Mär 2006, 16:52
Hallo zusammen,
ich bin, was programmieren angeht, noch Anfänger.
Momentan bin ich dabei den Inhalt eines StinGrid's, im Rahmen eines kleines Projektes, nach Excel zu exportieren.
Nach erfolglosen Versuchen habe ich im Internet folgenden
Code gefunden und einfach mal in mein Projekt eingebunden.
Alles funktioniert wunderbar, ohne Fehler.

Das Problem ist,
[b]ich verstehe diese Zeilen nicht!
Und es bringt mir recht wenig, wenn ich net weiß was da im einzelnen abgeht!
Kann mir bitte jemand helfen diese Zeilen zu verstehen

Delphi-Quellcode:
function RefToCell(RowID, ColID: Integer): string;
var
  ACount, APos: Integer;
begin
  ACount := ColID div 26;
  APos := ColID mod 26;
  if APos = 0 then
  begin
    ACount := ACount - 1;
    APos := 26;
  end;

  if ACount = 0 then
     Result := Chr(Ord('A') + ColID - 1) + IntToStr(RowID);

  if ACount = 1 then
     Result := 'A' + Chr(Ord('A') + APos - 1) + IntToStr(RowID);

  if ACount > 1 then
     Result := Chr(Ord('A') + ACount - 1) + Chr(Ord('A') + APos - 1) +
     IntToStr(RowID);
end;

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
  SheetCount := (Grid.ColCount div 256) + 1;
  if Grid.ColCount mod 256 = 0 then
     SheetCount := SheetCount - 1;

  BookCount := (Grid.RowCount div 65536) + 1;
  if Grid.RowCount mod 65536 = 0 then
     BookCount := BookCount - 1;

  Result := False;
  XLApp := CreateOleObject('Excel.Application');
  try
    if ShowExcel = false then
       XLApp.Visible := False
    else
       XLApp.Visible := True;
    for M := 1 to BookCount do
    begin
        XLApp.Workbooks.Add(xlWBATWorksheet);
        for N := 1 to SheetCount - 1 do
        begin
          XLApp.Worksheets.Add;
        end;
    end;
    if Grid.ColCount <= 256 then
       SheetColCount := Grid.ColCount
    else
       SheetColCount := 256;
    if Grid.RowCount <= 65536 then
       SheetRowCount := Grid.RowCount
    else
       SheetRowCount := 65536;

    for M := 1 to BookCount do
    begin
        for N := 1 to SheetCount do
        begin
          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);
          XLApp.Workbooks[M].Worksheets[N].Range[RefToCell(1, 1), RefToCell(SheetRowCount,
            SheetColCount)].Select;
          XLApp.Selection.NumberFormat := '@';
          XLApp.Workbooks[M].Worksheets[N].Range['A1'].Select;
          Sheet := XLApp.Workbooks[M].WorkSheets[N];
          Sheet.Range[RefToCell(1, 1), RefToCell(SheetRowCount,SheetColCount)].Value := Data;
        end;
    end;
    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
    end;
  finally
    if (not VarIsEmpty(XLApp)) and (ShowExcel = false) then
    begin
      XLApp.DisplayAlerts := False;
      XLApp.Quit;
      XLAPP := Unassigned;
      Sheet := Unassigned;
    end;
  end;
end;
Klicki bunti
  Mit Zitat antworten Zitat
_Sebastian_

Registriert seit: 22. Jul 2004
Ort: Lübeck
72 Beiträge
 
Delphi 2010 Professional
 
#2

Re: StinGrid - Inhalt nach Excel exportieren

  Alt 21. Mär 2006, 17:31
Jetzt nicht zu diesem Code aber um gaanz einfach eine Excel datei zu erstellen, kannst du dein Stringgrid zeilenweise auslesen und jede Spalte mit einem Tab trennen. Das einfach als .xls speichern und Excel erkennt die Tabs als neue Spalte.

Ich kann allerdings nicht sagen ob bzw. wie anfällig diese Lösung ist, aber vieleicht reicht dir das ja auch schon...
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: StinGrid - Inhalt nach Excel exportieren

  Alt 21. Mär 2006, 17:35
Bei den Schweizern gibt es da ein paar schöne Beispiele.

Edit: Sehe grad, da warst du schon.
  Mit Zitat antworten Zitat
Oz der 1.

Registriert seit: 9. Mär 2006
Ort: München
2 Beiträge
 
Delphi 7 Personal
 
#4

Re: StinGrid - Inhalt nach Excel exportieren

  Alt 21. Mär 2006, 18:47
Ich Danke Euch schon mal für die Tipps.
Werd das mal ausprobieren _Sebastian_.

Gruß OZ
Klicki bunti
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:33 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