win32com Excel erlaubt kein Semikolon in Value/Formeln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
zeroSascha
User
Beiträge: 2
Registriert: Donnerstag 4. Mai 2017, 12:03

Guten Tag zusammen,

ich habe ein Problem mit der win32com Schnittstelle in Excel, was die Eingabe von Formeln angeht.

Möchte ich z.B. in eine Zelle folgende Formel eintragen:

Code: Alles auswählen

ws.Cells(1,1).Formula = '=ANZAHL(B42:B45;C42:C45)'
so funktioniert das Ganze nicht aufgrund des Semicolons innerhalb des Strings.

Dagegen funktioniert die alte Excelschreibweise mit Kommata ohne Probleme:

Code: Alles auswählen

ws.Cells(1,1).Formula = '=ANZAHL(B42:B45,C42:C45)'
Es scheint so, dass win32com den String selbst parst und bei einem darin beinhalteten Semikolon sofort mit folgender Fehlermeldung abbricht:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\excelscript\changer_win32.py", line 32, in <module>
    ws.Cells(1,1).Formula = '=ANZAHL(B42:B45;C42:C45)'
  File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 482, in __setattr__
    self._oleobj_.Invoke(*(args + (value,) + defArgs))
com_error: (-2147352567, 'Ausnahmefehler aufgetreten.', (0, None, None, None, 0, -2146827284), None)
Doof nur, dass Excel nur die Semikolons als Trenner unterstützt, ausser man hat vorher in den Regionseinstellung etwas anderes eingestellt.

Kennt jemand das Problem und eine Lösung um das Ganze zu umgehen?

P.S.: Clientspezifisch auf Kommata umzustellen ist leider keine Option, da die Excel durch unterschiedlichste Anwender gelesen/bearbeitet werden muss.
Zuletzt geändert von Anonymous am Donnerstag 4. Mai 2017, 12:45, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@zeroSascha: win32com parst gar nichts, das ist schon Excel, das da einen Fehler meldet; Du verwendest nur die Property Formula falsch. Da Excel alle möglichen Spracheinstellungen zuläßt und man als Macro-Programmierer diesen Quatsch nicht mitmachen will, erwartet Formula die Formeln in der Standardsprache Englisch:

Code: Alles auswählen

ws.Cells(1,1).Formula = '=COUNT(B42:B45,C42:C45)'
Das ist gut so, und Du solltest Dich freuen, da die Formeln eben nicht von den lokalen Einstellungen abhängen. Die deutschen Funktionsnamen funktionieren übrigens nicht, Du bekommst zwar keinen Fehler, aber die Funktion wird auch nicht richtig aufgelöst.
zeroSascha
User
Beiträge: 2
Registriert: Donnerstag 4. Mai 2017, 12:03

Hey Sirius,

vielen Dank für deine Hilfe - hat jetzt so ohne weiteres geklappt.

Deine Erklärung ist auch absolut einleuchtend - was mich halt vorab irritiert hat, ist dass z.B.

Code: Alles auswählen

ws.Cells(1,1).Formula = '=ANZAHL(B42:B45)'
ohne weiteres funktioniert!

Aber jetzt weiss ich ja bescheid :)
Antworten