我一直在尝试将单元格从一个工作簿复制到另一个工作簿,但格式设置失败。我试过许多建议,但都不管用
我试过:
def copyCellStyle(new_cell,cell):
new_cell.font = copy(cell.font)
new_cell.border = copy(cell.border)
new_cell.fill = copy(cell.fill)
new_cell.number_format = copy(cell.number_format)
new_cell.protection = copy(cell.protection)
new_cell.alignment = copy(cell.alignment)
然后像这样使用它:
new_cell.value=old_cell.value
copyCellStyle(new_cell,old_cell)
它运行时没有错误,但作业未完成
我在styles类中的其他方法中遇到错误。 什么时候
new_cell._style = copy(old_cell._style)
保存复制的文件时出现此错误时使用此选项
Traceback (most recent call last):
File "C:\Python Programs\test\test2.py", line 40, in <module>
wb2.save("Test3.xlsx")
File "C:\Anaconda3\lib\site-packages\openpyxl\workbook\workbook.py", line 392, in save
save_workbook(self, filename)
File "C:\Anaconda3\lib\site-packages\openpyxl\writer\excel.py", line 293, in save_workbook
writer.save()
File "C:\Anaconda3\lib\site-packages\openpyxl\writer\excel.py", line 275, in save
self.write_data()
File "C:\Anaconda3\lib\site-packages\openpyxl\writer\excel.py", line 84, in write_data
stylesheet = write_stylesheet(self.workbook)
File "C:\Anaconda3\lib\site-packages\openpyxl\styles\stylesheet.py", line 240, in write_stylesheet
xf.alignment = wb._alignments[style.alignmentId]
IndexError: list index out of range
当我检查单元格是否有如下样式时:
Traceback (most recent call last)
File "C:\Python Programs\test\test2.py", line 37, in <module>
if cell.has_style:
AttributeError: module 'openpyxl.cell' has no attribute 'has_style'
我正在使用Python3.x
有谁能告诉我一个有效的方法来实现这一点吗
提前谢谢
您需要了解
copy(cell._style)
如何理解该异常。在幕后,每个openpyxl
工作簿都有不同样式的受保护属性。例如,属性_alignments
将保存一个带有工作簿中对齐的list
,例如:_style
是一个列表,仅通过索引引用所述属性,例如:因此,让我们以没有应用对齐样式的工作簿为例。在这种情况下,工作簿的
_alignments
列表属性将只有一项是default(空)对齐方式,因此:len(new_workbook._alignments) == 1
当您
copy(cell._style)
访问新工作簿时,它会尝试通过引用受保护的属性样式(路线、边框等)来获取其新样式。但是,由于新工作簿没有样式,引用_alignment[1]
将引发IndexError
,因为新工作簿列表上只有一个项目,即默认项目(存储在_alignments[0]
)你最初的方法是正确的。如果要将复制到新工作簿,则应在工作表的单元格上迭代,然后复制值和各个样式:
试图复制到新工作簿时,
_style
方法将不起作用,并且在可以使用workbook.copy_worksheet
(documentation)的同一工作簿中不需要该方法相关问题 更多 >
编程相关推荐