AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Daten von Excel über das Clipboard in Stringgrid einfügen
Thema durchsuchen
Ansicht
Themen-Optionen

Daten von Excel über das Clipboard in Stringgrid einfügen

Ein Thema von Bernhard73 · begonnen am 18. Apr 2014 · letzter Beitrag vom 23. Apr 2014
Antwort Antwort
Bernhard73

Registriert seit: 4. Jul 2010
42 Beiträge
 
Delphi 11 Alexandria
 
#1

Daten von Excel über das Clipboard in Stringgrid einfügen

  Alt 18. Apr 2014, 18:36
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

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

  Alt 18. Apr 2014, 19:38
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

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

  Alt 19. Apr 2014, 06:45
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.
fork me on Github

Geändert von sx2008 (19. Apr 2014 um 06:53 Uhr)
  Mit Zitat antworten Zitat
Bernhard73

Registriert seit: 4. Jul 2010
42 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 19. Apr 2014, 07:23
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
  Mit Zitat antworten Zitat
Bernhard73

Registriert seit: 4. Jul 2010
42 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 22. Apr 2014, 18:53
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
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 23. Apr 2014, 07:57
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.
Peter
  Mit Zitat antworten Zitat
Antwort Antwort


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:03 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