I wrote a program to open an excel file and try to get 3 column in it. after running the program unfortunately It is not exactly what should it be. If I show you the pictures you will understand what I am talking about.
This is the original excel file:
After running the program the excel file is something like this:
in the above photo we have some lines which does not have any column. It is stupid. because if I click merging the data will come back! I don’t want to be like about. my purpose is something like below:
This is my code:
from tkinter import *
from tkinter.ttk import *
from tkinter.filedialog import askopenfile
import openpyxl
excel_file = openpyxl.load_workbook('EX (5).xlsx')
excel_sheet = excel_file['Recovered_Sheet1']
# delete row
excel_sheet.delete_rows(idx=1, amount=12)
# delete column
excel_sheet.delete_cols(idx=1, amount=2)
excel_sheet.delete_cols(idx=2, amount=2)
excel_sheet.delete_cols(idx=3, amount=1)
excel_sheet.delete_cols(idx=4, amount=4)
sh = excel_file.active
for row in range(1,300):
if (sh.cell(row=row,column=2).value) == None:
sh.delete_rows(idx=row)
if (sh.cell(row=row,column=1).value) == "Total:":
sh.delete_rows(idx=row)
# to save the file
excel_file.save('Edited.xlsx')
Advertisement
Answer
Interesting. This is arguably a bug in openpyxl
. Because you deleted rows 1 and 3, each of which have their first 4 columns merged, you would expect them to become unmerged, but they don’t.
You can either explicitly delete the 2 groups of merged cells (before deleting the rows), or simply unmerge all merged cells.
# Unmerge all merged cells in the sheet
sh.merged_cells = openpyxl.worksheet.cell_range.MultiCellRange()
# Or unmerged those 2 merged cells individually (before deleting the rows)
sh.unmerge_cells(start_row=1, start_column=1, end_row=1, end_column=4)
sh.unmerge_cells(start_row=3, start_column=1, end_row=3, end_column=4)