AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein virtualstringtree in excel exportieren
Thema durchsuchen
Ansicht
Themen-Optionen

virtualstringtree in excel exportieren

Ein Thema von youuu · begonnen am 13. Jul 2010 · letzter Beitrag vom 20. Jul 2010
Antwort Antwort
Seite 3 von 4     123 4      
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#21

AW: virtualstringtree in excel exportieren

  Alt 19. Jul 2010, 13:04
ich sehe gerade das der Export so doch nicht unabhänig von den Daten ist.

Hier was noch fehlt:
Delphi-Quellcode:
type
  TGridTreeData = record
    Columns : TStringList;
  end;
  PGridTreeData = ^TGridTreeData;
Das sind quasi die Daten einer Reihe. Entweder übernimmst du das so, oder du nimmst deine eigene Struktur.

David
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#22

AW: virtualstringtree in excel exportieren

  Alt 19. Jul 2010, 13:16
Hm da erhalt ich eine Zugriffsverletzung bei.
Steven
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#23

AW: virtualstringtree in excel exportieren

  Alt 19. Jul 2010, 14:10
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;

Geändert von David Martens (19. Jul 2010 um 14:16 Uhr)
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#24

AW: virtualstringtree in excel exportieren

  Alt 19. Jul 2010, 14:21
Delphi-Quellcode:
type
  Tdata = class
    name: WideString;
    url: WideString;
    date: WideString;
end;
So ist meine Struktur

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;
Steven

Geändert von mkinzler (20. Jul 2010 um 12:22 Uhr) Grund: Code-Tags durch Delphi-Tags ersetzt
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#25

AW: virtualstringtree in excel exportieren

  Alt 19. Jul 2010, 14:23
Als Klasse? Das geht doch bei VST garnicht.
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#26

AW: virtualstringtree in excel exportieren

  Alt 19. Jul 2010, 14:25
Also bislang funktionierte es super, bzw. hatte keine Probleme damit.
Steven
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#27

AW: virtualstringtree in excel exportieren

  Alt 19. Jul 2010, 14:47
Wie greifst du denn später auf "data" aus VstScan.addchild(nil, data); zu?

Moment ich sehe gerade:

Code:
type
  Tdata = class
    name: WideString;
    url: WideString;
    date: WideString;
end;
So ist meine Struktur

Code:
with data do
  Begin
    Kunde.name := NameExport(RKundenSource.Lines.Text);
    Kunde.date := DateExport(RKundenSource.Lines.Text);  
    Kunde.url := sl[i];                
  end;

  VstScan.update;
  VstScan.addchild(nil, data);
  VstScan.endupdate;
Da haut was nicht hin. Was ist denn Kunde, das ist in der Klasse doch garnicht definiert. Damit speicherst du nicht ab.

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];

Geändert von David Martens (19. Jul 2010 um 14:54 Uhr)
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#28

AW: virtualstringtree in excel exportieren

  Alt 19. Jul 2010, 14:52
Also, wenn ich eine Zeile anklick(Doppelklick)

lass les ich so all die Daten ein.

Delphi-Quellcode:
  Node:= VstScan.FocusedNode;

  data:= TData(VstScan.GetNodeData(node)^ );
Edit: oben nochmal Editiert, das mit Kunde war ein Kopie Fehler.
Probiere dein nachher aus, wenn ich zurück bin.
Steven

Geändert von mkinzler (20. Jul 2010 um 12:22 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#29

AW: virtualstringtree in excel exportieren

  Alt 19. Jul 2010, 15:21
Na dann ist es doch einfach:
(Dann steht auch ColCount fest)

Delphi-Quellcode:
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;
Das ist übrigens Late-binding.

Gruß David[/QUOTE]

Geändert von David Martens (19. Jul 2010 um 15:24 Uhr)
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#30

AW: virtualstringtree in excel exportieren

  Alt 19. Jul 2010, 20:33
Hmmmm Wieder Exception mit Lesen von Adresse 0000000 als wenn es nicht existiert.


Bei: FData := TKundendata(VirtualStringTree.GetNodeData(node)^); Edit: Ok habs gefunde.

Bei: FData := TKundendata(VirtualStringTree.GetNodeData(FNode)^); muss es heißen, das "F" leder vergessen gehabt.

Super nun klappt es, Danke David
Steven

Geändert von mkinzler (20. Jul 2010 um 12:23 Uhr) Grund: Code-Tags durch Delphi-Tags ersetzt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 22:43 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