AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Excelexport

Ein Thema von Borschti · begonnen am 18. Jul 2008 · letzter Beitrag vom 24. Jul 2008
 
Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#1

Problem mit Excelexport

  Alt 18. Jul 2008, 14:49
Hallo,

ich habe ein Problem mit dem Exportieren einer Datenmenge nach Excel, also meine procedure läuft wunderbar auf Rechnern auf denen Excel installiert ist, aber wen Excel nicht installiert ist kommt eine Fehlermeldung das die classID (oder so ähnlich) nicht registriert ist.

Also meine Frage jetzt: Wie kann ich meine procedure möglichst einfach verändern das sie auch auf Rechnern angewandt werden kann auf denen kein Excel installiert ist

Hier mal mein derzeitiger Code:

Delphi-Quellcode:
procedure ExcelExport(SaveDialog : TSaveDialog; ExcelAppli : TExcelApplication;
                      ExcelWb : TExcelWorkbook; ExcelWsht : TExcelWorksheet;
                      Query : TVddQuery);

var Filename, CoordCounter: String;
    oleArray1, oleArray2:OleVariant;
    i, z, flcid : Integer;
    sl, sl2 : TStringlist;
begin

  Screen.Cursor := crHourglass;

  SaveDialog.Execute;

    case SaveDialog.FilterIndex of
      1: Filename := ChangeFileExt(SaveDialog.FileName,'.xls');
      2: Filename := ChangeFileExt(SaveDialog.FileName,'.xls');
    end;

    if Filename <> 'then
      begin
        flcid:=GetUserDefaultLCID;
        ExcelAppli.Connect;
        ExcelAppli.Visible[flcid]:=true;
        ExcelAppli.UserControl:=true;

        CreateFile(@Filename[1], 0, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

        ExcelWb.ConnectTo(ExcelAppli.Workbooks.Open(filename, False,
        False, EmptyParam, '', False, False, EmptyParam, EmptyParam, false, false,
        EmptyParam, EmptyParam, EmptyParam, false, 0));
        ExcelWsht.ConnectTo(ExcelWb.Sheets.Item[1] as ExcelWorkSheet);

        sl := TStringList.Create;
        sl2 := TStringList.Create;
        Query.GetFieldNames(sl);

        OleArray1 := VarArrayCreate([0, Query.RecordCount], varVariant);
        OleArray2 := VarArrayCreate([0, sl.Count], varVariant);

        for z := 0 to sl.Count - 1 do
          begin
            OleArray2[z] := sl.Strings[z];
          end;

        sl2.Add('A');
        sl2.Add('B');
        sl2.Add('C');
        sl2.Add('D');
        sl2.Add('E');
        sl2.Add('F');
        sl2.Add('G');
        sl2.Add('H');
        sl2.Add('I');
        sl2.Add('J');
        sl2.Add('K');
        sl2.Add('L');
        sl2.Add('M');
        sl2.Add('N');
        sl2.Add('O');
        sl2.Add('P');
        sl2.Add('Q');
        sl2.Add('R');
        sl2.Add('S');
        sl2.Add('T');
        sl2.Add('U');
        sl2.Add('V');
        sl2.Add('W');
        sl2.Add('X');
        sl2.Add('Y');
        sl2.Add('Z');
        sl2.Add('AA');
        sl2.Add('AB');
        sl2.Add('AC');
        sl2.Add('AD');
        sl2.Add('AE');
        sl2.Add('AF');
        sl2.Add('AG');
        sl2.Add('AH');
        sl2.Add('AI');
        sl2.Add('AJ');
        sl2.Add('AK');
        sl2.Add('AL');
        sl2.Add('AM');
        sl2.Add('AN');
        sl2.Add('AO');
        sl2.Add('AP');
        sl2.Add('AQ');
        sl2.Add('AR');
        sl2.Add('AS');
        sl2.Add('AT');
        sl2.Add('AU');
        sl2.Add('AV');
        sl2.Add('AW');
        sl2.Add('AX');
        sl2.Add('AY');
        sl2.Add('AZ');

        ExcelWsht.Range[sl2[0]+'1', sl2[sl.Count-1]+'1'].Value[EmptyParam] := OleArray2;

        if sl.count > sl2.Count then
          begin
            ExcelWsht.Range[sl2[0]+'1', sl2[sl.Count-1]+'1'].Value[EmptyParam] := OleArray2;
          end;

        Query.First;

        for i := 0 to Query.RecordCount - 1 do
          begin
            for z := 0 to sl.Count - 1 do
              begin
                OleArray1[z] := Query.FieldByName(sl[z]).AsString;
              end;

            CoordCounter := IntToStr(i+2);
            ExcelWsht.Range[sl2[0]+CoordCounter, sl2[sl.Count-1]+CoordCounter].Value[EmptyParam]:=OleArray1;
            Query.Next;

          end;

        ExcelWsht.Cells.EntireRow.AutoFit;
        ExcelWsht.Cells.EntireColumn.AutoFit;

      end;

    Screen.Cursor := crDefault;
    sl.Free;
    sl2.Free;

end;
Ich weiß, die Sache mit der Stringlist und dem hinzufügen der Felder ist nicht gerade die eleganteste Methode aber es musste einfach schnell gehn und mit ist nichts besseres eingefallen, falls hier jemand etwas besseres kennt würde ich mich über Tipps freun.

Also dann ich hoffe ihr könnt mir weiterhelfen.

mfg
Alex
  Mit Zitat antworten Zitat
 


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 09:13 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 by Thomas Breitkreuz