使用OpenPyXL遍历工作表和单元格,并更新单元格为拼接字符串
我想用OpenPyXL来查找一个工作簿里的内容,但遇到了一些问题,希望有人能帮我。
以下是我面临的一些困难和待办事项:
- 我有不确定数量的工作表和单元格
- 我想在工作簿中查找,并把工作表的名字放到一个数组里
- 我想遍历这个数组中的每个项目,查找包含特定字符串的单元格
- 我有一些单元格里有UNC路径,指向一个旧服务器。我需要提取服务器名称后面的所有文本,更新服务器名称,然后把剩下的文本加回到新的服务器名称后面。
例如:\file-server\blah\blah\blah.xlsx; 提取 \file-server\; 用 \file-server1\ 替换; 然后把剩下的 blah\blah\blah.xlsx 放到新的名称后面。 - 保存xlsx文档
我刚开始学Python,所以有人能给我指个方向吗?如果能提供示例代码就更好了,因为到目前为止我只会在已知的工作簿和已知的工作表名中查找,然后打印数据。我不知道在遍历工作表和单元格时如何使用通配符。
这是我用来显示单元格内容的代码:
from openpyxl import load_workbook, worksheet
def main():
#read workbook to get data
wb = load_workbook(filename = 'Book1_test.xlsx', use_iterators = True)
ws = wb.get_sheet_by_name(name = 'Sheet1')
#ws = wb.worksheets
#Iterate through worksheet and print cell contents
for row in ws.iter_rows():
for cell in row:
print cell.value
#Iterate through workbook & print worksheets
#for sheet in wb.worksheets:
# print sheet
if __name__ == '__main__':
main()
-----------------------更新-------------------------
我能在单元格中查找并提取服务器名称,但我无法保存电子表格,因为我处于只读模式。当我尝试切换到optimized_write=True时,出现了错误:
AttributeError: 'ReadOnlyCell'对象没有'upper'这个属性
这是我的代码:
from openpyxl import load_workbook, worksheet, Workbook
def main():
#read workbook to get data
wb = load_workbook(filename = 'Book1_test.xlsx', use_iterators = True)
ws = wb.get_sheet_by_name(name = 'Sheet1')
#ws = wb.worksheets
#Iterate through worksheet and print cell contents
for row in ws.iter_rows():
for cell in row:
cellContent = str(cell.value)
#Scans the first 14 characters of the string for the server name
if cellContent[:14] == '\\\\file-server\\':
#open workbook in write mode?
wb = Workbook(optimized_write=True)
ws = wb.create_sheet()
#update cell content
ws[cell] = '\\\\file-server1\\' + cellContent[14:]
print cellContent[:14]
#save workbooks
wb.save('Book1_test.xlsx')
if __name__ == '__main__':
main()
有人知道怎么更新单元格内容吗?
4 个回答
-1
像这样按行处理(只是个想法)是可行的:
sheet = wb.create_sheet(index = 1, title = 'Hipster') # name of the obj. sheet
for counter in range(1,11):
sheet['A'+ str(counter)] = 'Hola'
2
你可以更新单元格里的内容。你需要给它一个新的值:
workBook = load_workbook('example.xlsx')
sheet = workBook.get_sheet_by_name('sheet')
a = sheet.cell(row=i,column=j)
a.value = 'nuevo valor'
然后保存这个更改:
workBook.save('example.xlsx')
4
你为什么不看看文档呢?如果你直接打开工作簿而不加任何标志,你是可以编辑它的。
2
我觉得你不能直接更新单元格的内容。你可以打开一个文件来读取,或者打开一个新文件来写入。
我想你需要创建一个新的工作簿,然后每个你读取的单元格,如果你选择不修改它,就把它写到你新的工作簿里。在你的示例代码中,你把用来读取的wb覆盖成了用来写入的wb。把它从循环中拿出来,给它起个不同的名字。