一尘不染

在Python中使用openpyxl将行插入Excel电子表格

python

我正在寻找使用openpyxl将行插入电子表格的最佳方法。

实际上,我有一个电子表格(Excel
2007),该电子表格具有标题行,其后最多(数千)行数据。我希望将行插入为实际数据的第一行,因此在标题之后。我的理解是,附加功能适合于将内容添加到 结尾
的文件。

阅读有关openpyxl和xlrd(以及xlwt)的文档,除了手动循环浏览内容并将其插入新表(在插入所需行之后)之外,我找不到任何明确的方法。

鉴于我到目前为止在Python方面的有限经验,我试图了解这是否确实是最好的选择(最Python)!如果可以的话,有人可以提供一个明确的示例。具体来说,我可以使用openpyxl读写行还是必须访问单元格?另外,我可以(覆盖)写入相同的文件(名称)吗?


阅读 196

收藏
2020-12-20

共1个答案

一尘不染

使用我现在用来实现所需结果的代码来回答这个问题。请注意,我是在位置1处手动插入行,但这应该足够容易以适应特定需求。您也可以轻松地对此进行调整,以插入多行,然后只需从相关位置开始填充其余数据即可。

另外,请注意,由于下游依赖性,我们手动从“ Sheet1”中指定数据,并将数据复制到工作表开头插入的新工作表中,同时将原始工作表重命名为“
Sheet1.5” 。

编辑:我还添加了(以后)对format_code的更改,以解决此处默认复制操作删除所有格式的问题:new_cell.style.number_format.format_code = 'mm/dd/yyyy'。我找不到任何可设置的文档,更多的是反复试验的情况!

最后,请不要忘记此示例保存了原始示例。您可以在适当的地方更改保存路径来避免这种情况。

    import openpyxl

    wb = openpyxl.load_workbook(file)
    old_sheet = wb.get_sheet_by_name('Sheet1')
    old_sheet.title = 'Sheet1.5'
    max_row = old_sheet.get_highest_row()
    max_col = old_sheet.get_highest_column()
    wb.create_sheet(0, 'Sheet1')

    new_sheet = wb.get_sheet_by_name('Sheet1')

    # Do the header.
    for col_num in range(0, max_col):
        new_sheet.cell(row=0, column=col_num).value = old_sheet.cell(row=0, column=col_num).value

    # The row to be inserted. We're manually populating each cell.
    new_sheet.cell(row=1, column=0).value = 'DUMMY'
    new_sheet.cell(row=1, column=1).value = 'DUMMY'

    # Now do the rest of it. Note the row offset.
    for row_num in range(1, max_row):
        for col_num in range (0, max_col):
            new_sheet.cell(row = (row_num + 1), column = col_num).value = old_sheet.cell(row = row_num, column = col_num).value

    wb.save(file)
2020-12-20