使用python的xlrd,xlwt和xlutils.copy保留樣式我正在使用xlrd,xlutils.copy并xlwt打開模板文件,復(fù)制它,用新值填充它并保存。但是,似乎沒有任何簡(jiǎn)單的方法來保留單元格的格式; 它總是被吹走,并被設(shè)置為空白。有什么簡(jiǎn)單的方法可以做到這一點(diǎn)嗎?謝謝!/ 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 回答

慕標(biāo)琳琳
TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
這有兩個(gè)部分。
首先,您必須在打開源工作簿時(shí)啟用格式信息的讀取。然后,復(fù)制操作將復(fù)制格式。
import xlrdimport xlutils.copy inBook = xlrd.open_workbook('input.xls', formatting_info=True)outBook = xlutils.copy.copy(inBook)
其次,您必須處理這樣一個(gè)事實(shí),即更改單元格值會(huì)重置該單元格的格式。
這不太漂亮; 我使用以下hack手動(dòng)復(fù)制格式索引(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')
這幾乎保留了所有格式。但是,單元格注釋不會(huì)被復(fù)制。
添加回答
舉報(bào)
0/150
提交
取消