使用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
提交
取消