none
Excel API: Interne Namen

    Frage

  • Hallo!

    Wie kann ich verhindern, dass Excel beim Öffnen von Dateien über die Excel API interne Namen übersetzt oder sogar kopiert und dann übersetzt?

    Konkret habe ich folgenden Fall: Ich habe eine Excel-Datei, in der ich den Druckbereich festgelegt habe. Dadurch hat Excel den internen Namen "Druckbereich" erzeugt und mit dem aktuellen Druckbereich belegt.

    Nun öffne ich die Datei mit der Excel-API-Funktion Workbooks.Open. Dadurch wird der Name übersetzt in "Print_Area". Wenn ich die Datei nun abspeichere und später "normal" in Excel öffne ist der Druckbereich nicht mehr so wie ich ihn ursprünglich festgelegt habe, da mein deutsches Excel mit der englischen Bezeichnung "Print_Area" nichts anfangen kann.

    Auf manchen PCs wird der Name nicht einfach umbenannt, sondern kopiert. Beim nächsten Öffnen kommt dann eine Fehlermeldung, dass der Name doppelt vorhanden ist.

    Wer kann mit bei dem Problem weiterhelfen? Ich bin für jede Hilfe dankbar!

    Gruß,

    Torsten

    Montag, 19. Dezember 2011 10:11

Antworten

  • Hallo Torsten,

    ich habe dieses Problem selber getroffen. Es passiert aber nur, wenn man die Excel Datei programmatisch öffnet und - sehr wichtig - es ist nur mit Programmiersprachen wie Delphi oder PowerShell nachstellbar. Wenn man die Datei mit VBA oder VB Skript öffnet, passiert dieses Problem nicht! Es geht hier um einen bekannten Bug im Office 2007 und 2010. Der einzige Workaround, der ich weiß, ist OpenXML statt Open zu verwenden. Hier ist ein Beispiel mit PowerShell Skript:

    $excel = New-Object -ComObject Excel.Application
    $excel.Visible = $true
    $workbook = $excel.Workbooks.OpenXML("c:\tmp\Mappe1.xlsx")

    Viele Grüße,

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Montag, 19. Dezember 2011 12:18
    Moderator
  • Hallo Torsten,

    Klar. Ich habe mich viel mit diesem Problem gegeneinander gesetzt. Leider kenne ich keine andere einfache Lösung. Man konnte VBS Skript verwenden. Oder könnte man eine bestimmte Datei mit OpenXML öffnen, die weiter die gewünschte Datei öffnet.

    $excel = New-Object -ComObject Excel.Application
    $excel.Visible = $true
    $workbook = $excel.Workbooks.OpenXML("c:\tmp\FileOpener.xlsm")
    $workbook.Worksheets(1).Cells(1,1).Value = "C:\tmp\test.xlsx"
    $excel.Run("OpenMyFile")
    $workbook.Saved = $true
    $workbook.Close($false)
    $excel.visible = $true
    


     

    Die Datei sollte dann einen Makro in einem Modul enthalten, der die Datei in der ersten Zelle öffnet. Natürlich kann man weitere öffnen-wichtige Eingabe (wie ReadOnly oder Password) in weiteren Zellen schreiben und bei Open berücksichtigen.

    Public Sub OpenMyFile()
        Workbooks.Open ActiveSheet.Cells(1, 1).Value, , True, , ActiveSheet.Cells(1, 2).Value
    End Sub
    


     

    Viele Grüße,

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Dienstag, 20. Dezember 2011 15:04
    Moderator

Alle Antworten

  • Hallo Torsten,

    ich habe dieses Problem selber getroffen. Es passiert aber nur, wenn man die Excel Datei programmatisch öffnet und - sehr wichtig - es ist nur mit Programmiersprachen wie Delphi oder PowerShell nachstellbar. Wenn man die Datei mit VBA oder VB Skript öffnet, passiert dieses Problem nicht! Es geht hier um einen bekannten Bug im Office 2007 und 2010. Der einzige Workaround, der ich weiß, ist OpenXML statt Open zu verwenden. Hier ist ein Beispiel mit PowerShell Skript:

    $excel = New-Object -ComObject Excel.Application
    $excel.Visible = $true
    $workbook = $excel.Workbooks.OpenXML("c:\tmp\Mappe1.xlsx")

    Viele Grüße,

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Montag, 19. Dezember 2011 12:18
    Moderator
  • Hallo Bogdan,

    vielen Dank für die schnelle Antwort! Die Funktion OpenXML funktioniert einwandfrei. Allerdings kann ich die Funktion Open nicht in allen Fällen durch OpenXML ersetzen. An einer Stelle muss ich den Parameter Editable auf true setzen, um eine Vorlage zum Bearbeiten zu öffnen, anstelle ein neues Dokument auf Basis der Vorlage zu erstellen. An einer anderen Stelle muss ich ein Passwort übergeben. Beides geht so mit OpenXML leider nicht. Hast du zu den beiden Fällen eine Idee?

    Gruß,

    Torsten

    Dienstag, 20. Dezember 2011 09:06
  • Hallo Torsten,

    Klar. Ich habe mich viel mit diesem Problem gegeneinander gesetzt. Leider kenne ich keine andere einfache Lösung. Man konnte VBS Skript verwenden. Oder könnte man eine bestimmte Datei mit OpenXML öffnen, die weiter die gewünschte Datei öffnet.

    $excel = New-Object -ComObject Excel.Application
    $excel.Visible = $true
    $workbook = $excel.Workbooks.OpenXML("c:\tmp\FileOpener.xlsm")
    $workbook.Worksheets(1).Cells(1,1).Value = "C:\tmp\test.xlsx"
    $excel.Run("OpenMyFile")
    $workbook.Saved = $true
    $workbook.Close($false)
    $excel.visible = $true
    


     

    Die Datei sollte dann einen Makro in einem Modul enthalten, der die Datei in der ersten Zelle öffnet. Natürlich kann man weitere öffnen-wichtige Eingabe (wie ReadOnly oder Password) in weiteren Zellen schreiben und bei Open berücksichtigen.

    Public Sub OpenMyFile()
        Workbooks.Open ActiveSheet.Cells(1, 1).Value, , True, , ActiveSheet.Cells(1, 2).Value
    End Sub
    


     

    Viele Grüße,

    Bogdan


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Dienstag, 20. Dezember 2011 15:04
    Moderator
  • Hallo!

    Wenn dieses Verhalten ein bekannten Bug in Office 2007 und 2010 ist, ist denn eine Behebung des Bugs geplant? Die beiden Workarounds sind schon ziemlich abenteuerlich.

     

    Gruß,

    Torsten

    Donnerstag, 22. Dezember 2011 09:35
  • Hallo Torsten,
    inwieweit ich weiß, ist dieses Verhalten als Bug registriert. Weitere Angaben zu diesem Bug geben leider keinen Hinweis, dass der Bug gefixt wird. Man kann aber nicht genau wissen. Ich kann auch nur hoffen, dass er irgendwann gefixt wird…
    Ich glaube, es wäre eine andere Möglichkeit dieses Problem umzugehen: man könnte eine Dummy xlsx Datei mit OpenXML öffnen und weiter in gleicher Excel Instanz die eigentliche Datei mit Open öffnen! Kannst Du das testen?
    $excel = New-Object -ComObject Excel.Application
    $excel.Visible = $true
    $workbook = $excel.Workbooks.OpenXML("c:\tmp\Dummy.xlsx")
    $workbook = $excel.Workbooks.Open("c:\tmp\EigentlicheDatei.xlsx")
    

     
    Danke und viele Grüße,
    Bogdan

    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Donnerstag, 22. Dezember 2011 14:10
    Moderator
  • Hallo Bogdan,

    Leider funktioniert dieser Workaround bei mir nicht wie gewünscht. Anscheinend betrifft der Bug jedes Fenster für sich und nicht die gesamte Instanz. Ich werde mal mit einem Kollegen zusammen prüfen, wie wir das Problem jetzt angehen.

    Gruß,

    Torsten

    Donnerstag, 22. Dezember 2011 14:34