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

时间:2014-08-11 16:11:59

标签: python excel openpyxl

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

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

  • 我有一张未知数量的床单和细胞
  • 我想搜索工作簿并将工作表名称放在数组中
  • 我想遍历每个数组项并搜索包含特定字符串的单元格
  • 我的单元格带有引用旧服务器的UNC路径。我需要提取UNC路径中服务器名称后的所有文本,更新服务器名称,并将剩余的文本连接回服务器名称上 的 e.g。 \文件服务器\等等\等等\ 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()

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

我能够搜索单元格并从单元格中提取服务器名称,但是我无法保存电子表格,因为我处于只读模式。当我尝试切换到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 个答案:

答案 0 :(得分:2)

为什么不阅读文档?如果您只是打开没有标记的工作簿,则可以编辑它。

这是OpenPyXL + How can I search for content in a cell in Excel, and if the content matches the search criteria update the content?

的副本

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您可以更新单元格中的内容。您需要指定一个值:

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')   

答案 3 :(得分:-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'