|
|
|
import click
|
|
|
|
import pyperclip
|
|
|
|
|
|
|
|
|
|
|
|
def split_table(text):
|
|
|
|
rows = []
|
|
|
|
for line in text.splitlines():
|
|
|
|
values = line.split("\t")
|
|
|
|
cells = [v.strip() for v in values]
|
|
|
|
rows.append(cells)
|
|
|
|
return rows
|
|
|
|
|
|
|
|
|
|
|
|
def get_cell_lengths(table):
|
|
|
|
tmp = {}
|
|
|
|
|
|
|
|
for row in table:
|
|
|
|
for i, cell in enumerate(row):
|
|
|
|
if i not in tmp:
|
|
|
|
tmp[i] = []
|
|
|
|
tmp[i].append(len(cell))
|
|
|
|
|
|
|
|
return {k: max(v) for k, v in tmp.items()}
|
|
|
|
|
|
|
|
|
|
|
|
def build_table(table, lengths):
|
|
|
|
text_rows = [_build_row(row, lengths) for row in table]
|
|
|
|
header, *rest = text_rows
|
|
|
|
sep_items = ["-" * lengths[k] for k in sorted(lengths.keys())]
|
|
|
|
separator = _build_line(sep_items)
|
|
|
|
lines = [header, separator] + rest
|
|
|
|
return "\r\n".join(lines)
|
|
|
|
|
|
|
|
|
|
|
|
def _build_row(row, lengths):
|
|
|
|
items = []
|
|
|
|
for i, cell in enumerate(row):
|
|
|
|
length = lengths[i]
|
|
|
|
items.append(cell.ljust(length))
|
|
|
|
return _build_line(items)
|
|
|
|
|
|
|
|
|
|
|
|
def _build_line(items):
|
|
|
|
tmp = " | ".join(items)
|
|
|
|
return f"| {tmp} |"
|
|
|
|
|
|
|
|
|
|
|
|
@click.command()
|
|
|
|
def cli():
|
|
|
|
xls = pyperclip.paste()
|
|
|
|
table = split_table(xls)
|
|
|
|
lengths = get_cell_lengths(table)
|
|
|
|
result = build_table(table, lengths)
|
|
|
|
print("copied to clipboard")
|
|
|
|
pyperclip.copy(result)
|