![]() |
AW: virtualstringtree in excel exportieren
:oops: ich sehe gerade das der Export so doch nicht unabhänig von den Daten ist.
Hier was noch fehlt:
Delphi-Quellcode:
Das sind quasi die Daten einer Reihe. Entweder übernimmst du das so, oder du nimmst deine eigene Struktur.
type
TGridTreeData = record Columns : TStringList; end; PGridTreeData = ^TGridTreeData; David |
AW: virtualstringtree in excel exportieren
Hm da erhalt ich eine Zugriffsverletzung bei.
|
AW: virtualstringtree in excel exportieren
Wie sieht denn bei dir die Datenstruktur aus, in die du die Daten schreibst?
Hier noch wie wir das machen:
Delphi-Quellcode:
procedure TfraGLOB_VSTAnalyseGrid.LoadVST;
var GridNodeData : PGridTreeData; newGridNode : PVirtualNode; i : integer; begin FDataSource.DataSet.Open; FDataSource.DataSet.First; vstAnalyse.Clear; vstAnalyse.BeginUpdate; while not FDataSource.DataSet.Eof do begin newGridNode := vstAnalyse.AddChild(nil); GridNodeData := vstAnalyse.GetNodeData(newGridNode); vstAnalyse.ValidateNode(newGridNode, false); GridNodeData^.Columns := TStringList.Create; for i := 0 to FDataSource.DataSet.Fields.Count - 1 do GridNodeData^.Columns.Add(FDataSource.DataSet.Fields[i].AsString); FDataSource.DataSet.Next; end; vstAnalyse.EndUpdate; SetHeaders; SetColumnWidth; newGridNode := vstAnalyse.GetFirst; if newGridNode <> nil then begin vstAnalyse.Selected[newGridNode] := true; end; SetControls; end; |
AW: virtualstringtree in excel exportieren
Delphi-Quellcode:
So ist meine Struktur
type
Tdata = class name: WideString; url: WideString; date: WideString; end;
Delphi-Quellcode:
with data do
Begin data.name := NameExport(RKundenSource.Lines.Text); data.date := DateExport(RKundenSource.Lines.Text); data.url := sl[i]; end; VstScan.update; VstScan.addchild(nil, data); VstScan.endupdate; |
AW: virtualstringtree in excel exportieren
Als Klasse? Das geht doch bei VST garnicht.
|
AW: virtualstringtree in excel exportieren
Also bislang funktionierte es super, bzw. hatte keine Probleme damit.
|
AW: virtualstringtree in excel exportieren
Wie greifst du denn später auf "data" aus VstScan.addchild(nil, data); zu?
Moment ich sehe gerade: Zitat:
Versuchs mal hiermit
Delphi-Quellcode:
TGridTreeData = record
name: WideString; url: WideString; date: WideString; end; PGridTreeData = ^TGridTreeData; ... var GridNodeData : PGridTreeData; newGridNode : PVirtualNode; begin newGridNode := vstAnalyse.AddChild(nil); GridNodeData := vstAnalyse.GetNodeData(newGridNode); vstAnalyse.ValidateNode(newGridNode, false); GridNodeData^.name := NameExport(RKundenSource.Lines.Text); GridNodeData^.date := DateExport(RKundenSource.Lines.Text); GridNodeData^.url := sl[i]; |
AW: virtualstringtree in excel exportieren
Also, wenn ich eine Zeile anklick(Doppelklick)
lass les ich so all die Daten ein.
Delphi-Quellcode:
Edit: oben nochmal Editiert, das mit Kunde war ein Kopie Fehler.
Node:= VstScan.FocusedNode;
data:= TData(VstScan.GetNodeData(node)^ ); Probiere dein nachher aus, wenn ich zurück bin. |
AW: virtualstringtree in excel exportieren
Na dann ist es doch einfach:
(Dann steht auch ColCount fest)
Delphi-Quellcode:
Das ist übrigens Late-binding.
procedure ExportVirtualStringTreeToExcel(VirtualStringTree : TVirtualStringTree);
var ExcelApp, Workbook, Worksheet, Range, Data : OleVariant; iCol, iRow, ColCount, RowCount : Integer; FData : TData; FNode : PVirtualNode; begin //Verbindung zu Excel herstellen ExcelApp := CreateOleObject('Excel.Application'); if not VarIsNull(ExcelApp) then begin //Neues Workbook öffnen Workbook := ExcelApp.Workbooks.Add; //Worksheet auswählen Worksheet := Workbook.ActiveSheet; if not VarIsNull(Workbook) then begin RowCount := VirtualStringTree.TotalCount; ColCount := VirtualStringTree.Header.Columns.Count; if (RowCount > 0) and (ColCount > 0) then begin //Bereich auswählen Range := Worksheet.Range[RefToCell(1, 1), RefToCell(ColCount, RowCount)]; if not VarIsNull(Range) then begin Data := VarArrayCreate([0, RowCount - 1, 0, ColCount - 1], varVariant); with VirtualStringTree do begin FNode := GetFirst; for iRow := 0 to RowCount - 1 do begin // hier steht jetzt deine Datenstruktur FData := TData(VstScan.GetNodeData(node)^); Data[iRow, 0] := FData.name; Data[iRow, 1] := FData.url; Data[iRow, 2] := FData.date; // oder so, dann brauchst du FData nicht: Data[iRow, 0] := TData(VstScan.GetNodeData(node)^).name; Data[iRow, 1] := TData(VstScan.GetNodeData(node)^).url; Data[iRow, 2] := TData(VstScan.GetNodeData(node)^).date; FNode := GetNext(FNode); end; end; Range.Value := Data; Range.Columns.AutoFit; //Excel anzeigen Workbook.Activate; ExcelApp.Visible := True; end; end; end else raise Exception.Create('neues Workbook konnte nicht angelegt werden'); end else raise Exception.Create('Excel.Application konnte nicht geladen werden'); end; Gruß David[/QUOTE] |
AW: virtualstringtree in excel exportieren
Hmmmm Wieder Exception mit Lesen von Adresse 0000000 als wenn es nicht existiert.
Bei:
Delphi-Quellcode:
Edit: Ok habs gefunde.
FData := TKundendata(VirtualStringTree.GetNodeData(node)^);
Bei:
Delphi-Quellcode:
muss es heißen, das "F" leder vergessen gehabt.
FData := TKundendata(VirtualStringTree.GetNodeData(FNode)^);
Super nun klappt es, Danke David |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:06 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