[英]How to read merged cell values of an excel file with openpyxl / python?
[英]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.