AGB  ·  Datenschutz  ·  Impressum  







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

Daten von StringGrid als .xls

Ein Thema von recordable · begonnen am 16. Dez 2004 · letzter Beitrag vom 23. Dez 2004
Antwort Antwort
Benutzerbild von recordable
recordable

Registriert seit: 9. Dez 2004
Ort: Neubrandenburg
9 Beiträge
 
#1

Daten von StringGrid als .xls

  Alt 16. Dez 2004, 09:20
Hallo!
Ich möchte Daten aus einem StringGrid als .xls Datei in einem beliebigen Verzeichnisse speichern. Mit Dialog öffnen usw.
Kann mir einer helfen?

MfG
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Daten von StringGrid als .xls

  Alt 23. Dez 2004, 19:18
Hallo,
evt kannst Du ja den Source auf Dein Problem übertragen.
In dem Source wird wird der Inhalt eines ADO-Recordsets über ein VARARRAY nach Excel
geschoben. Das geht für OLE Verhältnisse knallschnell!!!
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ADODB25_TLB, Excel2000, OleServer, StdCtrls, ExcelXP;

type
  TFormQuery = class(TForm)
    ExcelApplication: TExcelApplication;
    ExcelWorksheet: TExcelWorksheet;
    ExcelWorkbook: TExcelWorkbook;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FLCID : Integer;
    FConnectionString : String;
    procedure CloseExcel;
    procedure OpenExcel;
  public
    { Public-Deklarationen }
  end;

var
  FormQuery: TFormQuery;

implementation

{$R *.dfm}


resourcestring
  ConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%sTest.mdb;Persist Security Info=False';


{ TFormQuery }

procedure TFormQuery.FormCreate(Sender: TObject);
begin
  FLCID:=GetUserDefaultLCID;
  FConnectionString:=Format(ConnectionString,[ExtractFilePath(ParamStr(0))]);
end;

procedure TFormQuery.OpenExcel;
begin
  ExcelApplication.Connect; // Stelle Verbindung zu Excel her
  ExcelApplication.Visible[FLCID] := False; // Starte Excel unsichtbar
  ExcelApplication.UserControl:= False; // UserControl muss immer syschron zu Visible gesetzt werden
  ExcelApplication.DisplayAlerts[FLCID]:=False; // Unterdrücke alle Fehlermeldungen von Excel
end;

procedure TFormQuery.CloseExcel;
begin
  ExcelWorksheet.Disconnect;
  ExcelWorkbook.Disconnect;
  ExcelApplication.Quit;
  ExcelApplication.Disconnect;
end;


procedure TFormQuery.Button1Click(Sender: TObject);
{
Achtung: Das Array wird über ArrV[Row,Col] (also ArrV[Y,X]) angesprochen,
          weil Excel in den Zellbezüge auch ...[Row,Col] erwartet !!!!!!!!!!
}

var
  Con : Connection; // natives ADO-ConnectionObjekt
  Rs : RecordSet; // natives ADO-RecordsetObjekt
  ArrV : Variant; // Dies ist das variante Array
  Col : Integer;
  Row : Integer;
  Cell : Range;
  RecordCount : Integer; // Anzahl der Datensätze
  FieldsCount : Integer; // Anzahl der Spalten (Felder)
begin
  Screen.Cursor:=crHourGlass;
  Col:=0;
  Row:=0;
  Con:=CoConnection.Create;
  RS:=CoRecordSet.Create;
  Try
    RS.CursorLocation:=adUseClient; // nur mit adUseClient ist die RecordCount Property gültig
    Con.Open(FConnectionString,'','',-1); // Öffne die Verbindung zur Datenbank
    RS.Open('SELECT * FROM daten',Con,adOpenForwardOnly,adLockReadOnly,adCmdTableDirect);
    // Initialisiere ein zweidimensionales Array mit [Anzahl der Datensätze,Anzahl der Spalten]
    RecordCount:=RS.RecordCount;
    FieldsCount:=RS.Fields.Count;
    ArrV:=VarArrayCreate([0,RecordCount-1,0,FieldsCount-1],varVariant);
    VarArrayLock(ArrV);
    While Not RS.EOF do
      begin
      For Col:=0 to FieldsCount-1 do
        ArrV[Row,Col]:=RS.Fields.Item[Col].Value;
      Inc(Row);
      RS.MoveNext;
      end; // While Not RS.EOF do
    VarArrayUnLock(ArrV);
    OpenExcel; // Öffne jetzt Excel
    Try
      ExcelApplication.Workbooks.Open(ExtractFilePath(ParamStr(0))+'Test.xls',EmptyParam,EmptyParam,EmptyParam,
                                      EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                                      EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                                      EmptyParam,FLCID);
      ExcelWorkbook.ConnectTo(ExcelApplication.Workbooks.Item['Test.xls']);
      ExcelWorkSheet.ConnectTo(ExcelWorkbook.Sheets.Item['Tabelle1'] as _WorkSheet);

      Cell:=ExcelWorkSheet.Cells.Range_['B2','B2']; // legt die linke obere Ecke der Tabelle fest
      ExcelWorkSheet.Range[Cell,Cell.Offset[RecordCount-1,FieldsCount-1]].Value:=ArrV; // Übertrage Daten nach Excel

      ExcelWorkbook.Save;
    Finally
      CloseExcel;
      end;
  Finally
    RS:=Nil;
    Con.Close;
    Con:=Nil;
    Screen.Cursor:=crDefault;
    end;
end;

end.
RS ist das ADO-Recordset. In Deinem Fall wäre es das TStringGrid. D.h. erzeuge
ein 2D VARARRAY (wie oben). Schreibe die Inhalt des TStringGrid in das VARARRAY und schiebe
dieses anschließend nach Excel.
Ach ja - Der Source geht davon aus, dass es im Programmverzeichnis eine Exceldatei mit dem
Namen Test.xls gibt.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:24 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