AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Excel OLE - Problem nach Speichern

Ein Thema von SearchBot · begonnen am 4. Dez 2016 · letzter Beitrag vom 7. Dez 2016
Antwort Antwort
Seite 1 von 2  1 2   
SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
311 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Excel OLE - Problem nach Speichern

  Alt 4. Dez 2016, 20:22
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
Delphi-Quellcode:
 wb.Save(lcid);
 xls.Quit;
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?
Miniaturansicht angehängter Grafiken
excel_ole_bug.png   excel_ole_bug1.png  
  Mit Zitat antworten Zitat
Jumpy

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

AW: Excel OLE - Problem nach Speichern

  Alt 5. Dez 2016, 11:06
Machst du denn in deinem Programm auch irgendwas mit dem Excel-Sheet? Du wirst es ja nicht nur öffnen und speichern? Vllt. entsteht dabei das Problem (neuer Druckbereich festlegen o.ä.).
Ralph
  Mit Zitat antworten Zitat
SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
311 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Excel OLE - Problem nach Speichern

  Alt 5. Dez 2016, 15:18
Ja klar, ich lese darin bestimmte Zellen aus und füge hier und da Daten ein.

Der Druckbereich ist aber fest definiert und wird zu keiner Zeit verändert.
Mein Programm legt auch keine neuen Namen an (zumal ich garnicht wüsste, wie ich das hätte programmieren sollen!?) - bis zum Auftreten des Problems war mir garnicht bewusst, daß das überhaupt geht
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Excel OLE - Problem nach Speichern

  Alt 5. Dez 2016, 15:45
Ganz entfernt war da mal was.
Versuch doch mal das Abspeichern mit
 excel.ActiveWorkbook.SaveAs(Filename:=excfile,FileFormat:=$38 {xlExcel8}); Wenn ich mich recht erinnere, war danach Ruhe, allerdings brauchte ich das auch um Kompatibilität zu den verschiedenen Versionen zu behalten.

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.736 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Excel OLE - Problem nach Speichern

  Alt 5. Dez 2016, 15:51
Was macht den die LCID Geschichte, MSDN ist gerade nicht zu erreichen. Hat das was mit Localisation zu tun, dann lass das doch mal weg, sprich nur:

wb:=xls.Workbooks.Open(format('%s\RMA_%s.xlsx',[le_pfad.text,le_RMAnr.text]));
Ralph
  Mit Zitat antworten Zitat
kompi

Registriert seit: 27. Apr 2012
Ort: Duisburg
55 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Excel OLE - Problem nach Speichern

  Alt 5. Dez 2016, 18:54
Ich hatte dieses Problem auch schon mal in einer Anwendung. Diese Namenskonflikte tauchen immer dann auf, wenn man Excel - Dateien in dem neuen Dateiformat (ab Excel 2007) öffnen will.

Die Lösung besteht darin, statt Workbooks.open Workbooks.openxml zu verwenden. Dann sollte der Spuk vorbei sein.

Mit Workbooks.openxml lassen sich eben nicht nur XML Dateien öffnen, sondern auch die Excel Dateien im neueren Format.

Ich habe dies jedoch bisher nur mit Excel 2010 ausprobieren können.

Gruß
Kompi
Detlef Schmitz
  Mit Zitat antworten Zitat
SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
311 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Excel OLE - Problem nach Speichern

  Alt 6. Dez 2016, 00:22
Hat das was mit Localisation zu tun, dann lass das doch mal weg, ...
Ich nutze die Komponente, da kann ich keine Parameter weglassen.
Für LCID bekomme ich auf dem verwendeten System 1031. Wenn ich wüsste, was das Excel für eine Lokalisierung benötigt, nähme ich den gleichen Wert und gut?

Die Lösung besteht darin, statt Workbooks.open Workbooks.openxml zu verwenden. Dann sollte der Spuk vorbei sein.
Die Komponente hat nur .open und .opentext

Ganz entfernt war da mal was.
Versuch doch mal das Abspeichern mit
 excel.ActiveWorkbook.SaveAs(Filename:=excfile,FileFormat:=$38 {xlExcel8});
Die Komponente erlaut dieses Format nicht.

Ich glaube langsam, ich sollte die Komponente in die Tonne treten..!? Ihr macht das alle ohne das Ding?
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

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

AW: Excel OLE - Problem nach Speichern

  Alt 6. Dez 2016, 01:14
Hallo SearchBot,

bei EXCEL 2013 hast Du bei Workbooks.Open 15 Parameter. In Deinen Code sind es aber nur 13 Parameter.

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

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
311 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Excel OLE - Problem nach Speichern

  Alt 6. Dez 2016, 02:25
Hallo SearchBot,

bei EXCEL 2013 hast Du bei Workbooks.Open 15 Parameter. In Deinen Code sind es aber nur 13 Parameter.

Bis bald Chemiker
Die Komponente, die bei Berlin 10.1 dabei ist, beruht wohl auf Excel2000 und nimmt nicht mehr Parameter.

Ich habe mir jetzt einen Bugfix gebastelt, indem ich "einfach so frech bin" und vor dem Speichern in meinem Programm die von Excel fälschlich angelegten Namen lösche

Danach habe ich keinen Namenskonflikt mehr, weil beim erneuten Öffnen Excel zwar wieder die Namen anlegt, die ich aber danach einfach wieder lösche
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

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

AW: Excel OLE - Problem nach Speichern

  Alt 6. Dez 2016, 21:06
Hallo SearchBot,

es werden doch 2 Komponenten-Arten angeboten, wenn Du statt „MS Office 2000 Beispiele für gekapselte Komponenten für Automatisierungsserver“ den „MS Office XP …“ wählst sollte auch Workbooks.Open mit den richtigen Parametern arbeiten.
Und wenn man ganz unabhängig von der EXCEL-Version arbeitet, sollte man statt der späten Bindung die frühe Bindung benutzen.

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