簡體   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