我正在寻找使用openpyxl将行插入电子表格的最佳方法。
实际上,我有一个电子表格(Excel 2007),该电子表格具有标题行,其后最多(数千)行数据。我希望将行插入为实际数据的第一行,因此在标题之后。我的理解是,附加功能适合于将内容添加到 结尾 的文件。
阅读有关openpyxl和xlrd(以及xlwt)的文档,除了手动循环浏览内容并将其插入新表(在插入所需行之后)之外,我找不到任何明确的方法。
鉴于我到目前为止在Python方面的有限经验,我试图了解这是否确实是最好的选择(最Python)!如果可以的话,有人可以提供一个明确的示例。具体来说,我可以使用openpyxl读写行还是必须访问单元格?另外,我可以(覆盖)写入相同的文件(名称)吗?
使用我现在用来实现所需结果的代码来回答这个问题。请注意,我是在位置1处手动插入行,但这应该足够容易以适应特定需求。您也可以轻松地对此进行调整,以插入多行,然后只需从相关位置开始填充其余数据即可。
另外,请注意,由于下游依赖性,我们手动从“ Sheet1”中指定数据,并将数据复制到工作表开头插入的新工作表中,同时将原始工作表重命名为“ Sheet1.5” 。
编辑:我还添加了(以后)对format_code的更改,以解决此处默认复制操作删除所有格式的问题:new_cell.style.number_format.format_code = 'mm/dd/yyyy'。我找不到任何可设置的文档,更多的是反复试验的情况!
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)