【问题标题】:openpyxl copy from one workbook to anotheropenpyxl 从一个工作簿复制到另一个
【发布时间】:2018-05-07 06:42:58
【问题描述】:

我正在尝试将单元格从一个工作簿复制到另一个工作簿,以进行一些操作。虽然我能够分配样式/值并将其分配给新工作簿,但我无法分配字体,从现有工作簿填充到新工作簿。 下面是我的代码的sn-p

from openpyxl import load_workbook
from openpyxl import Workbook
File = load_workbook(filename='testcopy.xlsx')
FileSheets = File.get_sheet_names()
AcSheet = File.active

write_file = Workbook()
wr_ac_sheet = write_file.active
wr_ac_sheet['A1'].value = AcSheet['A1'].value
wr_ac_sheet['A1'].style = AcSheet['A1'].style
write_file.save('copied_excel.xlsx')

这很好用,但如果我使用

wr_ac_sheet['A1'].font= AcSheet['A1'].font

我收到以下错误

 File "C:\Python27\lib\site-packages\openpyxl\writer\excel.py", line 90, in write_data
stylesheet = write_stylesheet(self.workbook)
File "C:\Python27\lib\site-packages\openpyxl\styles\stylesheet.py", line 206, in write_stylesheet
stylesheet.fonts = wb._fonts
File "C:\Python27\lib\site-packages\openpyxl\descriptors\sequence.py", line 27, in __set__
seq = [_convert(self.expected_type, value) for value in seq]
File "C:\Python27\lib\site-packages\openpyxl\descriptors\base.py", line 59, in _convert
raise TypeError('expected ' + str(expected_type))
TypeError: expected <class 'openpyxl.styles.fonts.Font'>

如果我尝试打印现有的工作簿字体,我会得到这个,所以它可以正常阅读

print wr_ac_sheet['A1'].font

<openpyxl.styles.fonts.Font object>
Parameters:
name='Calibri', charset=None, family=2.0, b=False, i=False, strike=None, 
outline=None, shadow=None, condense=None, color= 
<openpyxl.styles.colors.Color 
 object>
Parameters:
tint=0.0, auto=None, theme=1L, rgb=None, indexed=None, type='theme', 
extend=None, sz=11.0, u=None, vertAlign=None, scheme='minor'

我想将单元格的所有属性(类似于格式刷)分配给新工作簿,有关如何执行此操作的任何指导?

【问题讨论】:

    标签: python openpyxl


    【解决方案1】:

    作为explained in the documentation,你需要复制样式信息。

    【讨论】:

      【解决方案2】:

      为什么要设置显式样式?

      #!/usr/bin/python3
      # -*- coding: utf8 -*-
      
      import sys
      import openpyxl
      import warnings
      
      warnings.simplefilter("ignore")
      
      xlsxfile = sys.argv[1]
      xlscopy = sys.argv[2]
      
      wb = openpyxl.load_workbook(xlsxfile)
      
      sheet = wb['Sheet1']
      val = sheet['J7'] # set up an initial value, eg. 34
      
      val.value = 2
      wb.save(xlscopy)
      

      这对我来说适用于大型和复杂格式的 XLSX 文件。

      【讨论】:

        猜你喜欢
        • 2017-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-21
        • 2019-07-29
        • 1970-01-01
        相关资源
        最近更新 更多