Hallo,
ich habe ein Excelsheet (xlsx auf Excel2013; Bereiche sind Kennwortgeschützt und Mappe ist freigegeben, was aber die Bearbeitung nicht behindert), das ich in meiner Anwendung öffne, bearbeite und speichere. Klappt erstmal super
Wenn ich nun das gespeicherte Sheet wieder öffne, bekomme ich von Excel einen Namenskonflikt (Siehe Screenshot1) und ich muss 1-2 Namen eintippen.
Dieses Problem gibt es schon lange (google Suche nach "Excel Namenskonflikt Print_Area" bzw. .."Print_Title") - aber es scheint nicht klar zu sein, woher das Problem kommt (sonst hätte es MS wohl schon gefixt!?).
Ich kann wohl wenig falsch machen, wenn ich das Sheet wie folgt erfolgreich öffne:
Delphi-Quellcode:
//ich verwende die TExcelApplication-Komponente, die ich einfach "xls" genannt habe
//global habe ich da noch:
var
wb: _WorkBook;
ws: _WorkSheet;
lcid: Integer;
//dann in einem OnClick:
xls.Connect;
lcid := GetUserDefaultLCID;
wb:=xls.Workbooks.Open(
format('%s\RMA_%s.xlsx',[le_pfad.text,le_RMAnr.text]),
emptyParam, emptyParam, emptyParam,
emptyParam, emptyParam, emptyParam,
emptyParam, emptyParam, emptyParam,
emptyParam, emptyParam, emptyParam,
lcid);
ws:=xls.Sheets[1] as _worksheet;
Später speichere ich meine Änderungen beim Schließen des Programms
Alles gut, keine Fehlermeldungen.
Öffne ich nun das Sheet in Excel direkt und sehe mir mit Strg+F3 die definierten Namen an (weil ich darauf beim googlen gestoßen bin), stehen da plötzlich 2 neue definierte Namen (Siehe Screenshot), nämlich "Print_Area" und "Print_Title", während meine deutschen Namen "Druckbereich" und "Drucktitel" nach wie vor darin stehen und jeweils zeigen sie auf die gleichen Bereiche.
Während es keine Fehlermeldung gibt, wenn ich es nur mit Excel öffne, bekomme ich dieses bekannte Problem angezeigt, wenn ich es mit meinem Programm öffne
Für mich sieht das so aus, als würde beim Einlesen ein Sprachkonflikt die neuen Namen anlegen und somit in der gespeicherten Datei dann auftauchen. Beim erneuten Einlesen versucht Excel das nochmal und da ist ja dann schon dieser Name und man muss manuell einen anderen eintippen.
Wie aber kann man das Problem vermeiden? Liegt es an der Komponente? Oder an der
OLE (falsche Sprachversion?), oder ein Bug im Excel beim Einlesen?
Oder - wie immer - mache ich was falsch?