Merged Cell-Records_the python way

Shared Libraries
Forum rules
For sharing working examples of macros / scripts. These can be in any script language supported by OpenOffice.org [Basic, Python, Netbean] or as source code files in Java or C# even - but requires the actual source code listing. This section is not for asking questions about writing your own macros.
Post Reply
User avatar
karolus
Volunteer
Posts: 1231
Joined: Sat Jul 02, 2011 9:47 am

Merged Cell-Records_the python way

Post by karolus »

Hallo

Code: Select all

def single_merged( container ):
    for entry in container:
        for cell in entry.Cells:
            if cell.IsMerged:
                yield cell

def query_merged_cellranges(*_):
    doc = XSCRIPTCONTEXT.getDocument()
    sheets = doc.Sheets
    REPORT = "MergeReport"
    try:        
        sheets[REPORT].clearContents(-1)
    except:
        sheets.insertNewByName(REPORT,sheets.Count)
    reports = []
    for sheet in sheets[:-1]:
        report = []
        uniques = sheet.UniqueCellFormatRanges
        for cell in single_merged(uniques):
            cursor = sheet.createCursorByRange(cell)
            cursor.collapseToMergedArea()    
            name = cursor.AbsoluteName.rpartition('.')[-1].replace('$','')                                
            report.append(name)
        report = [ sheet.Name, len(report)] + report
        reports.append(report)
    total = ['*Total*', sum( report[1] for report in reports)]
    max_merged = max(report[1] for report in reports)
    header = ['Sheet', '#Merges'] + list( f'#{n}' for n in range(1, max_merged+1))    
    finish = [ header]
    finish.extend(reports)
    finish.append(total)
    finish = [line + ['']*(len(header)-len(line)) for line in finish]
    out_sheet = doc.Sheets[REPORT]   
    (area:=out_sheet[:len(finish),:len(header)]).DataArray = finish
    area.Columns.OptimalWidth = True
Libreoffice 25.2… on Debian 13 (trixie) (on RaspberryPI5)
Libreoffice 25.8… flatpak on Debian 13 (Bookworm) (on RaspberryPI5)
Post Reply