![]() |
Daten von Excel über das Clipboard in Stringgrid einfügen
Hallo zusammen,
ich habe da ein Problem, dessen Ursache mir nicht so ganz klar ist. Es geht um das Einfügen von Text aus einer Excel-Tabelle in ein StringGrid. Das ganze soll einfach über die Zwischenablage mittels Copy & Paste erfolgen. Ist Teil eines größeren Programmes, dass bei uns auf der Arbeit eingesetzt wird. Folgender Code funktioniert bei mir zuhause (Win7 64bit, Excel 2010) exakt so wie ich mir das vorstelle:
Delphi-Quellcode:
Auch auf der Arbeit (da hab ich WinXP, Office 2003) klappt das bestens.
procedure PasteFromClipboard(Grid : TStringGrid;ACol, ARow : Integer);
var s,t,u : String; x,y,xx : Integer; begin xx:=Grid.Col; x:=xx; y:=Grid.Row; s := Clipboard.AsText; t:=''; u:=''; while s <> '' do begin t := copy(s, 1, pos(#13, s)-1); delete(s, 1, pos(#13, s) + 1); while t <> '' do begin if pos(#9,t)>0 then begin u := copy(t, 1, pos(#9, t)-1); delete(t, 1, pos(#9, t)); end else begin u:=t; t:=''; end; if (x<Grid.ColCount) and (y<Grid.RowCount) then Grid.Cells[x,y]:=u; inc(x); end; inc(y); x:=xx; end; end; Bei einer Arbeitskollegin, die das Programm benutzt (Win7 64 bit, Office 2010) funktioniert das ganze jedoch aus irgendwelchen Gründen nicht. Bei ihr wird offenbar der gesamte Text in eine einzelne Zelle kopiert, bei ansonsten (scheinbar) identischen Ausgangsbedingungen. Dummerweise bräuchte gerade sie die Funktion aber (es geht da um Dienstplanerstellung). Am Code kann es eigentlich nicht liegen. Am ehesten wäre anzunehmen, das die Formatierung der Daten, die Excel ans Clipboard übergibt, sich unterscheiden. Aber wie gesagt, zuhause bei mir funktioniert das ganze, mit den (scheinbar) gleichen Systemvoraussetzungen (d.h. Win7 64 bit + Office 2010). Hat da jemand eine zündende Idee? Danke für Eure Bemühungen, Bernhard |
AW: Daten von Excel über das Clipboard in Stringgrid einfügen
Hast du dir schon einmal angeschaut, was da über die Zwischenablage reinkommt?
Ich vermute mal, dass dort eben kein TAB-Delimited Text in die Zwischenablage gelegt wird. Die Funktion zum Füllen des Grids würde ich auch nicht mit dem Auslesen des Clipboards vermengen. Auch das Auseinanderpflücken des Textes würde ich auslagern (eine Prozedur erfüllt eine Aufgabe). Die Prozedur könnte dann so aussehen:
Delphi-Quellcode:
procedure PasteFromClipboard( Grid : TStringGrid; ACol, ARow : Integer );
var LText : string; LFiller : TGridTextFiller; begin LFiller := nil; LText := Clipboard.AsText; case AnalyzeText( LText ) of ttTabDelimited : LFiller := TTabDelimitedFiller.Create; ttCsv : LFiller := TCsvFiller.Create; end; if not Assigned( LFiller ) then raise Exception.Create( 'Unknown Format' ); LFiller.Fill( Grid, ARow, ACol ); end; |
AW: Daten von Excel über das Clipboard in Stringgrid einfügen
Zitat:
Mit dem dem ![]() Manche Formate tragen mehr Informationen (z.B. Formatierung, Zeichensatz,...) als andere. Die Anwendung die die Zwischenablage ausliest sucht sich dabei das am Besten geeignete Format aus dem Angebot heraus. Gerade Excel ist die Anwendung die die meisten Clipboardformate nützen kann. |
AW: Daten von Excel über das Clipboard in Stringgrid einfügen
Hallo und danke für Eure Kommentare,
ich werde mir dann mal ansehen, was da tatsächlich übergeben wird. Kann ich dann erst am Dienstag vor Ort testen. Kryptisch ist nur, warum sich die identische Anwendung bei gleichem Betriebssystem und gleicher Excel-Version offenbar ein anderes Clipboardformat herausfischt... Bernhard |
AW: Daten von Excel über das Clipboard in Stringgrid einfügen
Hallo nochmal...
ich habe das ganze jetzt vor Ort getestet. Der Clipboardinhalt ist offenbar identisch, es werden jeweils ordnungsgemäß auch Tabs und CR/LF übergeben (überprüft mit FreeClipboardViewer und sicherheitshalber nochmal mit einem eigenen Testprogramm). Da in beiden Fällen obige Prozedur das Einfügen übernimmt, sollte also auch ein identisches Ergebnis zu erwarten sein. Bei der Kollegin wird aber stets der gesamte aus Excel kopierte Inhalt in eine Stringgrid-Zelle eingefügt. Gruß, Bernhard |
AW: Daten von Excel über das Clipboard in Stringgrid einfügen
Hallo Bernhard,
hast du selbst an dem Platz der Anwenderin gesessen und es selbst durchgeführt? Falls nicht, hat sie evtl. die Zelle in den Edit-Modus gesetzt und deswegen wird der Clipboard-Inhalt in die Zelle gepackt. Wenn die technischen Bedingungen identisch sind, sollte man einen Bediener-"Fehler" in Betracht ziehen. EDIT: Habe gerade gelesen, du warst vor Ort. Also vergiss den Post. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 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