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
Thema durchsuchen
Ansicht
Themen-Optionen

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
Seite 2 von 3     12 3      
Benutzerbild von Chemiker
Chemiker

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

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

  Alt 20. Mai 2020, 01:35
Hallo,

was man machen kann, dass man den Wert nach der Formatierung überschreibt:

Delphi-Quellcode:
    zahl: Extended;

   if TryStrToFloat(ExcelApp.Range['A1','A1'].value2, Zahl) then
   begin
     ExcelApp.Range['A1','A1'].EntireColumn.NumberFormat:= '#,###.00';
     ExcelApp.Range['A1','A1'].Value2:= Zahl;
   end;

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

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#12

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

  Alt 20. Mai 2020, 11:07
Wenn es am NumberFormat liegen sollte, kann man in Excel auch NumberFormatLocal verwenden, dann müsste er mit der deutschen Formatsmaske klar kommen. Aber wie gesagt, ich denke Excel versteht es ja, berechnet/evaluiert nur die Zellen nicht neu.
Da die Daten ja aus einem StringGrid kommen denke ich das alles als Text bei Excel reingeschrieben wird. Jetzt gibst du der Zelle mit einer Zahl als Text eine Zahlenformatierung und nun muss man Excel halt nur sagen, dass auch anzuwenden.
Ralph
  Mit Zitat antworten Zitat
oakley

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

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

  Alt 20. Mai 2020, 12:54
Also die Übergabe im ANSI Format (#,##0.00) funktioniert nicht, dann formatiert er falsch wenn ich auf die Zelle klicke.
Die Angabe #,##0.00 formatiert richtig als Zahl aber es bleibt das grüne Dreieck und Summen usw sind mit dem Werten nicht möglich.
Ein Klick mit der rechten Maustaste auf die Zelle bestätigt das Format als Zahl.

@Ralph: ja nur wie mache ich das? Wie bringe ich Excel dazu die Formatierung anzuwenden und nicht was eigenes zu generieren?

@Chemiker: habe ich so gemacht und es funktioniert. Danke !

LG

Mirko

Geändert von oakley (20. Mai 2020 um 13:00 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#14

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

  Alt 20. Mai 2020, 13:15
@Chemiker: Ich müsste dann wahrscheinlich durch jede Zelle in den Zahlenspalten "loopen" und neu schreiben, das würde sicher gehen.
Das Format muss für jede Zelle gesetzt werden und nicht nur für A1.

Wenn sich alle Daten "irgendwo" zwischen A1 und F97 befinden, dann könnte auch ein ExcelApp.Range['A1','F97'].EntireColumn.NumberFormat:= '#.###,00'; reichen.

ExcelApp.Range['A1','F97'] entspricht 6 Spalten und 97 Zeilen.

Du könntest es auch mal in der Form versuchen: ExcelApp.Range['A1',Format('%s%d',[Chr(StringGrid.Cols + 64),StringGrid.Rows])].EntireColumn.NumberFormat := '#.###,00';

Range ist der Bereich, für den das Format gelten soll. Wenn der Bereich mit ExcelApp.Range['A1','A1'] angegeben wird, dann gilt er auch nur für A1, also die erste Zelle oben links.
  Mit Zitat antworten Zitat
Andreas13

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

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

  Alt 20. Mai 2020, 13:23
Hallo Mirko,
mich würde zur konkreten Nachvollziehung des Problems mal Dein Code für Deine ursprünglich nicht funktionierende Lösung interessieren, denn Du hast aller Wahrscheinlichkeit nach die Zahlen als Text an Excel übergeben.
Der funktionierende Vorschlag von Chemiker ExcelApp.Range['A1','A1'].Value2:= Zahl; erzwingt gerade diese Konvertierung des Strings in ein Zahlenformat.
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
 
#16

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

  Alt 20. Mai 2020, 15:16
Hallo Andreas,

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.

Noch eine kurze Frage, da ich nur sehr selten so etwas mache wie Excel fernsteuern: Im Editor wird mir EntireColumn.Numberformat als undeklariert angezeigt bei
Code:
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.Range['A1','A1'].EntireColumn.Numberformat := '@';
Kann ich das irgendwie korrigieren?

LG

Mirko
  Mit Zitat antworten Zitat
Andreas13

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

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

  Alt 21. Mai 2020, 20: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 20:58 Uhr)
  Mit Zitat antworten Zitat
Andreas13

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

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

  Alt 21. Mai 2020, 21: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 22:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

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

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

  Alt 21. Mai 2020, 21: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
719 Beiträge
 
Delphi XE5 Professional
 
#20

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

  Alt 21. Mai 2020, 22: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
Antwort Antwort
Seite 2 von 3     12 3      


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 19:07 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