簡體   English   中英

從Python中創建Excel中的新工作簿

[英]Creating a new workbook in Excel from Python breaks

我試圖使用股票標准win32com方法從Python驅動Excel 2007。 但是,當我嘗試創建一個新工作簿時,事情會變成梨形:

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以某種方式破壞了?

你可能想看看http://www.python-excel.org/上的優秀xl * t軟件包

創建工作簿/工作表非常簡單:

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')

而且您不必為win32com api而煩惱.....

祝好運 !!

我在2.6.3,所以我無法直接檢查,但看起來你在className有一個非ASCII字符,而且valid_identifier_chars是一個字節字符串,所以這打破了它。

關於要檢查的事情的幾點想法:

  • 您使用的是本地化版本的Excel嗎?
  • 您是否擁有最新版本的win32com(錯誤消息與我的版本的行號完全不一致)?
  • 你有一個早期版本的python(例如2.5),你可以測試它,看看它是否是2.6.4中引入的問題?

如果您確實擁有最新版本的win32com,那么嘗試編寫build.py並將valid_identifier_chars更改為Unicode字符串是個valid_identifier_chars的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM