gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:27:45 32 4
gpt4 key购买 nike

我正在使用 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com