![]() |
Re: Richedittext nach Excel exportieren ?
Notfalls untersuchchst Du das erste und das letzte Zeichen. Die Klötze werden immer ähnlich sein. Mir ord(char) kannst Du Dir den oder die Codes holen und die Zeichen dann löschen, wenn sie auftreten.
Grüße, Messie |
Re: Richedittext nach Excel exportieren ?
hallo,
habe jetzt mehr getestet, die rechtecke sind auch zwischen den textzeilen, weil ich die daten von einer tabelle im internet hole, du hast geschrieben Zitat:
mfg vader |
Re: Richedittext nach Excel exportieren ?
Naja, ein Zeichen besteht eben aus Bytes (als Textzeichen wird es als char bezeichnet). Du hast also Bytes mit verschiedenen Werten, die Du übergibst. Der Befehl ord(char) gibt Dir den Wert des Zeichens zurück. Du kannst Dir also mit
Delphi-Quellcode:
erstmal alle Zeichenwerte anzeigen lassen und dann Zeichen, die nicht korrekt an Excel übergeben werden, herausfinden.
var s : string;
begin s := RichEdit1.Lines.Text; for i := 1 to length(s) do begin RichEdit2.Lines.Add(ord(s[i])); end; Ist ein bißchen Handarbeit, irgendwann wirst Du die nicht übertragbaren Zeichen kennen und kannst sie dann herausfiltern mit
Delphi-Quellcode:
Vielleicht gibt es auch schon fertige Filterfunktionen in den Web-Applikationen oder in den Excel-Funktionen in Delphi, da habe ich aber keine Erfahrung.
for i := 1 to length(RichEdit1.Lines.Text) do
begin if ord(s[i]) = 128 then s[i] := ' '; end; Grüße, Messie |
Re: Richedittext nach Excel exportieren ?
Vader, nun mach doch mal einen screenshot - und RichEdit.Lines.SaveToFile() und hänge beides ran, dann müssen wir nicht raten, was schief läuft.
marabu |
Re: Richedittext nach Excel exportieren ?
Zitat:
Grüße, Messie |
Re: Richedittext nach Excel exportieren ?
Hi !
Generelle Zeichenumsetzung - sehr schnell. Für alle die zb DatanormDateien in Warenwirtschaft importieren müssen. nix mit if ord... then ... wie zB:
Delphi-Quellcode:
getestet und seit Jahren im Einsatz
for i := 1 to length(RichEdit1.Lines.Text) do
begin if ord(s[i]) = 128 then s[i] := ' '; end;
Delphi-Quellcode:
Kann natürlich auch dazu verwendet werden um unerwünschte Zeichen zu unterdrücken.
unit MyConvert;
interface uses Windows, Classes, ComCtrls, SysUtils; type TTxtConverter = class(TConversion) public function ConvertReadStream (Stream: TStream; Buffer: PChar; BufSize: Integer): Integer; override; function ConvertWriteStream(Stream: TStream; Buffer: PChar; BufSize: Integer): Integer; override; end; TAsciiTable = Array[0..$FF] of char; TConvertMode = (cmNone, cmDos2Win, { Dos -> Windows } cmWin2Dos, { Windows -> Dos } cmEps2Win, { Epstik -> Windows } cmWin2Eps, { Windows -> Epstik } cmEps2Dos, { Epstik -> Dos } cmDos2Eps, { Dos -> Epstik } cmSht2Win { Shit -> Windows } ); TTxtStream = class(TMemoryStream) private FConvertMode:TConvertMode; FAsciiTable :TAsciiTable; procedure ConvertMemory; protected procedure SetConvertMode(aConvertMode:TConvertMode); function GetAsString:String; public procedure InitAsciiTable; procedure SetCodes(sFrom, sTo:String); constructor Create(aConvertMode:TConvertMode); function ConvertString(st:String):String; function ConvertBuffer(Buffer:PChar; BufSize:Integer):PChar; procedure LoadFromStream(Stream: TStream); procedure SaveToStream (Stream: TStream); procedure LoadFromFile (aFileName:String); procedure SaveToFile (aFileName:String); property ConvertMode: TConvertMode read FConvertMode write SetConvertMode; property Text: String read GetAsString; end; function InvertConvertMode(aMode:TConvertMode):TConvertMode; implementation { TTxtConverter ------------------------------------------------------------} function TTxtConverter.ConvertReadStream(Stream: TStream; Buffer: PChar; BufSize: Integer): Integer; var s:TTxtStream; begin Result := Stream.Read(Buffer^, BufSize); // into the buffer s:=TTxtStream.Create(cmDos2Win); s.ConvertBuffer(Buffer, Result); s.Free; end; function TTxtConverter.ConvertWriteStream(Stream: TStream; Buffer: PChar; BufSize: Integer): Integer; var s:TTxtStream; begin s:=TTxtStream.Create(cmWin2Dos); s.ConvertBuffer(Buffer, BufSize); s.Free; Result := Stream.Write(Buffer^, BufSize); // from the buffer end; { Utils ----------------------------------------------------------------------} function InvertConvertMode(aMode:TConvertMode):TConvertMode; begin Result:=cmNone; case aMode of cmDos2Win:Result:=cmWin2Dos; cmWin2Dos:Result:=cmDos2Win; cmEps2Win:Result:=cmWin2Eps; cmWin2Eps:Result:=cmEps2Win; cmEps2Dos:Result:=cmDos2Eps; cmDos2Eps:Result:=cmEps2Dos; end end; { TTxtStream -------------------------------------------------------------} constructor TTxtStream.Create(aConvertMode:TConvertMode); begin inherited create; SetConvertMode(aConvertMode); end; procedure TTxtStream.InitAsciiTable; var i:Integer; begin for i:=0 to $FF do FAsciiTable[i]:=Char(i); end; procedure TTxtStream.SetCodes(sFrom, sTo:String); var i:Integer; begin for i:=1 to Length(sFrom) do FAsciiTable[Byte(sFrom[i])]:=sTo[i]; end; procedure TTxtStream.SetConvertMode(aConvertMode:TConvertMode); begin InitAsciiTable; FConvertMode:=aConvertMode; case aConvertMode of cmDos2Win:SetCodes('Ž™š„”áíñ'#196, 'ÄÖÜäöüߨ±'#151 ); cmWin2Dos:SetCodes('ÄÖÜäöüߨ±'#151, 'Ž™š„”áíñ'#196 ); cmEps2Win:SetCodes('[\]{|}~' ,'ÄÖÜäöüß' ); cmWin2Eps:SetCodes('ÄÖÜäöüß' ,'[\]{|}~' ); cmEps2Dos:SetCodes('[\]{|}~' ,'Ž™š„”á' ); cmDos2Eps:SetCodes('Ž™š„”á' ,'[\]{|}~' ); cmSht2Win:SetCodes('Ž™š„”áøý' ,'ÄÖÜäöüß°²'); end end; function TTxtStream.ConvertString(st:String):String; var i:Integer; begin if ConvertMode<>cmNone then for i:=1 to Length(st) do st[i]:=FAsciiTable[Byte(st[i])]; Result:=st; end; procedure TTxtStream.ConvertMemory; var i:Integer; begin if ConvertMode<>cmNone then for i:=1 to Size do PChar(Memory)[i]:=FAsciiTable[Byte(PChar(Memory)[i])]; end; function TTxtStream.GetAsString; begin if Size=0 then Result:='' else begin SetLength(Result, Size+1); StrlCopy(PChar(Result), Memory, Size); end; end; function TTxtStream.ConvertBuffer(Buffer:PChar; BufSize:Integer):PChar; var i:Integer; begin if ConvertMode<>cmNone then for i:=1 to BufSize do Buffer[i]:=FAsciiTable[Byte(Buffer[i])]; Result:=Buffer; end; procedure TTxtStream.LoadFromStream(Stream: TStream); begin inherited LoadFromStream(Stream); ConvertMemory; end; procedure TTxtStream.SaveToStream (Stream: TStream); begin ConvertMemory; inherited SaveToStream(Stream); end; procedure TTxtStream.LoadFromFile (aFileName:String); begin try inherited LoadFromFile(aFileName); ConvertMemory; except Clear; end; end; procedure TTxtStream.SaveToFile (aFileName:String); begin ConvertMemory; inherited SaveToFile(aFileName); end; end. Historische Hintergründe: M$'s Keyboard Treiber hatte ~13k - warum auch immer. Meiner hatte nur 2k. Damals war Speicher noch wertvoll. :mrgreen: |
Re: Richedittext nach Excel exportieren ?
Liste der Anhänge anzeigen (Anzahl: 1)
hallo,
entschuldigung hat etwas gedauert mein screenshot ! mfg vader |
Re: Richedittext nach Excel exportieren ?
Sinnvoll dazu wären weitere Screenshots, nämlich wie das Originaldokument im Web und in Deinem TRichEdit aussieht.
Auf den ersten Blick würde ich von einem Problem der Datumsdarstellung ausgehen. Grüße, Messie |
Re: Richedittext nach Excel exportieren ?
Also für mich sehen die Kästchen aus wie protected space und line breaks. Vielleicht sind es aber auch nur Geburtstagsgeschenke - ohne Schleifchen?
Alles Gute vom marabu |
Re: Richedittext nach Excel exportieren ?
Liste der Anhänge anzeigen (Anzahl: 2)
hallo,
weitere screenshots ! mfg vader |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 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