Delphi-PRAXiS
Seite 4 von 6   « Erste     234 56      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Richedittext nach Excel exportieren ? (https://www.delphipraxis.net/64116-richedittext-nach-excel-exportieren.html)

messie 5. Mär 2006 18:02

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

Vader 5. Mär 2006 18:37

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:

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.
da stehe ich wieder voll daneben !
mfg vader

messie 5. Mär 2006 19:09

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:
var s : string;

begin
s := RichEdit1.Lines.Text;
for i := 1 to length(s) do
begin
  RichEdit2.Lines.Add(ord(s[i]));
end;
erstmal alle Zeichenwerte anzeigen lassen und dann Zeichen, die nicht korrekt an Excel übergeben werden, herausfinden.
Ist ein bißchen Handarbeit, irgendwann wirst Du die nicht übertragbaren Zeichen kennen und kannst sie dann herausfiltern mit
Delphi-Quellcode:
for i := 1 to length(RichEdit1.Lines.Text) do
begin
  if ord(s[i]) = 128 then
    s[i] := ' ';
end;
Vielleicht gibt es auch schon fertige Filterfunktionen in den Web-Applikationen oder in den Excel-Funktionen in Delphi, da habe ich aber keine Erfahrung.

Grüße, Messie

marabu 5. Mär 2006 19:26

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

messie 5. Mär 2006 19:42

Re: Richedittext nach Excel exportieren ?
 
Zitat:

Zitat von marabu
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

Ein bißchen probieren hilft ihm aber auch...

Grüße, Messie

Ferber 6. Mär 2006 00:27

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:
for i := 1 to length(RichEdit1.Lines.Text) do
begin
  if ord(s[i]) = 128 then
    s[i] := ' ';
end;
getestet und seit Jahren im Einsatz

Delphi-Quellcode:
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.
Kann natürlich auch dazu verwendet werden um unerwünschte Zeichen zu unterdrücken.

Historische Hintergründe:
M$'s Keyboard Treiber hatte ~13k - warum auch immer.
Meiner hatte nur 2k. Damals war Speicher noch wertvoll. :mrgreen:

Vader 6. Mär 2006 18:14

Re: Richedittext nach Excel exportieren ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
hallo,

entschuldigung hat etwas gedauert mein screenshot !
mfg vader

messie 6. Mär 2006 18:27

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

marabu 6. Mär 2006 18:35

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

Vader 6. Mär 2006 18:43

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.
Seite 4 von 6   « Erste     234 56      

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