【问题标题】:How to find cell in a column that contains a string and return value of a cell in another of row?如何在包含字符串的列中查找单元格并返回另一行中单元格的值?
【发布时间】:2021-10-28 12:41:45
【问题描述】:

如果单元格包含来自C 列的"external",则将单元格"good" 从D 列复制到E 列中,在A 列包含003 的行中。

下面是excel中的两张图片(之前和之后)。

之前:

之后:

我试图找到一个正确的脚本,但没有成功。它需要更改为我放置“???”的“行”和“列” :

import openpyxl
from openpyxl import load_workbook
wb_source = openpyxl.load_workbook("path/file.xlsx")
sheet = wb_source['Sheet1']
x=sheet.max_row
y=sheet.max_column

for r in range(1, x+1) :
   for j in range(1, y+1):
       copy(sheet.cell(row= ???, column=???)
         if str(copy.value)=="external":
         sheet.??
         break
wb_source.save("path/file2.xlsx")

应该如何添加它们(行和列)?

【问题讨论】:

  • 为什么您的示例中的单元格E3 的值是"good"?根据您的解释,只有在其 C 列中具有 "external" 的行才应该复制一个值。此外,特别是他们的A 列中也有003,但我们也可以看到您在其他A-column 值上执行相同操作。
  • @HampusLarsson - 很抱歉表达错误。因为在A 列中有两个包含相同的数字(003 和003)。一个人可以是外在的,也可以是内在的。我想将C 列中的值返回到E 列,这两种类型(internal 和external)具有相同的数字。这将必须返回两行中的值,而不是一行。

标签: python excel openpyxl


【解决方案1】:
  1. 阅读整张纸。
  2. 为外部产品创建字典
  3. 写回 Excel。

试试:

import openpyxl
wb = openpyxl.load_workbook("file1.xlsx")
ws = wb['Sheet1']

data = list()
for r, row in enumerate(ws.iter_rows()):
    data.append([cell.value for c, cell in enumerate(row)])
mapper = {l[0]: l[-1] for l in data if l[2]=="external"}

for r, row in enumerate(ws.iter_rows()):
    if ws.cell(r+1, 1).value in mapper:
        ws.cell(r+1, 5).value = mapper[ws.cell(r+1, 1).value]
wb.save("file2.xlsx")

【讨论】:

  • 感谢您编写脚本。它几乎解决了,但我必须返回两行上的值(如第二张图所示),其中有相同的数字(即 A3 和 A4 , A5 和 A8 , A9和A11)
  • @Thomas - 查看编辑。
  • 非常好。有效。非常感谢!!
猜你喜欢
  • 1970-01-01
  • 2022-10-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 2021-10-10
相关资源
最近更新 更多