OpenPyXL + 如何在Excel单元格中搜索内容,并在符合条件时更新内容?

4 投票
2 回答
11009 浏览
提问于 2025-04-18 16:34

我正在做一个Python(使用2.7)项目,目的是在Excel文件中查找一个即将更改的服务器的UNC路径,然后用新的UNC路径更新这个单元格。我对Python还不太熟悉,目前能找到单元格并打印出来,代码是:

def main():
    wb = load_workbook(filename = 'Book1_test.xlsx', use_iterators = True)
    ws = wb.get_sheet_by_name(name = 'Sheet1')

    for row in ws.iter_rows(): 
        for cell in row:
            print cell.value

但是,我不知道怎么用新的字符串更新这个单元格,而且工作簿似乎是只读模式;可能是因为ws只是获取信息。
我在网上找到了很多关于搜索单元格和打印信息的资源,但没有找到如何在找到信息后更新单元格的资料。有很多关于如何创建一个新的工作簿并填充空单元格的信息,还有如何打开一个现有的工作表并在新单元格中插入内容的资料。但我就是找不到我想要的,而且我的技能还不足以自己完成。

这是我的目标,如果有人能帮我,我会非常感激:

  1. 打开工作簿
  2. 遍历单元格,查找UNC路径;作为超链接。
  3. 写入新的UNC路径/公式
    注意:我只想更新链接中引用服务器名称的第一部分。例如,file:///\\enterprise\... 要改成 file:///\\file-server\...
  4. 关闭工作簿

我希望有人能帮我解决的不足之处:

  • 我对for循环的语法理解得不够,无法遍历单元格以查找不特定的内容;也就是说,我不知道怎么在字符串中只搜索一个词。
  • 我应该担心捕捉单元格的编号/坐标吗?
  • 这个问题应该通过遍历单元格、将内容存储到变量中、解析字符串并提取我想要的内容(服务器名称),然后在新服务器名称前后拼接其他信息,最后更新单元格内容来解决吗?

2 个回答

0

你可以通过在两个单元格范围内循环来搜索内容。

for rowOfCellObjects in sheet['A1':'J15']: # You can mention the range here like A1 to A50
    for cellObj in 'rowOfCellObjects':
        print(cellObj.value)
        print(cellObj.coordinate)

更新内容时,可以直接提到单元格的名称。

ws['A1'] = 1
5

Cell对象的.value属性是可以设置的。这意味着你可以随时像这样操作:

cell.value = 'Helloooo ladies'

如果这样做不成功,可能是因为优化器的读取模式有问题。如果需要的话,可以检查一下优化写入模式……我觉得openpyxl的文档非常全面,容易理解。

在单元格中查找信息,或者识别你想要的内容是一个非常开放的问题,可以用成千上万种不同的方法来解决:

  • 检查单元格的全部内容
  • 检查某个子字符串是否包含在单元格中
  • 使用正则表达式进行匹配
  • ...

但这些和openpyxl框架没有直接关系。

撰写回答