使用python的xlrd,xlwt和xlutils.copy保留样式我正在使用xlrd,xlutils.copy并xlwt打开模板文件,复制它,用新值填充它并保存。但是,似乎没有任何简单的方法来保留单元格的格式; 它总是被吹走,并被设置为空白。有什么简单的方法可以做到这一点吗?谢谢!/ YGA示例脚本:from xlrd import open_workbookfrom xlutils.copy import copy
rb = open_workbook('output_template.xls',formatting_info=True)rs = rb.sheet_by_index(0)wb = copy(rb)ws = wb.get_sheet(0)for i,cell in enumerate(rs.col(8)):
if not i:
continue
ws.write(i,2,22,plain)wb.save('output.xls')版本:xlrd:0.7.1xlwt:0.7.2
2 回答
慕标琳琳
TA贡献1830条经验 获得超9个赞
这有两个部分。
首先,您必须在打开源工作簿时启用格式信息的读取。然后,复制操作将复制格式。
import xlrdimport xlutils.copy
inBook = xlrd.open_workbook('input.xls', formatting_info=True)outBook = xlutils.copy.copy(inBook)其次,您必须处理这样一个事实,即更改单元格值会重置该单元格的格式。
这不太漂亮; 我使用以下hack手动复制格式索引(xf_idx):
def _getOutCell(outSheet, colIndex, rowIndex):
""" HACK: Extract the internal xlwt cell representation. """
row = outSheet._Worksheet__rows.get(rowIndex)
if not row: return None
cell = row._Row__cells.get(colIndex)
return celldef setOutCell(outSheet, col, row, value):
""" Change cell value without changing formatting. """
# HACK to retain cell style.
previousCell = _getOutCell(outSheet, col, row)
# END HACK, PART I
outSheet.write(row, col, value)
# HACK, PART II
if previousCell:
newCell = _getOutCell(outSheet, col, row)
if newCell:
newCell.xf_idx = previousCell.xf_idx # END HACKoutSheet = outBook.get_sheet(0)setOutCell(outSheet, 5, 5, 'Test')outBook.save('output.xls')这几乎保留了所有格式。但是,单元格注释不会被复制。
添加回答
举报
0/150
提交
取消
