簡體   English   中英

使用 openpyxl 在 Excel 工作表中的單元格中搜索字符串

[英]Search a cell for a string in Excel sheet using openpyxl

我需要刪除 Excel 電子表格中有一些不必要的行。 Excel 工作表總是在我希望使用 openpyxl 刪除的報告末尾生成行。 一個示例單元格是Report Generated By: NAME

我已經嘗試過了,但收到了“TypeError:'NoneType' 類型的參數不可迭代”錯誤。 這是我的代碼:

import openpyxl as xl
import os
filename = "1615449726873.xlsx"

wb = xl.load_workbook(filename)
sheet = wb[os.path.splitext(filename)[0]]

for row in range(2, sheet.max_row +1):
    if 'Report Generated By  :' in sheet.cell(row, 1).value:
        sheet.delete_rows(row, 1)

wb.save("testing.xlsx")

我已經成功地刪除了帶有 == 字符串的單元格(見下文),但是,工作表也有具有動態內容的單元格,所以我需要 CONTAINS 而不是 EQUAL TO 才能正常工作。 此代碼有效:

for row in range(2, sheet.max_row +1):
    if sheet.cell(row, 1).value is == 'Report Generated On:':
        sheet.delete_rows(row, 1)

有人可以解釋為什么第二個示例有效,但第一個示例無效嗎?

我認為問題在於空單元格正在返回 NoneType。 您可以解決我將單元格值轉換為這樣的字符串的問題

for row in range(2, sheet.max_row +1):
    if 'Report Generated By  :' in str(sheet.cell(row, 1).value):
        sheet.delete_rows(row, 1)

wb.save("testing.xlsx")

問題是您假設所有單元格都有值字符串,但它們可能是數字、日期時間或無。

此外,當從工作表頂部刪除行時,您的計數器將變得不准確,最好從底部執行此操作。

for idx in range(sheet.max_row, 0, -1):
    cell = ws.cell(idx, 1)
    if cell.value and "Report Generated By  :" in cell.value:
        sheet.delete_rows(idx)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM