Python openpyxl无法保存具有自定义列宽的现有excel
我正在生成一个带有模板的ExcelPython 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
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版本验证。谢谢