Создание новой книги в Excel из разрывов Python - PullRequest
1 голос
/ 14 мая 2010

Я пытаюсь использовать стандартный подход win32com для запуска Excel 2007 из Python. Однако, когда я пытаюсь создать новую рабочую книгу, все становится грушевидным:

Python 2.6.4 (r264:75706, Nov  3 2009, 13:23:17) [MSC v.1500 32 bit (Intel)] on win32
...
>>> import win32com.client
>>> excel = win32com.client.Dispatch("Excel.Application")
>>> wb = excel.Workbooks.Add()

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    wb = excel.Workbooks.Add()
  File "C:\Python26\lib\site-packages\win32com\client\dynamic.py", line 467, in __getattr__
    if self._olerepr_.mapFuncs.has_key(attr): return self._make_method_(attr)
  File "C:\Python26\lib\site-packages\win32com\client\dynamic.py", line 295, in _make_method_
    methodCodeList = self._olerepr_.MakeFuncMethod(self._olerepr_.mapFuncs[name], methodName,0)
  File "C:\Python26\lib\site-packages\win32com\client\build.py", line 297, in MakeFuncMethod
    return self.MakeDispatchFuncMethod(entry, name, bMakeClass)
  File "C:\Python26\lib\site-packages\win32com\client\build.py", line 318, in MakeDispatchFuncMethod
    s = linePrefix + 'def ' + name + '(self' + BuildCallList(fdesc, names, defNamedOptArg, defNamedNotOptArg, defUnnamedArg, defOutArg) + '):'
  File "C:\Python26\lib\site-packages\win32com\client\build.py", line 604, in BuildCallList
    argName = MakePublicAttributeName(argName)
  File "C:\Python26\lib\site-packages\win32com\client\build.py", line 542, in MakePublicAttributeName
    return filter( lambda char: char in valid_identifier_chars, className)
  File "C:\Python26\lib\site-packages\win32com\client\build.py", line 542, in <lambda>
    return filter( lambda char: char in valid_identifier_chars, className)
UnicodeDecodeError: 'ascii' codec can't decode byte 0x83 in position 52: ordinal not in range(128)
>>> 

Что здесь не так? Я что-то сделал глупо, или Python / win32com / Excel как-то сломан?

Ответы [ 2 ]

3 голосов
/ 14 мая 2010

вы можете посмотреть отличные пакеты xl * t на http://www.python -excel.org /

Создание рабочих книг / листов так же просто, как:

import xlwt
from datetime import datetime

wb = xlwt.Workbook()
ws = wb.add_sheet('A Test Sheet')

ws.write(0, 0, 'Test', style0)
ws.write(1, 0, datetime.now(), style1)
ws.write(2, 0, 1)
ws.write(2, 1, 1)
ws.write(2, 2, xlwt.Formula("A3+B3"))

wb.save('example.xls')

И вам не нужно беспокоиться о API win32com .....

Удачи!

Ben

1 голос
/ 14 мая 2010

Я нахожусь на 2.6.3, поэтому я не могу проверить это напрямую, но похоже, что у вас есть какой-то не-ASCII символ в className, а valid_identifier_chars - строка байтов, поэтому это ломает его.

Пара мыслей о том, что нужно проверить:

  • Используете ли вы локализованную версию Excel?
  • Есть ли у вас последняя версия win32com (сообщение об ошибке не совпадает с номерами строк моей версии)?
  • Есть ли у вас более ранняя версия python (например, 2.5), на которой вы можете проверить это, чтобы проверить, не возникла ли эта проблема в 2.6.4?

Если у вас установлена ​​последняя версия win32com, вам стоит попробовать отредактировать build.py и изменить valid_identifier_chars на строку Unicode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...