AGB  ·  Datenschutz  ·  Impressum  







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

Excel Sheets

Ein Thema von Sidi61 · begonnen am 29. Sep 2016 · letzter Beitrag vom 6. Okt 2016
Antwort Antwort
Jumpy

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

AW: Excel Sheets

  Alt 5. Okt 2016, 09:24
Hallo p80286,

da hast du wohl recht, werde es dann einfach in die Grundeinstellung des jeweiligen Programms auslagern, das hat den Charme dass der Anwender das Format selbst wählen kann und somit u.U. auch für ältere Excel Versionen auf ggf. vorhandenen Zweit-Rechnern kompatibel sein kann.

Gruß
Sidi61
Da wirst du aber trotzdem nicht drum rum kommen, in deiner Speicher-Routine die Excel-Version zu prüfen. Denn wenn du ein neues Excel hast, der Benutzer aber im alten xls-Format speichern will, um die Datei auch auf seinem alten Rechner öffnen zu können brauchst du beim "Save As"-Befehl andere Parameter.

Delphi-Quellcode:
function ExcelVersion:integer;
begin
  //ExcelApp.Version liefert sowas wie 14.0
  Result:=Trunc(StrToFloat(ExcelApp.Version))
end;

//irgendwo in der Speichern-Routine:
//ab Version 12.0 gibts meine ich xlsx
If ExcelVersion>=12 then //Excel-Version ist neu
  begin
  If GewünschteDateiEndung='xlsxthen
    ExcelApp.SaveAs(GewünschterDateiname)
  Else //Endung='xls' gewünscht
    //56=Altes Excel-Format benutzen in neueren Excels
    ExcelApp.SaveAs(GewünschterDateiname,56)
  end
Else //Excel-Version ist alt
  begin
  If GewünschteDateiEndung='xlsxthen
    showmessage('Altes Excel kann neues Format nicht speichern')
  Else //Endung='xls' gewünscht
    ExcelApp.SaveAs(GewünschterDateiname)
  end;
Die Magic-Numbers sollte man natürlich durch ordentlich benamste Konstanten ersetzen.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Excel Sheets

  Alt 5. Okt 2016, 12:08
Die Magic-Numbers sollte man natürlich durch ordentlich benamste Konstanten ersetzen.
Vertu' ich mich oder gibt's die nicht schon in Word und Excel?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Jumpy

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

AW: Excel Sheets

  Alt 5. Okt 2016, 13:03
Die Magic-Numbers sollte man natürlich durch ordentlich benamste Konstanten ersetzen.
Vertu' ich mich oder gibt's die nicht schon in Word und Excel?

Gruß
K-H
Ja klar (heißt xlExcel8 aus der XlFileFormat-Enumeration), aber wenn du von Delphi aus mit Late-Binding arbeitest, wie im bisher hier gezeigten Code, stehen diese Konstanten ja nicht zur Verfügung. Wenn man verschiedene Generationen von Excel berücksichtigen will, ist das ja auch der sichere Weg, denn ein altes Excel würde den betreffenden Konstantennamen ja u.U. gar nicht kennen.
Ralph
  Mit Zitat antworten Zitat
Sidi61

Registriert seit: 13. Jun 2006
97 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Excel Sheets

  Alt 5. Okt 2016, 15:02
Hallo Jumpy,

okay, dann sieht die Sache natürlich anders aus, habe nicht gewusst dass sich dadurch SaveAs bezüglich der Parameter ändert.
Ab Excel 7, in der Versionsangabe also 12.0 ändert sich das Dateiformat.

Hallo Chemiker,
ich habe deine Abfragen dann wohl falsch aufgenommen, habe deinen Code so interpretiert dass du jedes mal abfragst ob die Variable auch ein Objekt enthält mit dem gearbeite werden kann. Verstehe allerdings auch jetzt noch nicht wo genau geprüft wird ob es noch offene Instanzen gibt die geschlossen werden müssen. Bin einfach mal naiv davon ausgegangen, wenn ich weiß was ich geöffnet habe, weiß ich auch was ich schließen muss

Gruß
Sidi61
  Mit Zitat antworten Zitat
Sidi61

Registriert seit: 13. Jun 2006
97 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Excel Sheets

  Alt 5. Okt 2016, 20:18
Hallo Jumpy,

nochmals Danke für deinen Tip, habe ich wie folgt umgesetzt:

Delphi-Quellcode:
unction TFormExcel.Excel_Arbeitsmappe_speichern(Z: string):boolean;
Var OK : boolean;
begin
  OK := true;
  if ExcelVersion >= 12 then //ab 12 Format xlsx
  begin
    try
      if uppercase(DS) = 'XLSXthen ExcelApp.ActiveWorkbook.saveas(Z+'.'+DS);
      //56 = altes Excel-Format benutzen
      if uppercase(DS) = 'XLS'  then ExcelApp.ActiveWorkbook.saveas(Z+'.'+DS,56);
    except
      showmessage('speichern von '+Z+'.'+DS+' ist fehlgeschlagen');
      ok := false;
    end;
  end else
  begin
    if uppercase(DS) = 'XLSXthen
    begin
      Showmessage('Das Dateiformat .xlsx wird von Ihrer Version nicht unterstützt, die Speicherung erfolgt im .xls Format');
      DS := 'xls';
    end;
    try
      ExcelApp.ActiveWorkbook.saveas(Z+'.'+DS);
    except
      showmessage('speichern von '+Z+'.'+DS+' ist fehlgeschlagen');
      ok := false;
    end;
  end;
  Result := OK;
end;
Funktioniert prächtig

Woher stammt die 56, konnte nirgends eine Doku dazu finden

Gruß
Sidi61
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Excel Sheets

  Alt 5. Okt 2016, 21:19
Dan schau mal hier herein:
https://msdn.microsoft.com/de-de/lib.../ff198017.aspx
https://msdn.microsoft.com/de-de/lib...ileformat.aspx

Gruß
K-H
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.859 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Excel Sheets

  Alt 6. Okt 2016, 00:32
Hallo Sidi61,

man kann bei einem aktiven Workbook auch das entsprechende Fileformat herauslesen, das bedeutet, wenn man zum Beispiel ein altes Workbook (XLS-Format) in ein neues Excel öffnet, so kann man das Fileformt lesen und anschließend unter diesem alten Format wieder abspeichern.

Delphi-Quellcode:
aFileFormat := ExcelApp.ActiveWorkbook.Fileformat;
ExcelApp.ActiveWorkbook.SaveAs(Filename:=DateiName, FileFormat:=aFileFormat);

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  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 22:05 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