Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden (https://www.delphipraxis.net/204327-excel-zahlen-werden-als-zahl-formatiert-muessen-aber-angeklickt-werden.html)

oakley 22. Mai 2020 12:29

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden
 
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

Andreas13 22. Mai 2020 18:27

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden
 
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

Chemiker 22. Mai 2020 19:55

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden
 
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

oakley 25. Mai 2020 09:46

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden
 
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

Moombas 25. Mai 2020 10:02

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden
 
@oakley: Du könntest das ja nach der Systemsprache entscheiden (https://www.delphipraxis.net/175056-...-auslesen.html), da man in der Regel ja die Programme in der gleichen Sprache installiert wie auch die Systemsprache ist.

Ansonsten hilft dir das evtl weiter:
https://docs.microsoft.com/de-de/off...nguagesettings
bzw.
https://renenyffenegger.ch/notes/Win...esources/index
und dort dann der Key "InstallLanguage", wobei 1031 DE_de ist: https://www.science.co.il/language/Locale-codes.php

oakley 25. Mai 2020 15:21

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden
 
Okay also ich habe es jetzt so gemacht, dass ich LCID abfrage.


Code:
LCID := Languages.indexOf(SysLocale.DefaultLCID);
syslang := Languages.LocaleID[LCID];
Wenn syslang = 1031 habe ich als Systemsprache Deutsch.

Ich gehe dabei einfach mal davon aus, dass die installierte Excel Sprache gleich der Systemsprache ist.

Danke für Eure Hilfe und die zahlreichen Erklärungen.

LG

Mirko

Jumpy 25. Mai 2020 15:30

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden
 
Man kann doch das NumberFormat einfach mit dem amerikanischen/internationalen/allgemeingültigen Format-String setzen. Nur wenn ich stattdessen NumberFormatLocal benutze muss ich aufpassen, oder?

oakley 20. Jun 2020 20:48

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden
 
Also das nachträgliche Schreiben der Formate funktioniert.
Das Workbook wird auch nicht angezeigt weil Excelapp.Visible := false gesetzt ist.
Sobald Excel das erste mal gestartet ist wird eine zweite Excel Instanz erzeugt und die ist dann direkt sichtbar.

Wir kann ich unterdrücken, dass bei geöffnetem Excel das Workbook direkt angezeigt wird?

Code:
  ExcelApp := CreateOleObject('Excel.Application');
  Excelapp.Visible := false; <- Wird bei laufendem Excel ignoriert
  Workbook := ExcelApp.WorkBooks.Open(excelfilename); <- hier wird die Datei dann im sichtbaren Excel geöffnet, was aber falsch ist
  ExcelApp.Range['A1','J1'].EntireColumn.AutoFit;
  ExcelApp.Range['A1','J1'].Font.Bold := True;
  ExcelApp.Range['A1','J1'].HorizontalAlignment := -4108; //xlHAlignCeenter
  ExcelApp.Range['A1','J1'].Interior.Color := RGB(150,150,150);

...

  Excelapp.Visible := True;
LG

Mirko

mmw 21. Jun 2020 11:47

AW: Excel Zahlen werden als Zahl formatiert müssen aber angeklickt werden
 
Hallo,
so müsste es funktionieren.

Delphi-Quellcode:

var
  excel_obj: olevariant;
  i: Integer;
begin
  excel_obj := unassigned;
  excel_obj := GetActiveOleObject('Excel.application');

  for i := 1 to excel_obj.windows.count do
    excel_obj.Windows[i].visible := false;

  excel_obj := unassigned;

end;

Gruß

oakley 21. Jun 2020 14:56

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

das funktioniert.

LG

Mirko


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 Uhr.
Seite 3 von 3     123   

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