AGB  ·  Datenschutz  ·  Impressum  







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

Excel und Delphi

Ein Thema von David Martens · begonnen am 4. Feb 2010 · letzter Beitrag vom 12. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2      
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#1

Excel und Delphi

  Alt 4. Feb 2010, 15:00
Ich habe einen Excel-Server für den Export geschrieben (mit early binding). Damit kann man aus unserem Programm heraus alle möglichen Änderungen, bis hin zu Pivottabellen und Diagramme erzeugen.

Das Ganze unterstützt mehrere Excel Versionen (97 bis 2007). Nun bin ich aber auf leider auf ein(zwei) Problem(e) gestoßen das sich nicht mehr so einfach lösen lässt:

1. Wichtig:
Seit Version 11 (2003) muß ich die Zahlen, die in die Zellen geschrieben werden, ins !!! englische !!! Format umwandeln. Das währe nicht weiter schlimm, wenn jetzt nicht eine weitere Eigenheit aufgetaucht währe.

Soweit ich jetzt sagen kann, erkennt Excel ab 2003 keine "normalen" Datumswerte mehr. Bei Excel 2000 funktioniert es noch das Datum als "25.01.2010" in die Zelle zu schreiben und Excel erkennt die Eingabe als Datum. Bei Excel 2003 ist es lediglich Text. d.h. keine vernünftige Sortierung, keine Berechnung, nichts.
Als Workaround habe ich das Zellenformat anhepasst, doch her kommt jetzt die Idiotie. Ich muß das deutsche Datumsformat nehmen und das Datum als .AsDateTime (zum Glück ist bei Excel und Delphi die 0 der 1.1.1900) eintragen. Dann erkennt Excel die Werte wieder. Jetzt zum eigentlichen Problem. Das funktioniert aber nur wenn ich das Datumsformat "händisch" eingebe.

Das deutsche Datumsformat ist 'TT.MM.JJJJ', wiekann ich Excel nach "seinem" Datumsformat fragen um das sprachabhänige Format zu bekommen und nicht 'dd.MM.yyyy' .

Mit GetLocaleInfo(GetUserDefaultLCID, LOCALE_SSHORTDATE, buff, 71) bekomme ich ja nur das Windowsformat.



2. (noch) unwichtig:
Bis einschließlich Excel 2003 kann ich die "benutzerdefinierten" Diagramme aus der Datei Xl8galry.xls auslesen und bereitstellen. Mit Excel 2007 geht das nicht mehr, da hier das Ganze anders genutzt wird. Die Diagramme liegen jetzt als crtx-Datei unter Userprofile\Anwendungsdaten\Microsoft\Templates\Ch arts.

Es gibt jetzt einer Prozedur TExcelChart.ApplyChartTemplate ABER DIE FUNKTIONERT NICHT.
hat das schon jemand hingekommen?

Danke und Gruß
David
  Mit Zitat antworten Zitat
fishly

Registriert seit: 30. Okt 2008
31 Beiträge
 
Delphi 5 Standard
 
#2

Re: Excel und Delphi

  Alt 4. Feb 2010, 15:54
Ich versteh irgendwie dein Problem nicht

Ist das nicht immer so?
Selection.NumberFormat = "dd/mm/yyyy;@" Ich hab da keinen Unterschied entdeckt, wenn ich zwischen den Gebietsschemata wechsel.
never change a running system...
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Excel und Delphi

  Alt 4. Feb 2010, 16:41
Zitat von David Martens:
Soweit ich jetzt sagen kann, erkennt Excel ab 2003 keine "normalen" Datumswerte mehr. Bei Excel 2000 funktioniert es noch das Datum als "25.01.2010" in die Zelle zu schreiben und Excel erkennt die Eingabe als Datum. Bei Excel 2003 ist es lediglich Text. d.h. keine vernünftige Sortierung, keine Berechnung, nichts.
da kann ich Dir nicht ganz zustimmen. Ich habe Excel gerade mit deutschen "Datumsen" gefüttert und es sortiert richtig (Excel 2003 SP2) wenn
"Alles was wie eine Zahl aussieht wie eine Zahl sortieren"
gewählt wird.
Das Excel ziemlich zickig ist und noch nicht einmal ein ISO-Datum versteht lassen wir einmal aussen vor
Gruß
K-H

Edit: So läuft die Fütterung:

Delphi-Quellcode:
  { sg:tStringGrid; }
  { zelle : ansistring; }

  for i:=0 to sg.rowcount-1 do begin
    for j:=0 to sg.colcount-1 do begin
       zelle:=sg.cells[j,i];
       excel.activesheet.cells(i+1,j+1):=zelle; {cells1..x/1..y }
    end;
  end;
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#4

Re: Excel und Delphi

  Alt 4. Feb 2010, 16:45
Also zu 1. nochmal. Ich glaube jetzt habe ich die Antwort, aber wiso das so ist, keine Ahnung?

noch zur Info: damit die Übertragung der Daten schneller geht mache ich folgendes:

Delphi-Quellcode:
var
  Data : OleVariant;
  ...
begin
  ...
  i := 0;
  for iCol := 0 to TDataSource.DataSet.FieldCount - 1 do
  begin
    if TDataSource.DataSet.Fields[iCol].Visible then
      inc(i);
  end;
  ...
  Data := VarArrayCreate([0, TDataSource.DataSet.RecordCount - 1, 0, i - 1], varVariant);
  ...
  while (not TDataSource.DataSet.Eof) do
  begin
    ...
    if (FExcelServer.Version.Major >= 11) and // Excel 2003 und höher
       (iCol = iDatum) then // iDatum ist die Spalte des Datums
    begin
      Data[iRow, iCol - i] := TDataSource.DataSet.Fields.Fields[iCol].AsDateTime
    end
    else
    begin
      Data[iRow, iCol - i] := Trim(TDataSource.DataSet.Fields.Fields[iCol].AsString);
    end;
  end;
  ...
  FExcelServer.WriteRange(FStartRow,
                          FStartCol,
                          TDataSource.DataSet.RecordCount,
                          VisibleFieldCount,
                          Data);
  ...
end;
TDataSource.DataSet.Fields.Fields[iCol].AsDateTime ergibt für heute 40213. Also wird ja eigentlich nur diese Zahl eingetragen, aber Excel scheint es trotzdem zu erkennen.
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#5

Re: Excel und Delphi

  Alt 4. Feb 2010, 16:49
@p80286:

Wenn ich Daten vom z.B.: 1.2.2010 bis 1.4.2010 habe und excel die Datumszeile als Text interpretiert, dann ist in der dazugehörigen Pivottabelle die Sortierung:

01.02.2010
01.03.2010
01.04.2010
02.02.2010
02.03.2010
03.02.2010
03.03.2010
...
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#6

Re: Excel und Delphi

  Alt 4. Feb 2010, 16:57
Hier zur Anschauung noch die Excel-Dateien
Angehängte Dateien
Dateityp: xls erkanntes_datum_120.xls (82,5 KB, 6x aufgerufen)
Dateityp: xls nicht_erkanntes_datum_148.xls (86,5 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Excel und Delphi

  Alt 4. Feb 2010, 17:01
Zitat von David Martens:
TDataSource.DataSet.Fields.Fields[iCol].AsDateTime ergibt für heute 40213. Also wird ja eigentlich nur diese Zahl eingetragen, aber Excel scheint es trotzdem zu erkennen.
Jo, und dieses "scheint" kann man nicht oft genug unterstreichen. Excel 2003 interpretiert irgendeinen Zahlenbereich als Datum, ich hab noch nicht herausbekommen welchen. (na gut bisher hab ich mich auch nur geärgert, und dann Text übergeben.)

ich übergebe folgende Strings
Code:
1234567
1236
66/56789
und Excel macht daraus:
Code:
     1234567
  28.05.1976
66/56789
find ich nicht witzig!

Zitat:
... und excel die Datumszeile als Text interpretiert ...
Genau da liegt ja der Hase im Pfeffer.
Als workaround würde ich das ISO-Datum (YYYYMMDD) vorschlagen, das wird als Zahl und als Text immer richtig sortiert.


Gruß
K-H

NochnNachtrag:
damit Die Datumsberechnung funktioniert darf unter Optionen > Berechnung der 1904-Datumswert nicht gesetzt sein!
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Excel und Delphi

  Alt 4. Feb 2010, 23:38
Hallo David Martens,

Dazu folgenden Hinweis:
VBA rechnet intern mit dem amerikanischen Format. Wenn Du also die richtigen Sortierung bekommen willst solltest Du das Datum in amerikanischer Schreibweise übertragen: Monat/Tag/Jahr.

Die Berechnungen und auch Sortierungen in VBA erfolgen im amerikanischen Format. Wogegen die Ausgabe der Daten von der Windows-Systemeinstellung abhängig ist.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Excel und Delphi

  Alt 5. Feb 2010, 00:50
Zitat von David Martens:
(zum Glück ist bei Excel und Delphi die 0 der 1.1.1900) eintragen.
Bist du sicher ?

Meines Wissens ist das so

Excel : 0 = 00.01.1900, 1 = 01.01.1900
Delphi: 0 = 30.12.1899, 1 = 31.12.1899
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Alt 5. Feb 2010, 07:00     Erstellt von fred4u
Dieser Beitrag wurde von gelöscht.
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Excel und Delphi

  Alt 5. Feb 2010, 09:12
Zitat von Chemiker:
Hallo David Martens,

Dazu folgenden Hinweis:
VBA rechnet intern mit dem amerikanischen Format. ...
Bist Du Dir da sicher? Ich traue Microsoft zwar vieles zu aber das nicht.
Daß Funktionen das Datum im amerikanischen Format erwarten glaube ich gerne, aber rechnen?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:49 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