Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Memo Feld export nach CSV (https://www.delphipraxis.net/166698-memo-feld-export-nach-csv.html)

Popov 26. Feb 2012 03:05

AW: Memo Feld export nach CSV
 
Zitat:

Zitat von klaus9 (Beitrag 1152857)
hi

ich glaub ich habe noch ein Problem.. ich müßte glaub ich erstmal richtig parsen..

Hat jemand da eine Idee wie ich z.B. in einer Webseite ein Table auslesen kann, vielleicht geht es ja doch einfacher als über in memo.

Ich glaube du betest gerade. Du betest um das Wunder der Funktion ConvertWebTabInCsvTab. Einen besseren Tipp als meinen wirst du aber nicht bekommen, denn ich habe in vier Minuten nach der Anleitung oben einen Konverter geschrieben und er funktioniert. Dann habe ich noch fünf Minuten investiert und eine automatische Suche nach einer Tabelle im kopierten Text geschrieben (egal wie gut die ist, aber sie funktioniert).

Nur während hier Antworten kommen, ist deine einzige Reaktion drauf deine Frage zu wiederholen zu wiederholen zu wiederholen, statt drauf einzugehen.

Ein Tipp: wenn du nicht programmieren willst, dann nimm Excel. Der konvertiert für dich :shock:

klaus9 26. Feb 2012 12:00

AW: Memo Feld export nach CSV
 
Hi Popov deinen Tipp finde ich super..

habe heute mal nen bisschen rum probiert..

ich habe jetzt ne super idee rausgefunden.. bzw. gegoogelt.

Also ich habe eine Webseite da muß ich auf eine Tabelle die sich im HTML Text befindet. und pro Seite habe ich 50 Auftragsdaten untereinander geglidert, gesamt ca. 1500 Aufträge


Seite ist so ca. aufgebaut..

1-50, 51-100, 101-150, 151-200.... usw. bis 1451-1500 (Das sind jeweils Links zu den 50er Blöcken Aufträgen!


Der Aufbau ist wie bereits schon geschrieben.. ca so aufgebaut

Webseiten beschreibung
bla blub
blub
bla

und dann kommen die Aufträge

Auftragsnummer - Status - KD Name - Anschrift usw.
12313 offen Günther Anschrift
34424 bearbeitet Klaus Anschrifts
usw.



so jetzt habe ich im Netz folgenden Code gefunden und etwas angepaßt auf meine wünsche..


Code:
Delphi-Quellcode:
procedure TForm1.Button13Click(Sender: TObject);

var aNode,aNode2 : Olevariant;
   r,c,z,z2 : Integer;
begin
  //item(6) = 7te Tabelle in der Webseite
//  aNode := WebBrowser1.OleObject.Document.all.tags('table').Item(7);
  aNode := WebBrowser1.OleObject.Document.all.tags(Edit8.text).Item(StrToInt(edit9.text));
//  r := aNode.all.tags('tr').Length;//Zeilen feststellen
  r := aNode.all.tags(Edit10.text).Length;//Zeilen feststellen
  StringGrid1.RowCount := r;
  for z := 0 to r-1 do
    begin
//    aNode2 := aNode.all.tags('tr').Item(z);
    aNode2 := aNode.all.tags(Edit11.text).Item(z);
//    c := aNode2.all.tags('th').Length;
    c := aNode2.all.tags(Edit12.text).Length;
    if c > 0 then
      begin
      if c > StringGrid1.ColCount then
        StringGrid1.ColCount := c;
      for z2 := 0 to c-1 do
//        StringGrid1.Cells[z2,z] := aNode2.all.tags('th').Item(z2).innerText;
         StringGrid1.Cells[z2,z] := aNode2.all.tags(Edit13.text).Item(z2).innerText;
      end;
//    c := aNode2.all.tags('td').Length;
    c := aNode2.all.tags(Edit14.text).Length;
    if c > 0 then
      begin
      if c > StringGrid1.ColCount then
        StringGrid1.ColCount := c;
      for z2 := 0 to c-1 do
//        StringGrid1.Cells[z2,z] := aNode2.all.tags('td').Item(z2).innerText;
        StringGrid1.Cells[z2,z] := aNode2.all.tags(Edit15.text).Item(z2).innerText;
      end;
    end;

end;
In den Edit Feldern stehen die Werte um auf die Tabelle zu kommen, die Tabelle der HTML Seite.. Bei meiner mußte ich nur die Tabellen Nummer von 6 auf 5 stellen der Rest also die "TD" und "TH" Kennzeichnungen sind geblieben..

Nun das funktioniert schonmal super.. Popov deine Idee ist auch super aber ich stoße damit an ein weiteres Problem was ich nicht bedacht hatte... unswar. Jetzt habe ich die Werte ausgelesen im Memo.textfeld und die stehen wie folgt dort

Auftragsnummer-Status-KD Name-Anschriftusw.
12313offenGüntherAnschrift
3442bearbeitetKlausAnschrifts


statt mit leerzeichen so

Auftragsnummer - Status - KD Name - Anschrift usw.
12313 offen Günther Anschrift
34424 bearbeitet Klaus Anschrifts
usw.

..

Und dieses würde bei der weiterverarbeitung dann für mich zu neuen Problemen führen.. :-(

Aber ich bin echt Dankbar für deine Tipps hast mir bereits bei einem anderem Problem super super gut weitergeholfen..

Nun jetzt habe ich aber auch wieder ein weiteres Problem.. Wie kann ich mit dem oben stehenden Code für das Parsen in ein Stringgrid erreichen, das er mir zeilen unten dran hängt. Weil wenn ich jetzt die 50 Seiten schritte durch gehe und immer Button13 drücke parster er mir nur den aktuellen wert, logisch und hängt die daten nicht hinter die vorhandenen Werte..

ähnlich wie beim Memofeld schreibe ich

memo2.Text:=WebBrowser1.OleObject.document.body.ou tertext;
dann schreibt er es ins memo, wiederhole ich es überschreibt er mir das memo2 feld

Mit folgendem hängt er einfach hinten dran die folgenden Werte.
Memo2.Lines.Append(WebBrowser1.OleObject.document. body.innerText);


Das würde ich gerne jetzt im Stringgrid mit meinem Code aus Button13 auch erreichen.. Hat jemand eine idee ?

Und mein zweites Problem wie bekomme ich die Werte vom StringGrid nach Excel ?

Ohh jee ich hoffe habe alles verständlich erklären können.. Manchmal ist das wirklich blöd eigentlich einfache Dinge zu erklären.. Hoffe es ist aber halbwegs gut verständlich.

Gruß

Luckie 26. Feb 2012 12:07

AW: Memo Feld export nach CSV
 
Und wie kommen die Daten von dem Stringgrid ins Memo? Und warum erst noch ns memo kopieren, wenn sie doch schon schön getrennt in den Zellen des Stringgrids stehen?

klaus9 26. Feb 2012 12:21

AW: Memo Feld export nach CSV
 
Hi Luckie,

habe jetzt die Daten nicht mehr in das Memo Feld einfügen lassen sondern direkt in das StringGrid und von dort aus wird es weiterverarbeitet..

Mit der Memo Variante.. würde es auch gehen.. allerdings müßte man die Werte dann über Pos / PosEx etc. sich dann zurecht gestalten.. Das war meine erste idee.. aber über stringgrid übernimmt er ja direkt aus der Webseite die Tabellen Daten und Struktur und gibt mir diese dann in Excel aus..

Habe übrigens gerade einen code im Netz gefunden mit dem man einen Stringgrid nach Excel exportieren kann..



Delphi-Quellcode:
procedure XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word;
  const AValue: string);
var
  L: Word;
const
  {$J+}
  CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
  {$J-}
begin
  L := Length(AValue);
  CXlsLabel[1] := 8 + L;
  CXlsLabel[2] := ARow;
  CXlsLabel[3] := ACol;
  CXlsLabel[5] := L;
  XlsStream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));
  XlsStream.WriteBuffer(Pointer(AValue)^, L);
end;


function SaveAsExcelFile(AGrid: TStringGrid; AFileName: string): Boolean;
const
  {$J+} CXlsBof: array[0..5] of Word = ($809, 8, 00, $10, 0, 0); {$J-}
  CXlsEof: array[0..1] of Word = ($0A, 00);
var
  FStream: TFileStream;
  I, J: Integer;
begin
  Result := False;
  FStream := TFileStream.Create(PChar(AFileName), fmCreate or fmOpenWrite);
  try
    CXlsBof[4] := 0;
    FStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
    for i := 0 to AGrid.ColCount - 1 do
      for j := 0 to AGrid.RowCount - 1 do
        XlsWriteCellLabel(FStream, I, J, AGrid.cells[i, j]);
    FStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
    Result := True;
  finally
    FStream.Free;
  end;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  if SaveAsExcelFile(StringGrid1, 'c:\MyExcelFile.xls') then
    ShowMessage('StringGrid saved!');
end;
Jetzt bleibt nur das Problem noch mit dem Dateneinfügen in das Stringgrid, wenn ich es über den Code aus Button13 mache überschreibt er mir immer die aktuellen Werte, als Sie hinten dran zu hängen.. vielleicht hat jemand eine Idee für mich ?

vagtler 26. Feb 2012 12:25

AW: Memo Feld export nach CSV
 
Zitat:

Zitat von klaus9 (Beitrag 1152910)
[...] Ohh jee ich hoffe habe alles verständlich erklären können.. [...]

Nein, hast Du nicht. Es wäre nicht zuletzt für Dich einfacher, Du würdest Dich der diversen (Teil-)Problemstellungen mal analytisch und mit System nähern.

Wenn ich in "Deinem" Code schon die Benennung der Buttons und Edit-Felder sehe, rollen sich mir die Fußnägel auf.

vagtler 26. Feb 2012 12:27

AW: Memo Feld export nach CSV
 
Zitat:

Zitat von klaus9 (Beitrag 1152915)
[...] Jetzt bleibt nur das Problem noch mit dem Dateneinfügen in das Stringgrid, wenn ich es über den Code aus Button13 mache überschreibt er mir immer die aktuellen Werte, als Sie hinten dran zu hängen.. [...]

Hast Du den Code denn überhaupt verstanden?

klaus9 26. Feb 2012 12:56

AW: Memo Feld export nach CSV
 
Hi,

die Edit felder habe ich eingefügt, damit ich ausprobieren kann und somit herausfinden kann, welche Werte mich zum gewünschten ergebnis bringen. Nicht um das später in das fertige Tool einzufügen.

Denn sonst muß ich mich immer wieder einloggen und durch die Webseite klicken und neu starten und so kann ich über die Edit Felder bestimmte werte eintragen und somit ausprobieren am laufenden Prozess wie ich meine End Werte rausfinde.

Später sieht das ganze dann komplett ohne edit Felder im Source aus.

klaus9 26. Feb 2012 12:58

AW: Memo Feld export nach CSV
 
Delphi-Quellcode:
procedure TForm1.ExportFunktion13Click(Sender: TObject);

var aNode,aNode2 : Olevariant;
   r,c,z,z2 : Integer;
begin
 aNode := WebBrowser1.OleObject.Document.all.tags('intraLC').Item(5);
  r := aNode.all.tags('tr').Length;//Zeilen feststellen
   StringGrid1.RowCount := r;
  for z := 0 to r-1 do
    begin
aNode2 := aNode.all.tags('tr').Item(z);
 c := aNode2.all.tags('th').Length;
    if c > 0 then
      begin
      if c > StringGrid1.ColCount then
        StringGrid1.ColCount := c;
      for z2 := 0 to c-1 do
StringGrid1.Cells[z2,z] := aNode2.all.tags('th').Item(z2).innerText;
      end;
 c := aNode2.all.tags('td').Length;
    if c > 0 then
      begin
      if c > StringGrid1.ColCount then
        StringGrid1.ColCount := c;
      for z2 := 0 to c-1 do
 StringGrid1.Cells[z2,z] := aNode2.all.tags('td').Item(z2).innerText;
     end;
    end;

end;
So hier das ganze mal in schön ;-)

klaus9 26. Feb 2012 14:27

AW: Memo Feld export nach CSV
 
ja das stimmt soweit funktioniert es ja auch nur, jedesmal wenn ich den Button13 drücke überschreibt er mir die Stringgrid1 tabelle. Nur ich müßte es irgendwie hinbekommen das wenn ich 13 drücke. die jeweiligen datensätze angehängt werden

also sagen wir in der webseite steht html seite 1, 50 datensätze in der tabelle

bla ....
bla ....
bla ....
bla ....
bla ....
bis zur 50. stelle.


nun wenn ich die webseiten nach einander abklicke und dann jeweils die 13 drücke überschreibt er mir die werte anstatt diese hinter die vorhandenen werte zu setzen in der stringgrid.

das ist mein kleines Problemchen.

Luckie 26. Feb 2012 14:30

AW: Memo Feld export nach CSV
 
Merk dir die letzte gefüllte Zeile im StringGrid.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:58 Uhr.
Seite 2 von 3     12 3      

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