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

Posted

技术标签:

【中文标题】如何使用`openpyxl`库在Excel中的合并单元格中写入?【英文标题】:How to write in merged cell in Excel using `openpyxl` library? 【发布时间】:2019-12-10 05:38:11 【问题描述】:

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

【问题讨论】:

您可以尝试先取消合并单元格,然后设置值,然后将它们重新合并在一起? openpyxl.readthedocs.io/en/latest/… 或者,尝试引用单个顶部/最左侧的单元格,例如 ws.cells(row=1, column=1).value = ...(显然,替换为正确的行/列值)。 好主意!何提前检查特定单元格是否合并? 如果你总是写到顶部/左侧cell,我认为你不需要费心检查它是否被合并。但是你可以在这里看到一些建议:***.com/questions/39574991/… 【参考方案1】:

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

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

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

值之后=

将任何字符串或整数放入单元格中。

【讨论】:

【参考方案2】:

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

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

同样适用于 pip3 环境:

pip3 install openpyxl==2.5.14 -y

【讨论】:

【参考方案3】:

如果您愿意使用其他 excel 库,那么您的问题不会遇到 xlwings 让 Python 控制 excel。 Differences between xlwings vs openpyxl Reading Excel Workbooks。注意xlwings 需要在您的计算机上安装 Excel,而 openpyxl 不需要。

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

import xlwings as xw

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

结果:

【讨论】:

以上是关于如何使用`openpyxl`库在Excel中的合并单元格中写入?的主要内容,如果未能解决你的问题,请参考以下文章

Openpyxl:将单元格与 x y 合并。如何将 id 转换为 Excel 列字母?

Python:openpyxl这一篇就够了

如何用Python合并excel表中的重复内容

如何使用openpyxl删除excel中的第一行

Python-openpyxl对excel取消/合并单元格,以及修改单元格值

Pandas读取excel合并单元格的正确姿势(openpyxl合并单元格拆分并填充内容)