OpenPyXL + 如何在Excel单元格中搜索内容,并在符合条件时更新内容?
我正在做一个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只是获取信息。
我在网上找到了很多关于搜索单元格和打印信息的资源,但没有找到如何在找到信息后更新单元格的资料。有很多关于如何创建一个新的工作簿并填充空单元格的信息,还有如何打开一个现有的工作表并在新单元格中插入内容的资料。但我就是找不到我想要的,而且我的技能还不足以自己完成。
这是我的目标,如果有人能帮我,我会非常感激:
- 打开工作簿
- 遍历单元格,查找UNC路径;作为超链接。
- 写入新的UNC路径/公式
注意:我只想更新链接中引用服务器名称的第一部分。例如,file:///\\enterprise\... 要改成 file:///\\file-server\... - 关闭工作簿
我希望有人能帮我解决的不足之处:
- 我对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框架没有直接关系。