Ots*_*aya 3 python excel python-3.x openpyxl
我在Python3中使用openpyxl 2.6.0(带有Django)。
我想操作我的 Excel 骨架表(一些单元格被合并)来删除一行。但删除该行后,合并的单元格不再合并。
即使删除了某些行,我也想保留合并的单元格。
代码和Excel示例如下。
def excelsample(request):
wb = openpyxl.load_workbook(os.path.join(settings.BASE_DIR, 'static', 'excel', 'sample.xlsx'))
sheet = wb['Sheet1']
sheet.delete_rows(6) # delete 6th row
response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename="{fn}"'.format(fn=urllib.parse.quote("excelsample.xlsx"))
wb.save(response)
return response
Run Code Online (Sandbox Code Playgroud)
openpyxl bug tracker 上有一个问题涵盖了这个问题。它已被标记为无效。
基本问题是,要实现此功能,需要在行删除后检查和更新所有合并的单元格范围。有几个类似性质的复杂/困难问题被认为价值极小,因此尚未实施。
如果需要,您可以自己执行此操作。工作表上有一个属性 ( merged_cells),您可以在删除行后更新该属性。
def delete_row_with_merged_ranges(sheet, idx):
sheet.delete_rows(idx)
for mcr in sheet.merged_cells:
if idx < mcr.min_row:
mcr.shift(row_shift=-1)
elif idx <= mcr.max_row:
mcr.shrink(bottom=1)
Run Code Online (Sandbox Code Playgroud)
wb = openpyxl.load_workbook('csvfile.xlsx')
sheet = wb['Sheet2']
delete_row_with_merged_ranges(sheet, 6)
wb.save('csvfile2.xlsx')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4350 次 |
| 最近记录: |