Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
87 views
in Technique[技术] by (71.8m points)

python - How to unmerge row for multiple workbooks

In a folder I have hundreds of Excel file with data. In every excel file first row is filled with some text and the row is merged. To unmerge the first row, I used below python code from stack overflow for single Excel Workbook. It's worked fine. Now I want to unmerge all the Excel workbook in the folder. How can I edit below code? Please help me.

from openpyxl import load_workbook
from openpyxl.utils.cell import range_boundaries

wb = load_workbook(filename = 'Batch.xlsx')

for st_name in wb.sheetnames:
    st = wb[st_name]
    mcr_coord_list = [mcr.coord for mcr in st.merged_cells.ranges]
    
    for mcr in mcr_coord_list:
        min_col, min_row, max_col, max_row = range_boundaries(mcr)
        top_left_cell_value = st.cell(row=min_row, column=min_col).value
        st.unmerge_cells(mcr)
        for row in st.iter_rows(min_col=min_col, min_row=min_row, max_col=max_col, max_row=max_row):
            for cell in row:
                cell.value = top_left_cell_value

wb.save('Batch.xlsx')


  [1]: https://i.stack.imgur.com/189xh.png
question from:https://stackoverflow.com/questions/65867962/how-to-unmerge-row-for-multiple-workbooks

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can use glob to create a list of the files, and then loop them using your code:

from openpyxl import load_workbook
from openpyxl.utils.cell import range_boundaries
from glob import glob

def process_xlsx(filepath):
    wb = load_workbook(filename = filepath)

    for st_name in wb.sheetnames:
        st = wb[st_name]
        mcr_coord_list = [mcr.coord for mcr in st.merged_cells.ranges]

        for mcr in mcr_coord_list:
            min_col, min_row, max_col, max_row = range_boundaries(mcr)
            top_left_cell_value = st.cell(row=min_row, column=min_col).value
            st.unmerge_cells(mcr)
            for row in st.iter_rows(min_col=min_col, min_row=min_row, max_col=max_col, max_row=max_row):
                for cell in row:
                    cell.value = top_left_cell_value

    wb.save(filepath)

for filepath in glob("./*.xlsx"):
    process_xlsx(filepath)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...