Richedittext nach Excel exportieren ?
hallo,
ich möchte den text von einen richedit in die zelle B7 in Excel eportieren, geht das überhaupt ? mfg vader |
Re: Richedittext nach Excel exportieren ?
Hallo,
ich denke, Du mußt die Aufgabe noch etwas päzisieren. Willst Du etwas in eine vorhandene Datei an diese Stelle schreiben, ist die Datei offen (DDE oder OLE) und zugänglich oder willst Du eine Excel-Datei anlegen, bei der bestimmte Werte an festen Stellen rausgeschrieben werden? Du solltest auch sagen, wieviel Text Du exportieren willst, kann sein, daß Zeilenumbrüche entfernt werden müssen etc. Grüße, Messie |
Re: Richedittext nach Excel exportieren ?
hallo,
an eine vorhandene offene exceldatei, und sowas will ich exportieren: Hertha BSC 1.65 X 3.40 1. FC Köln 5.00 fußballwetten mfg vader |
Re: Richedittext nach Excel exportieren ?
hallo,
noch präziser: die exceldatei hat den pfad c:\wetten\wetten.xls und ist geöffnet, und der text von richedit1 soll in die zelle B7 exportiert werden. mfg vader |
Re: Richedittext nach Excel exportieren ?
hallo,
ich weiß, das schickt sich nicht, aber kann mir da keiner weiterhelfen ? mfg vader |
Re: Richedittext nach Excel exportieren ?
Hallo Vader,
willst du wirklich einen tabellarischen Text in eine einzige Zelle quetschen? Dein Beispiel ist zweispaltig (Text und Quote) und die Zeilenzahl ist wohl beliebig. Spielt die Tatsache, dass der Text aus einem RichEdit geholt wird, überhaupt eine Rolle? Was ist dein eigentliches Problem? Die Adressierung der Zellen über die Automationsschnittstelle? Welche Delphi-Version verwendest du? Um welche Excel-Version handelt es sich? Freundliche Grüße vom marabu |
Re: Richedittext nach Excel exportieren ?
hallo,
ja es sollte in eine zelle passen, ja es spielt eine rolle den text von einen richedit holen, das war ja schon eine vorige frage von mir weil in ein memo konnte ich keine farbigen zeilen gestalten, und ich kopiere mir die spiele mit quoten von internet in das richedit, mein problem ich hab überhaubt keinen ansatz wie ich den text vom richedit in die excelzelle bringe, habe delphi6 enterprise und excel 2ooo mfg vader |
Re: Richedittext nach Excel exportieren ?
hallo,
das ich mich mit einer exceltabelle verbinden habe ich, ich hab auche einen code der was aus einer zelle einer exceldatei ausliest und in ein editfeld in der form einliest.
Delphi-Quellcode:
private
{ Private-Deklarationen } FLCID : Integer; procedure CloseExcel; function OpenExcel : Boolean; function ReadCell(Row,Col : Integer) : String; function TForm1.ReadCell(Row, Col: Integer): String; var CellRange : Range; begin CellRange:=ExcelWorksheet1.Cells; Result:=CellRange.Item[Row,Col].Value; end; procedure TForm1.Ein4Click(Sender: TObject); begin spinedit1.text:= '1'; end; procedure TForm1.Werteauslesen1Click(Sender: TObject); begin Edit1.Text:=ReadCell(SpinEdit1.Value,SpinEdit2.Value); end; ich würde das umgekehrt brauchen, das der text vom richedit in die zelle der exceltabelle schreibt ? mfg vader |
Re: Richedittext nach Excel exportieren ?
hallo,
weil ich keine antwort bekomme, ist es überhaupt möglich von delphi daten nach excel zu schreiben ? mfg vader |
Re: Richedittext nach Excel exportieren ?
Hallo Vader,
selbstverständlich ist es möglich. Diesen Code habe ich bei mir gefunden:
Delphi-Quellcode:
Leider kann ich nicht testen, wie die Zelle auf RichText reagiert, da ich zuhause nicht über Excel verfüge.
// xl: TExcelApplication;
procedure TDemoForm.ButtonClick(Sender: TObject); var wb: ExcelWorkbook; ws: ExcelWorkSheet; r: ExcelRange; begin xl.Connect; wb := xl.WorkBooks.Add(null, GetUserDefaultLCID); ws := wb.Sheets.Add(null, null, 1, null, GetUserDefaultLCID) as ExcelWorkSheet; r := ws.Range['B1', 'B1']; r.Value2 := 'marabu'; xl.Disconnect; end; Grüße vom marabu |
Re: Richedittext nach Excel exportieren ?
hallo,
es kommt dr fehler: [Fehler] Unit1.pas(1350): Undefinierter Bezeichner: 'ExcelRange' mfg vader |
Re: Richedittext nach Excel exportieren ?
ExcelRange ist ein Interface, welches bei mir in der Unit ExcelXP deklariert ist. Meine Delphi-Version siehst du ja. Ich habe auch den thread wieder gefunden, für den ich das Code-Fragment geschrieben hatte: klick
marabu |
Re: Richedittext nach Excel exportieren ?
hallo,
hab den tread durchgelesen und weiß gleich viel wie vorher, ich hab in meinen uses excel97 un excel2000 stehen ExcelRange' geht nicht bei mir ? mfg vader |
Re: Richedittext nach Excel exportieren ?
Die Existenz von ExcelRange in den Support-Units kann ich leicht überprüfen, indem ich im Quelltext an geeigneter Stelle den Namen der Unit und einen Punkt eingebe. Die automatische Code-Vervollständigung bei meinem Delphi öffnet dann ein Fenster, in dem ich durch Eingabe von ExcelR an die richtige Stelle geführt werde. Auch wenn ich jetzt kein Excel habe, so kann ich so doch sehen, was von der Unit unterstützt wird. Wie prüfst du?
marabu |
Re: Richedittext nach Excel exportieren ?
hallo marabu,
tut mir leid da kann ich nicht folgen das ist für mich neu mfg vader |
Re: Richedittext nach Excel exportieren ?
Fangen wir einfach mal mit der Delphi-Version an. Welche hast du? Kannst du sie in dein DP-Profil eintragen?
marabu |
Re: Richedittext nach Excel exportieren ?
Zitat:
Grüße, Messie |
Re: Richedittext nach Excel exportieren ?
habe D6 Enterprise und office 2000 !
mfg vader |
Re: Richedittext nach Excel exportieren ?
hallo,
statt
Delphi-Quellcode:
geht das bei mir mit:
r: ExcelRange;
Delphi-Quellcode:
aber wenn ich denn code ausführe:
CellRange : Range;
[delphi// xl: TExcelApplication; procedure TDemoForm.ButtonClick(Sender: TObject); var wb: ExcelWorkbook; ws: ExcelWorkSheet; CellRange : Range; begin xl.Connect; wb := xl.WorkBooks.Add(null, GetUserDefaultLCID); ws := wb.Sheets.Add(null, null, 1, null, GetUserDefaultLCID) as ExcelWorkSheet; CellRange := ws.Range['B1', 'B1']; CellRange.Value2 := 'marabu'; xl.Disconnect; end;[/delphi] dann kommt eine zugriffsverletzung, muß ich nicht vorher mich mit excel verbinden ? mfg vader |
Re: Richedittext nach Excel exportieren ?
Hallo Vader,
mache bitte die Klammer hinter [delphi zu - es zieht. Das Verbinden mit Excel sollte automatisch geschehen, wenn du die Komponente TExcelApplication verwendest. marabu |
Re: Richedittext nach Excel exportieren ?
Hast Du eine TExcelApplication auf Deinem Formular platziert und ihren Namen auf "xl" gesetzt? Dann sollte es gehen.
Habs auch mal ausprobiert, leider scheint die erzeugte neue Datei nicht gespeichert zu werden sondern im Nirvana zu verschwinden. Nur der interne Mappenzähler "Mappe6" scheint zu funktionieren. Grüße, Messie |
Re: Richedittext nach Excel exportieren ?
wau,
ja er hat den text 'marabu' in eine neue excelmappe in tabelle4 in die zelle B1 exportiert, nicht schlecht ! ich brauche das aber in eine schon erstellte exceldatei, und den code habe ich bis jetzt programmiert:
Delphi-Quellcode:
// excel öffnen
function TForm1.OpenExcel : Boolean; begin Result:=True; Try ExcelApplication1.Connect; ExcelApplication1.UserControl := False; ExcelApplication1.AskToUpdateLinks[FLCID]:=False; Except Result:=False; end; end; // excel activieren procedure TForm1.Excelactive2Click(Sender: TObject); begin exceldateiffnen1.Enabled:=OpenExcel; excelclose1.Enabled:=exceldateiffnen1.Enabled; end; // exceldatei öffnen procedure TForm1.Exceldateiffnen1Click(Sender: TObject); var FExcelFilename : OleVariant; begin FExcelFilename:='c:\alle.xls'; ExcelApplication1.Workbooks.Open(FExcelFilename,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,FLCID); ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Item['alle.xls']); ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets.Item['Tabelle1'] as _WorkSheet); end; und jetzt würde ich einen umgestrickten code brauchen so wie von marabu wie ich den richedittext in die tabelle 1 von alle.xls exportiere ????
Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var wb: ExcelWorkbook; ws: ExcelWorkSheet; cellrange: Range; begin xl.Connect; wb := xl.WorkBooks.Add(null, GetUserDefaultLCID); ws := wb.Sheets.Add(null, null, 1, null, GetUserDefaultLCID) as ExcelWorkSheet; cellrange := ws.Range['B1', 'B1']; cellrange.Value2 := 'marabu'; xl.Disconnect; end; mfg vader |
Re: Richedittext nach Excel exportieren ?
Hast du das schon versucht?
Delphi-Quellcode:
marabu
cellrange.Value2 := RichEdit.Lines.Text;
|
Re: Richedittext nach Excel exportieren ?
So gehts beim mir:
Delphi-Quellcode:
Beim Schließen gibt's noch die Speicherabfrage, das direkte "stille" Speichern ist mir nicht gelungen. Das mit dem Get_Item habe ich in der Excel97.pas rausgesucht, das wird nämlich in der IDE nicht angeboten.
procedure TForm1.Button1Click(Sender: TObject);
var wb: ExcelWorkbook; ws: ExcelWorkSheet; r: Range; begin try xl.Connect; wb := xl.Workbooks.Open('c:\SonntagsDemo.xls',EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,GetUserDefaultLCID); ws := wb.Sheets.Get_Item(1) as ExcelWorkSheet; r := ws.Range['B1', 'B1']; r.Value2 := RichEdit1.Lines.Text; finally xl.Workbooks.Close(GetUserDefaultLCID); xl.Disconnect; end; end; Grüße, Messie |
Re: Richedittext nach Excel exportieren ?
Hallo Messie,
hast du mal die Methode Save von TExcelApplication ausprobiert? Sie müsste doch eigentlich das Modified Flag zurücksetzen und ein stilles Beenden ermöglichen... Grüße vom marabu |
Re: Richedittext nach Excel exportieren ?
Nö, tut sie nicht, will auch mit save immer die Bestätigung. Nach ein paar Versuchen wollte sie auch jedesmal eine "WIEDER.XLW" mitspeichern, bei dem Zugriff gab es aber eine OLEException. Vielleicht muß man dazu in die Excel-Einstellungen eingreifen.
Aber das Prinzip ist ja erstmal ok... wieder was gelernt. Grüße, Messie |
Re: Richedittext nach Excel exportieren ?
hallo ,
super, super, jetzt bin ich meiner aufgabe schon sehr sehr nahe dran, das hat mir jetzt sehr geholfen, könnt ihr mir noch sagen was die kleinen rechtecke in der excelzelle vor und nach dem exportierten text sind ? mfg vader |
Re: Richedittext nach Excel exportieren ?
Kannst du ein Photo davon machen?
marabu |
Re: Richedittext nach Excel exportieren ?
Zitat:
Grüße, Messie |
Re: Richedittext nach Excel exportieren ?
hallo,
das könnte stimmen, ich hole meine daten von internet, komisch sie sind nicht immer vorhanden, mfg vader |
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 08:30 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