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

标签 python xlrd xlwt

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

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

谢谢! /YGA

一个示例脚本:

from xlrd import open_workbook
from 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

最佳答案

这有两个部分。

首先,您必须在打开源工作簿时启用读取格式信息。复制操作将复制格式。

import xlrd
import xlutils.copy

inBook = xlrd.open_workbook('input.xls', formatting_info=True)
outBook = xlutils.copy.copy(inBook)

其次,您必须处理更改单元格值会重置该单元格格式的事实。

这不太漂亮;我使用以下技巧手动复制格式索引(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 cell

def 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 HACK

outSheet = outBook.get_sheet(0)
setOutCell(outSheet, 5, 5, 'Test')
outBook.save('output.xls')

这会保留几乎所有的格式。不过,单元格注释不会被复制。

关于python - 使用 python 的 xlrd、xlwt 和 xlutils.copy 保留样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3723793/

相关文章:

python - 将 CSV 解析为 Pytorch 张量

python - 从 python-2.5 升级到 2.7 时带有 HTTPS 回归的 urllib2.ProxyHandler

python - 使用 Chrome 时出现 Selenium "selenium.common.exceptions.NoSuchElementException"

python xlrd - 从工作表中检索列索引

python - Python xlwt模块中的Excel组合框

python距离公式坐标平面误差

Python xlrd 在将 xlsx 转换为 csv 时保存 float 而不是整数

python - 使用 xlwt 将超链接添加到带有文本的单元格

python - python包pyExcelerator/xlwt将特殊字符写入excel表格

python - 使用 xlrd,从 excel 中获取整数列表