【问题标题】:Using openpyxl to find rows that contain cell with specific value使用 openpyxl 查找包含具有特定值的单元格的行
【发布时间】:2021-07-08 19:44:17
【问题描述】:

我对@9​​87654323@ 完全陌生,所以,正如你想象的那样,当我尝试使用它时,我遇到了相当困难的时期。

我有一个 Excel 报告,其中仅包含一张表(称为 Sheet1)。我想在所有单元格中搜索包含特定字符串(在本例中为产品名称 ABC)的单元格。

然后我想复制包含带有ABC 产品名称的单元格的行中每个单元格的内容。并将每个单元格分配给一个变量。

为了让您更好地了解我想要实现的目标,我给您举个例子:

所以在这种情况下,我只会复制行中的单元格:2、4、6(因为它们只包含ABC 产品)。

我已经查找过类似的问题和答案,但我不明白(以前从未使用过 Excel)。

【问题讨论】:

    标签: python excel openpyxl


    【解决方案1】:

    没有必要为此使用熊猫。

    from openpyxl import Workbook
    import openpyxl
    
    file = "enter_path_to_file_here"
    wb = openpyxl.load_workbook(file, read_only=True)
    ws = wb.active
    
    for row in ws.iter_rows("E"):
        for cell in row:
            if cell.value == "ABC":
                print(ws.cell(row=cell.row, column=2).value) #change column number for any cell value you want
    

    【讨论】:

      【解决方案2】:

      使用 openpyxl 来做这件事对你来说很重要吗?如果没有,我建议使用熊猫。

          import pandas as pd
      
          df = pd.read_excel("path_to_excel_file")
          df_abc = df[df["Products"] == "ABC"] # this will only contain 2,4,6 rows
      

      然后:

          for row in df_abc.iterrows():
              # do what you want with the row 
      

      【讨论】:

      • 非常感谢。 Pandas 解决了这个问题,但现在我不知道如何访问在第一步中选择的单行。它选择了第 2、4、6 行,因为它们有 ABC 产品,但现在我想单独访问第 2、4、6 行并将它们包含的单元格分配给变量。你知道如何处理这一步吗?
      【解决方案3】:
      from openpyxl import load_workbook
      
      wb = load_workbook("report.xlsx")
      ws = wb.active
      
      for row in ws.rows:
      if row[4].value == "ABC":
          for cell in row:
              print(cell.value, end=" ")
          print()
      

      【讨论】:

      • 与第一个解决方案一样好。产生另一个问题 - 不知道如何分别访问选定的行。
      【解决方案4】:
      wb = load_workbook("report.xlsx")
      ws = wb.active
      
      abc_rows=[]
      
      for row in range(2,ws.max_row+1):
          if(ws[row][4]=='ABC'):
             abc_rows.append(row)
      

      要单独访问选定的行,请进一步添加此代码

      i=1
      abc_dict={}
      for row in ws.values:
          if(i in abc_rows):
              (a,b,c,d,e,f,g,h,i,j,k,l)=row
               abc_dict[i]=row
          i=i+1  
      

      要单独访问选定的行,请使用

      abc_dict[2] 将整个第二行作为元组给出,而 abc_dict[2][0] 给出 第一个单元格值。您可以解析直到 abc_dict[2][11] 以获取每个单元格 选择的行分开。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-26
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        相关资源
        最近更新 更多