xlsxwriter:有没有办法在我的工作簿中打开现有的工作表?

Nic*_*ick 23 python worksheet xlsxwriter

我能够打开已有的工作簿,但是我没有看到任何方法在该工作簿中打开预先存在的工作表.有没有办法做到这一点?

dyl*_*nmc 28

您无法附加到现有的xlsx文件xlsxwriter.

有一个名为openpyxl的模块,它允许您读取和写入预先存在的excel文件,但我确信这样做的方法包括从excel文件中读取,以某种方式存储所有信息(数据库或数组),然后重写时你调用workbook.close()哪个会将所有信息写入xlsx文件.

同样,您可以使用自己的方法"附加"到xlsx文档.我最近不得不附加到xlsx文件,因为我有很多不同的测试,其中GPS数据进入主工作表,然后每次测试开始时我都必须添加一个新的工作表.我可以解决这个问题,而不openpyxl的唯一途径是阅读的Excel文件与xlrd,然后通过行和列运行...

cells = []
for row in range(sheet.nrows):
    cells.append([])
    for col in range(sheet.ncols):
        cells[row].append(workbook.cell(row, col).value)
Run Code Online (Sandbox Code Playgroud)

但是,您不需要数组.例如,这非常好用:

import xlrd
import xlsxwriter

from os.path import expanduser
home = expanduser("~")

# this writes test data to an excel file
wb = xlsxwriter.Workbook("{}/Desktop/test.xlsx".format(home))
sheet1 = wb.add_worksheet()
for row in range(10):
    for col in range(20):
        sheet1.write(row, col, "test ({}, {})".format(row, col))
wb.close()

# open the file for reading
wbRD = xlrd.open_workbook("{}/Desktop/test.xlsx".format(home))
sheets = wbRD.sheets()

# open the same file for writing (just don't write yet)
wb = xlsxwriter.Workbook("{}/Desktop/test.xlsx".format(home))

# run through the sheets and store sheets in workbook
# this still doesn't write to the file yet
for sheet in sheets: # write data from old file
    newSheet = wb.add_worksheet(sheet.name)
    for row in range(sheet.nrows):
        for col in range(sheet.ncols):
            newSheet.write(row, col, sheet.cell(row, col).value)

for row in range(10, 20): # write NEW data
    for col in range(20):
        newSheet.write(row, col, "test ({}, {})".format(row, col))
wb.close() # THIS writes
Run Code Online (Sandbox Code Playgroud)

但是,我发现读取数据并存储到二维数组更容易,因为我正在操作数据并一遍又一遍地接收输入,并且在测试结束之前不想写入excel文件(你可以轻松地使用xlsxwriter,因为这可能是他们在你打电话之前所做的事情.close()).

  • @AlexanderHuszagh:我认为它似乎有多复杂取决于你想要摆脱它的东西.如果您只需要单元格值,那么读取它确实相当简单.但是如果你想提取公式和格式等等,那就不那么简单了.也许仍然不是"非常复杂",但足够复杂,没有人急于插入xlrd和OpenPyXL中的功能差距.(即使用Java编写的Apache的POI也有一些差距.)另外,我认为它足够复杂,如果你试图在不知道你在做什么的情况下写入它就可以搞砸一个预先存在的文件. (3认同)
  • 我真的不会说“结构极其复杂”。该结构只是工作表的 zip 文件存档,其中每个工作表都是一个包含单元格内容的 XML 文件。它非常容易访问、阅读和编辑,只是 XlsxWriter 打算成为一个**作家**。不是**读者**。 (2认同)

小智 8

在搜索了一些关于在 xlxs 中打开现有工作表的方法后,我发现

existingWorksheet = wb.get_worksheet_by_name('Your Worksheet name goes here...')
existingWorksheet.write_row(0,0,'xyz')
Run Code Online (Sandbox Code Playgroud)

您现在可以将任何数据附加/写入打开的工作表。我希望它有帮助。谢谢

  • 嗨,你如何打开工作簿进行阅读/写作?当我尝试此功能时,它只能在您的脚本创建工作表后获取工作表。根据文档,您**无法读取或修改**(https://xlsxwriter.readthedocs.io/introduction.html) (6认同)
  • 我仍然想知道如何打开现有的 Excel 文件,这是最初的问题。我不认为这能回答那个问题。 (5认同)

kwi*_*ick 5

尽管在最后两个答案中提到了它的文档链接,并且从文档看来确实有使用“工作表”的新方法,但我无法在最新的“xlsxwriter=”包中找到此方法=3.0.3"

“xlrd”现在已删除对 xls 文件以外的任何文件的支持。

因此,我能够使用“openpyxl”进行锻炼,这为您提供了上面第一个答案中提到的预期功能。