使用python的xlrd,xlwt和xlutils.copy保留样式

使用python的xlrd,xlwt和xlutils.copy保留样式

我正在使用xlrdxlutils.copyxlwt打开模板文件,复制它,用新值填充它并保存。

但是,似乎没有任何简单的方法来保留单元格的格式; 它总是被吹走,并被设置为空白。有什么简单的方法可以做到这一点吗?

谢谢!/ 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.1

  • xlwt:0.7.2


慕慕森
浏览 6108回答 2
2回答

慕标琳琳

这有两个部分。首先,您必须在打开源工作簿时启用格式信息的读取。然后,复制操作将复制格式。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')这几乎保留了所有格式。但是,单元格注释不会被复制。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python