如何使用 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() 将其缩短一两步,但我会把它留给您想象力。
我有一个 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() 将其缩短一两步,但我会把它留给您想象力。