AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden

Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden

Ein Thema von oakley · begonnen am 19. Mai 2020 · letzter Beitrag vom 21. Jun 2020
Antwort Antwort
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
730 Beiträge
 
Delphi XE5 Professional
 
#1

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden

  Alt 21. Mai 2020, 19:56
Hallo Mirko,
die Programmzeile ExcelApp.Range['A1','A1'].EntireColumn.Numberformat := '@'; wird auch bei mir als undeklariert markiert, weil bei der vorliegenden "Frühen Bindung ohne Verwendung der Typbibliothek" die IDE über die importierten Routinen noch nichts "weiß". Die Stunde (Sekunde) der Wahrheit schlägt somit erst zur Laufzeit... Du mußt also die Routinen ausgiebig testen.
Noch etwas habe ich bei meiner Delphi-Version (XE5 Pro) unter Windows 10 beobachtet: Die übliche Anbindung von Excel mittels
Delphi-Quellcode:
Var
  Excel: Variant;

Begin
Try
  Excel:= GetActive0le0bject('Excel.Application');
Except
 Excel:= CreateOleObject('Excel.Application');
End;
...
ist bei mir unzuverlässig, weil GetActive0le0bject('Excel.Application'); bei mir beim Fehlen des Excel-Servers zwar eine EOLESysError-Exception auslöst, aber merkwürdigerweise nicht in den Except-Block springt, sondern einen Programm-Abbruch zur Folge hat. Daher mußte ich eine ich aus den beiden obigen Routinen eine zusammengefasste GetOrCreateOleObject(..) machen:
Delphi-Quellcode:
Uses
, Vcl.OleAuto
, Winapi.Ole2
;
Function MyOleCheck(Res: HResult): Boolean;
Begin
  Result:= Failed(Res);
End;{MyOleCheck}
{--------------}

Function GetOrCreateOleObject(Const ClassName: String): Variant;
VAR
  Unknown : IUnknown;
  ClassID : TCLSID;
  WideCharBuf: Array[0..127] of WideChar;
  Fehler : Boolean;
  
Begin
  StringToWideChar(ClassName, WideCharBuf, SizeOf(WideCharBuf) div 2);
  OleCheck(CLSIDFromProgID(WideCharBuf, ClassID));

  // GetActiveOleObject:
  Fehler:= MyOleCheck(GetActiveObject(ClassID, NIL, Unknown));
  
  // CreateOleObject:
  IF Fehler Then
    Fehler:= MyOleCheck(CoCreateInstance(ClassID, NIL, CLSCTX_INPROC_SERVER OR CLSCTX_LOCAL_SERVER, IID_IUnknown, Unknown));
    
  Try
    Result:= VarFromInterface(Unknown);
  Finally;
    Unknown.Release;
  End;
End;{GetOrCreateOleObject}
{------------------------}
...
Begin
  Try
     Excel:= GetOrCreateOleObject('Excel.Application');
  ...
Auf diese Weise konnte ich auch nicht-visuelle Konsolen-Anwendungen "wasserdicht" machen. Vielleicht hilft es jemandem hier weiter.
Gruß, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (21. Mai 2020 um 19:58 Uhr)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
730 Beiträge
 
Delphi XE5 Professional
 
#2

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden

  Alt 21. Mai 2020, 20:09
… und noch etwas:
Zitat:
ja da hast Du recht. Ich habe die Speicher Routine eines AdvStringgrid von TMS genommen und die hat die Daten einfach als Text übertragen.
Das war der Fehler. Die Neuformatierung hat dann alles wieder gerade gebogen.
Das stimmt leider nicht. Durch einfaches Formatieren wird aus Excel's String-Zahlen, die jeweils einen Apostroph vor der Zahl haben (z. B. '1) noch keine Zahl. Probier es doch mal aus, indem Du nach der "Umformatierung" die Zahlenkolonne summierst oder mit ihnen andere arithmetische Operationen ausführst. Dann merkst Du sofort, daß es keine Zahlen, sondern Texte sind.
Gruß, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (21. Mai 2020 um 21:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden

  Alt 21. Mai 2020, 20:31
Hallo Andreas13,

der Except Block wird zuverlässig ausgeführt!
Du hast eine nicht ordnungsgemäße geschlosse Excel-Instanz im Hintergrund laufen. Im Task-Manager wird diese Instanz unter Prozesse angezeigt.

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

Registriert seit: 14. Okt 2006
Ort: Nürnberg
730 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden

  Alt 21. Mai 2020, 21:48
Danke Chemiker, das war der Grund für den Programm-Absturz!
Gruß, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
287 Beiträge
 
#5

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden

  Alt 22. Mai 2020, 12:29
Nachdem das Ganze jetzt mit dem Neuschreiben der Zahlen funktioniert wollte ich noch die letzte Spalte als Datum formatieren.
Ich habe ein Datum-Format mit Schrägstrichen, also sowas wie 24/12/2020 .
In Excel werden in der betreffenden Spalte teilweise Zellen als Text, teilweise Datum erkannt.
Code:
ExcelApp.Range['A1','A1'].EntireColumn.NumberFormat:= 'dd/mm/yyyy';
Funktioniert leider nicht. Excel formatiert nach wie vor wie es möchte, bzw ein Datum erkannt wird.

LG

Mirko
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
730 Beiträge
 
Delphi XE5 Professional
 
#6

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden

  Alt 22. Mai 2020, 18:27
Hallo Mirko,
für die deutsche Excel-Version mußt Du folgendes schreiben:
Delphi-Quellcode:
Excel.Range['A1','A10'].EntireColumn.NumberFormat:= 'TT/MMMM/JJJJ'; oder
Excel.Range['A1','A10'].EntireColumn.NumberFormat:= 'TT/MM/JJJJ';
Gruß, Andreas
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (22. Mai 2020 um 18:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden

  Alt 22. Mai 2020, 19:55
Hallo,

wenn man das TMS – StringGrid (das SG von Delphi funktioniert genauso) in Excel übertragen will, benutze ich folgende Routine, das ist ein Extrakt sollte aber funktionieren:
Delphi-Quellcode:
procedure HPL_TMS_SG_nach_Excel;
var i, j:integer;
    Text: String;
    Zahl : Extended;
    Datum: TDateTime;
    olevEXCEL: OLEVariant;

begin
  try
    olevExcel := CreateOleObject('Excel.Application');
  except
    ShowMessage('Microsoft Excel kann nicht starten.');
    exit;
  end;
  olevExcel.Visible := true;
  olevExcel.Workbooks.add;
  for i:=0 to AdvStringGrid1.rowcount-1 do
  begin
    for j:=0 to AdvStringGrid1.colcount-1 do
    begin
      Text:=AdvStringGrid1.cells[j,i];
      if TryStrToFloat(Text, Zahl) then
      begin
        olevEXCEL.cells[i+1,j+1].Value2:= Zahl;
      end
      else
      begin
        if TryStrToDate(Text,Datum) then
        begin
          olevEXCEL.cells[i+1,j+1].Value2 := Datum;
        end
        else
        begin
          olevEXCEL.cells[i+1,j+1].Value2 := Text;
        end;
      end;
     end;
  end;
  // Beispiel einer Formatierung
  // Spalte 3 sind Zahlen und werden mit 2 Kommastellen und Euro Zeichen formatiert
  // Anschließend werden die Zellen rot markiert bis auf die Überschrift.
  olevEXCEL.Range['C1','C10'].NumberFormat :='_(€* #.##0,00_);_(€* (#.##0,00);_(€* ""-""??_);_(@_)';
  olevEXCEL.Range['C2','C10'].Interior.Color:= CLRED;

  Showmessage ('Stop!');
  // Hier aus EXCEL die Datei abspeichern.
  // ist nicht im Code enthalten
  if NOT VarIsEmpty(olevEXCEL) then
  begin
    olevEXCEL.ActiveWorkBook.Saved:= TRUE;
    olevEXCEL.Quit;
    olevEXCEL:= Unassigned;
  end;
end;



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

Registriert seit: 15. Aug 2005
287 Beiträge
 
#8

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden

  Alt 25. Mai 2020, 09:46
Danke für den Code Chemiker ich hatte bis jetzt immer nur die Standardfunktion
Code:
GRID.SaveFiletoXLS(Dateiname:String)
verwendet.

Andreas, gibt es da nichts, das Sprachunabhängig ist? Was macht man wenn man verschiedene Sprachversionen Excel hat? Deutsch und Englisch z.B.?

LG

Mirko
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:14 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