Python openpyxl无法保存具有自定义列宽的现有excel

Python openpyxl无法保存具有自定义列宽的现有excel,python,excel,openpyxl,Python,Excel,Openpyxl,我正在生成一个带有模板的Excel from openpyxl import Workbook from openpyxl import load_workbook src_file = 'D:\\code\\TestLink-Report\\pyxl.xlsx' wb = load_workbook(filename = src_file, guess_types = False) sheet = wb.worksheets[0] sheet.cell('A1').value = 'bla

我正在生成一个带有模板的Excel

from openpyxl import Workbook
from openpyxl import load_workbook

src_file = 'D:\\code\\TestLink-Report\\pyxl.xlsx'
wb = load_workbook(filename = src_file, guess_types = False)

sheet = wb.worksheets[0]
sheet.cell('A1').value = 'blabla'
wb.save(filename =  src_file)
如果src_文件是新的空白文件,那么它就可以工作。 若我手动更改src文件中任何列的宽度,再次运行代码,它将失败

    wb.save(filename =  src_file)
  File "D:\Python27\envs\TestLink\lib\site-packages\openpyxl\workbook.py", line 265, in save
    save_workbook(self, filename)
  File "D:\Python27\envs\TestLink\lib\site-packages\openpyxl\writer\excel.py", line
 187, in save_workbook
    writer.save(filename)
  File "D:\Python27\envs\TestLink\lib\site-packages\openpyxl\writer\excel.py", line
 170, in save
    self.write_data(archive)
  File "D:\Python27\envs\TestLink\lib\site-packages\openpyxl\writer\excel.py", line
 98, in write_data
    self._write_worksheets(archive, shared_string_table, self.style_writer)
  File "D:\Python27\envs\TestLink\lib\site-packages\openpyxl\writer\excel.py", line
 128, in _write_worksheets
    style_writer.get_style_by_hash()))
  File "D:\Python27\envs\TestLink\lib\site-packages\openpyxl\writer\worksheet.py", line 98, in write_worksheet
    write_worksheet_cols(doc, worksheet, style_table)
  File "D:\Python27\envs\TestLink\lib\site-packages\openpyxl\writer\worksheet.py", line 209, in write_worksheet_cols
    col_def['style'] = str(style_table[hash(columndimension.style_index)])
KeyError: 549131827
我正在使用Excel 2013。
在stackoverflow上搜索后,我听说openpyxl不支持样式。但我的问题似乎很简单。

是否可以使用
win32com
作为选项?可以在此处执行简单的列格式设置,如下所示:

from win32com.client import Dispatch

xl = Dispatch("Excel.Application")
filestr = "C:\blah\pytest.xlsx"
wbk = xl.Workbooks.Open(filestr)

wsht = wbk.Sheets(1)
wsht.Range("A1").Value = "Hello World!"
wsht.Columns(1).ColumnWidth = 50
wbk.SaveAs("C:\blah\pytested.xlsx")

xl.Application.Quit()
如果只需要调整列宽,可以将其与openpyxl结合使用


让我们知道这是否有帮助。:)

目前正在
openpyxl
中进行工作,以解决您遇到的错误。1.8和1.9分支当前都将阻止这种情况发生,但生成的Excel文件可能不可用。

此问题已解决

运行此命令以获取最新版本

hg clone https://bitbucket.org/ericgazoni/openpyxl
cd openpyxl/
hg up 1.8
python setup.py develop

我一直不喜欢“Excel.Application”,但似乎没有更好的选择。我以为我有一个很棒的解决方案没有OLE自动化。太棒了!当我问这个问题时,openpyxl是1.x。现在它是2.x,运行良好。已通过2.4.7版本验证。谢谢