
from functools import partial

def v_stack_second(*_):
    doc = XSCRIPTCONTEXT.getDocument()
    sel = doc.CurrentSelection
    sheet = sel.Spreadsheet
    out = []
    for first, second in sel.DataArray:
        out.extend([(first, part) for part in second.split(",")])
    cursor = sheet.createCursorByRange(sel)
    cursor.collapseToSize(len(out[0]), len(out))
    cursor.DataArray = out
    
    
def revert_cross_table_keys(*_):    
    doc = XSCRIPTCONTEXT.getDocument()
    sel = doc.CurrentSelection
    sheet = sel.Spreadsheet
    header_row, *data = sel.DataArray
    header_row = header_row[1:]
    p_zip = partial(zip, header_row)
    out = []
    for key, *row_data in data:
        out.extend([(key, c_key) for c_key, entry in p_zip(row_data) if entry])
    cursor = sheet.createCursorByRange(sel)
    cursor.gotoOffset(len(header_row)+2, 0)
    cursor.collapseToSize(len(out[0]),len(out))
    cursor.DataArray = out
    
