AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Richedittext nach Excel exportieren ?

Ein Thema von Vader · begonnen am 27. Feb 2006 · letzter Beitrag vom 9. Mär 2006
Antwort Antwort
Seite 4 von 6   « Erste     234 56      
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#31

Re: Richedittext nach Excel exportieren ?

  Alt 5. Mär 2006, 18:02
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
  Mit Zitat antworten Zitat
Vader

Registriert seit: 6. Mai 2003
804 Beiträge
 
Delphi 6 Enterprise
 
#32

Re: Richedittext nach Excel exportieren ?

  Alt 5. Mär 2006, 18:37
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
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#33

Re: Richedittext nach Excel exportieren ?

  Alt 5. Mär 2006, 19:09
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#34

Re: Richedittext nach Excel exportieren ?

  Alt 5. Mär 2006, 19:26
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
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#35

Re: Richedittext nach Excel exportieren ?

  Alt 5. Mär 2006, 19:42
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
  Mit Zitat antworten Zitat
Ferber

Registriert seit: 9. Mär 2005
Ort: Wien Umgebung
155 Beiträge
 
Delphi 2006 Architect
 
#36

Re: Richedittext nach Excel exportieren ?

  Alt 6. Mär 2006, 00:27
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.
Otto
  Mit Zitat antworten Zitat
Vader

Registriert seit: 6. Mai 2003
804 Beiträge
 
Delphi 6 Enterprise
 
#37

Re: Richedittext nach Excel exportieren ?

  Alt 6. Mär 2006, 18:14
hallo,

entschuldigung hat etwas gedauert mein screenshot !
mfg vader
Miniaturansicht angehängter Grafiken
rechtecke_923.jpg  
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#38

Re: Richedittext nach Excel exportieren ?

  Alt 6. Mär 2006, 18:27
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#39

Re: Richedittext nach Excel exportieren ?

  Alt 6. Mär 2006, 18:35
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
  Mit Zitat antworten Zitat
Vader

Registriert seit: 6. Mai 2003
804 Beiträge
 
Delphi 6 Enterprise
 
#40

Re: Richedittext nach Excel exportieren ?

  Alt 6. Mär 2006, 18:43
hallo,

weitere screenshots !
mfg vader
Miniaturansicht angehängter Grafiken
internettabelle_152.jpg   richedittext_357.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 6   « Erste     234 56      


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 11:36 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