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

时间:2013-08-01 18:48:04

标签: python worksheet xlsxwriter

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

3 个答案:

答案 0 :(得分:19)

您无法使用xlsxwriter附加到现有的xlsx文件。

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

同样,您可以使用自己的方法来追加"追加"到xlsx文件。我最近不得不附加到xlsx文件,因为我有很多不同的测试,其中GPS数据进入主工作表,然后每次测试开始时我都必须添加一个新的工作表。我没有openpyxl就可以解决这个问题的唯一方法是用xlrd读取excel文件,然后遍历行和列......

cells = []
for row in range(sheet.nrows):
    cells.append([])
    for col in range(sheet.ncols):
        cells[row].append(workbook.cell(row, col).value)
但是,你不需要数组。例如,这非常合适:

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

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

答案 1 :(得分:0)

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

existingWorksheet = wb.get_worksheet_by_name('Your Worksheet name goes here...')
existingWorksheet.write_row(0,0,'xyz')

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

答案 2 :(得分:0)

您可以使用 workbook.get_worksheet_by_name()功能: https://xlsxwriter.readthedocs.io/workbook.html#get_worksheet_by_name

根据https://xlsxwriter.readthedocs.io/changes.html,该功能已于2016年5月13日添加。

“发布0.8.7-2016年5月13日

-修复了在Windows上插入只读图像时出现的问题。问题#352。

-添加了get_worksheet_by_name()方法,以允许通过工作簿的名称从工作簿中检索工作表。

解决了内部文件的创建和修改日期位于本地时区而不是UTC的问题。”