繁体   English   中英

如何使用`openpyxl`库在Excel中的合并单元格中写入?

[英]How to write in merged cell in Excel using `openpyxl` library?

我正在使用openpyxl库在单独的单元格中写入现有的 Excel 文件。

如何在 Excel 合并单元格中写入一些文本?

错误AttributeError: 'MergedCell' object attribute 'value' is read-only

合并单元格时:

代码:

        wb = openpyxl.load_workbook(filename=src)
        for row in df_short.itertuples():
            ws = wb[row.sheet]
            try:
                cell = 'N'+str(row.id)
                ws[cell] = '=HYPERLINK("%s","#%s")' % (row.txt_path, row.txt)

使用以下代码,其中 ws 是工作表对象。

    ws.cell(cells).value = 'Whatever you want it to be'

用合并块的左上角单元格替换单元格。 我通常将其保留为行和列。 所以 B1 将表示为 row = 1, column = 2。

值后 =

将您想要放置在单元格内的任何字符串或整数。

ws.merged_cells将返回一个包含所有合并单元格位置的列表,例如:

In [6]: mgs = ws.merged_cells

In [7]: mgs
Out[7]: <MultiCellRange [B1:C1 D1:J1 K1:L1 M1:N1]>

In [8]: for ms in mgs:
   ...:     print(ms)
   ...:
B1:C1
D1:J1
K1:L1
M1:N1

如果要为合并的单元格设置新值,则必须先取消合并,然后更改第一个子单元格的值,最后再次合并它们。 一个完整的例子:

In [1]: import openpyxl

In [2]: wb = openpyxl.load_workbook('demo.xlsx')

In [3]: ws = wb.active

In [4]: m_cells = ws.merged_cells

In [5]: m_cells
Out[5]: <MultiCellRange [B1:C1 D1:J1 K1:L1 M1:N1]>

In [6]: coo = m_cells.ranges[0].coord

In [7]: coo
Out[7]: 'B1:C1'

In [8]: ws.unmerge_cells(coo)

In [9]: ws['B1'] = 'New Value'

In [10]: ws.merge_cells(coo)

附加信息:

ws.merged_cells将返回MultiCellRange类型的对象,但不会返回列表,您应该使用.ranges属性来获取包含CellRange类型的对象的列表。

无法在ws.unmerge_cells()使用CellRange类型的对象,您必须使用.coord属性来获取ws.unmerge_cells(str)可以调用的str类型。

包装功能

def mod_cell(merged_cell, new_value):
    """
    Set new value to a merged_cell
    :param merged_cell: Merged cell to modify, ws.merged_cells.ranges[x]
    :param new_value: New value
    :return:
    """
    # Unmerge
    coo = merged_cell.coord
    ws.unmerge_cells(coo)
    # Set new value to the first sub-cell
    first_cell = ws.cell(row=merged_cell.left[0][0], column=merged_cell.left[0][1])
    first_cell.value = new_value
    # Merge again
    ws.merge_cells(coo)

如果您愿意使用另一个 excel 库,那么xlwings不会遇到您的问题,它可以让 Python 控制 excel。 xlwings 与 openpyxl 阅读 Excel 工作簿之间的差异 注意xlwings需要在您的计算机上安装 Excel,而openpyxl不需要。

下面设置已经合并的单元格 A1 的值,没有问题。

import xlwings as xw

wb = xw.Book('myproject.xlsm')
sh = wb.sheets[0]
sh.range('A1').value = 'hello'

结果:

在此处输入图片说明

我在 python3.5 中对 conda 环境有这个确切的错误和解决方案是

conda install -c conda-forge openpyxl=2.5.14 -y

同样对于 pip3 环境:

pip3 install openpyxl==2.5.14 -y

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM