使用OpenPyXL迭代工作表和单元格,并使用contantenated字符串更新单元格

Tel*_*der 5 python excel openpyxl

我想使用OpenPyXL来搜索工作簿,但我遇到了一些我希望有人可以提供帮助的问题.

以下是一些障碍/待办事项:

  • 我有一个未知数量的床单和细胞
  • 我想搜索工作簿并将工作表名称放在一个数组中
  • 我想遍历每个数组项并搜索包含特定字符串的单元格
  • 我有具有引用旧服务器的UNC路径的单元格.我需要提取UNC路径中服务器名称后的所有文本,更新服务器名称,并将剩余的文本连接回服务器名称,
    例如\ file-server\blah\blah\blah.xlsx; extract\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()
Run Code Online (Sandbox Code Playgroud)

-----------------------更新-------------------------

我能够搜索单元格并从单元格中提取服务器名称,但是我无法保存电子表格,因为我处于只读模式.当我尝试切换到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()
Run Code Online (Sandbox Code Playgroud)

有谁知道如何更新单元格内容?

小智 2

我认为您无法更新单元格内容。您可以打开一个文件进行读取,或打开一个新文件进行写入。我认为您必须创建一个新的工作簿,并且您读取的每个单元格,如果您选择不修改它,请将其写出到您的新工作簿中。在示例代码中,您将使用 wb(用于写入)覆盖 wb(用于读取)。将其从 for 循环中拉出,为其指定一个不同的名称。