Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Daten von Excel über das Clipboard in Stringgrid einfügen (https://www.delphipraxis.net/180048-daten-von-excel-ueber-das-clipboard-stringgrid-einfuegen.html)

Bernhard73 18. Apr 2014 17:36

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:
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;
Auch auf der Arbeit (da hab ich WinXP, Office 2003) klappt das bestens.
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

Sir Rufo 18. Apr 2014 18:38

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;

sx2008 19. Apr 2014 05:45

AW: Daten von Excel über das Clipboard in Stringgrid einfügen
 
Zitat:

Zitat von Bernhard73 (Beitrag 1256185)
Am ehesten wäre anzunehmen, das die Formatierung der Daten, die Excel ans Clipboard übergibt, sich unterscheiden.

Excel übergibt mehrere verschiedene Formate gleichzeitig an das Clipboard.
Mit dem dem Clipboard Explorer kann man sich die Inhalte anschauen.
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.

Bernhard73 19. Apr 2014 06:23

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

Bernhard73 22. Apr 2014 17:53

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

Jasocul 23. Apr 2014 06:57

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 01:18 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