首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OpenPyXL迭代工作表和单元格,并使用内容字符串更新单元格。

使用OpenPyXL迭代工作表和单元格,并使用内容字符串更新单元格。
EN

Stack Overflow用户
提问于 2014-08-11 16:11:59
回答 4查看 36.7K关注 0票数 5

我想使用OpenPyXL搜索一个工作簿,但我遇到了一些问题,我希望有人能帮助我。

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

  • 我有一个未知数量的床单和电池
  • 我想搜索工作簿,并将工作表名称放在数组中。
  • 我想循环遍历每个数组项,并搜索包含特定字符串的单元格。
  • 我有引用旧服务器的UNC路径的单元格。我需要提取UNC路径中服务器名称之后的所有文本,更新服务器名称,并将剩余的文本恢复到服务器名上。 例如\file-server\blah\blah\blh.xlsx;解压缩\file-server\;替换为\file-server 1\;将剩余的blah\blah\blah.xlsx放在新名称之后。
  • 保存xlsx文档

我是Python新手,所以有人能为我指明正确的方向吗?示例代码是值得赞赏的,因为我现在所知道的就是在已知的工作簿中搜索已知的工作表名,然后打印数据。我不知道在迭代工作表和单元格时如何包含通配符。

我为显示单元格内容所做的事情:

代码语言:javascript
复制
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‘对象没有属性’ReadOnlyCell‘

这是我的密码:

代码语言:javascript
复制
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()

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-11 17:28:58

我认为你不能更新单元格内容。您可以打开要读取的文件,也可以打开要写入的新文件。我认为你必须创建一个新的工作簿,你读的每个单元格,如果你选择不修改它,把它写到你的新工作簿。在您的示例代码中,您正在用wb (用于编写)覆盖wb (用于读取)。从for循环中提取它,为它指定一个不同的名称。

票数 2
EN

Stack Overflow用户

发布于 2014-08-11 19:39:37

你为什么不看文件呢?如果您只是打开没有标志的工作簿,就可以编辑它。

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

票数 4
EN

Stack Overflow用户

发布于 2016-04-11 19:16:57

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

代码语言:javascript
复制
workBook = load_workbook('example.xlsx')
sheet = workBook.get_sheet_by_name('sheet')

a = sheet.cell(row=i,column=j)

a.value = 'nuevo valor'

然后保存:

代码语言:javascript
复制
workBook.save('example.xlsx')   
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25247742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档