You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.2 KiB
77 lines
2.2 KiB
5 years ago
|
import click
|
||
|
import re
|
||
|
import pyperclip
|
||
|
|
||
|
a2z = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||
|
EXCEL_COLUMNS = list(a2z)
|
||
|
for prefix in a2z:
|
||
|
further = [prefix + c for c in a2z]
|
||
|
EXCEL_COLUMNS.extend(further)
|
||
|
|
||
|
|
||
|
|
||
|
sheet = "Input_Data_*"
|
||
|
col_start = "A"
|
||
|
row_start = 8
|
||
|
|
||
|
|
||
|
def text_to_changelog(raw_text, sheet, start_column, start_row):
|
||
|
cells = [line.split("\t") for line in raw_text.splitlines()]
|
||
|
|
||
|
output = []
|
||
|
current_row = 1
|
||
|
columns_start_index = EXCEL_COLUMNS.index(start_column)
|
||
|
columns_used = EXCEL_COLUMNS[columns_start_index:]
|
||
|
|
||
|
for row, line in enumerate(cells, start=start_row):
|
||
|
if row != current_row:
|
||
|
output.append("")
|
||
|
current_row = row
|
||
|
for column, cell in zip(columns_used, line):
|
||
|
cell = cell.strip()
|
||
|
if not cell:
|
||
|
continue
|
||
|
output.append(f"{sheet}\t{column}{row}\t{cell}")
|
||
|
|
||
|
iterator = iter(output)
|
||
|
prev = next(iterator)
|
||
|
yield prev
|
||
|
|
||
|
for current in iterator:
|
||
|
if current != prev:
|
||
|
yield current
|
||
|
prev = current
|
||
|
|
||
|
|
||
|
def clipboard_to_changelog(sheet, start_column, start_row):
|
||
|
xls = pyperclip.paste()
|
||
|
result = list(text_to_changelog(xls, sheet, start_column, start_row))
|
||
|
line_count = len(result)
|
||
|
if line_count == 1:
|
||
|
print(f"Copied one line to the clipboard")
|
||
|
print(result[0])
|
||
|
else:
|
||
|
print(f"Copied {line_count} lines to the clipboard")
|
||
|
first_line = next(l for l in result if l.strip())
|
||
|
print(first_line)
|
||
|
print("...")
|
||
|
last_line = next(l for l in result[::-1] if l.strip())
|
||
|
print(last_line)
|
||
|
|
||
|
|
||
|
pyperclip.copy("\r\n".join(result))
|
||
|
|
||
|
|
||
|
@click.command()
|
||
|
@click.option("-s", "--sheet", prompt=True, required=True)
|
||
|
@click.option("-w", "--well", prompt=True, required=True)
|
||
|
def cli(sheet, well):
|
||
|
regex_well = r"(?P<column>[A-Z]{1,2})(?P<row>\d+)"
|
||
|
match = re.match(regex_well, well.upper())
|
||
|
if match is None:
|
||
|
raise ValueError(f"No Excel Well: {well}")
|
||
|
regex_result = match.groupdict()
|
||
|
start_column = regex_result["column"]
|
||
|
start_row = int(regex_result["row"])
|
||
|
clipboard_to_changelog(sheet, start_column, start_row)
|