如何使用 Python 和 openpyxl 仅在 Excel 中粘贴值

How to paste values only in Excel using Python and openpyxl

我有一个 Excel 工作表。 在 J 列中,我有一些源数据,用于在 K 列中进行计算。 K 列有我需要的值,但是当我点击一个单元格时,公式就会出现。 我只想要 K 列的值,而不是公式。 我在某处读到我需要设置 data only=True,我已经完成了。 然后,我将数据从 K 列粘贴到 L 列(打算稍后删除 J 列和 K 列)。 我以为 L 列将只有 K 的值,但如果我单击一个单元格,公式仍然会显示。 如何简单地将值从一列粘贴到另一列?

import openpyxl
wb = openpyxl.load_workbook('edited4.xlsx', data_only=True)
sheet = wb['Sheet1']

last_row = 100  
for i in range(2, last_row):
    cell = "K" + str(i)
    a_cell = "J" + str(i)
    sheet[cell] = '=IF(' + a_cell + '="R","Yes","No")'

rangeselected = []
for i in range (1, 100,1):
    rangeselected.append(sheet.cell(row = i, column = 11).value)
for i in range (1, 1000,1):
   sheet.cell(row=i, column=12).value = rangeselected[i-1]

wb.save('edited4.xlsx')

好久没用openpyxl了。但是:

Openpyxl 没有 运行 Excel 公式。它读取公式字符串或 Excel* 最后一次计算 运行 的结果。这意味着如果计算是在 Excel 之外创建的,并且文件从未被 Excel 打开,则只有公式可用。除非您需要显示(出于历史目的等)公式是什么,否则您应该在 Python 中进行计算 - 无论如何这样会更快更有效。

* 当我说 Excel 时,我还包括任何 Excel 类传播 sheet,它将缓存最后一个 运行.[=11= 的结果]

试试这个(根据需要调整列号):

import openpyxl
wb = openpyxl.load_workbook('edited4.xlsx', data_only=True)
sheet = wb['Sheet1']

last_row = 100  
data_column = 11
test_column = 12
result_column = 13

for i in range(2, last_row):
    if sheet.cell(row=i, column=test_column).value == "R":
        sheet.cell(row=i, column=result_column).value = "Yes"
    else:
        sheet.cell(row=i, column=result_column).value = "No"

wb.save('edited4.xlsx')

如果您有格式良好的数据 sheet,您可能可以通过使用 enumerate() 和 Worksheet.iter_rows() 将其缩短一两步,但我会把它留给您想象力。