每月用友的科目余额表,表头和表尾是固定的,只有中间的数据不同。
写了个短脚本用来掐头去尾,之后在新的一列填充科目编码的长度,用于后续好筛选处理。
既然是短脚本就用Python+Openpyxl来写了,很简单,懒得上传Github,就这里保存一下。
这个月又给VPS续了三年费,马上搬新家了,博客自从换了VPS写的不多,没事还得来写写,不知道以后这VPS能传给女儿学开发么。。。
import openpyxl
# 对数据表中数据进行清理
def delete_redundancy_data(worksheet):
print("当前清理:", sheet.title)
start_max_row = sheet.max_row
print("初始最大行数是:", sheet.max_row)
start_max_column = sheet.max_column
print("初始最大列数是:", start_max_column)
# 取消全部的固定合并单元格
sheet.unmerge_cells("A5:J5")
sheet.unmerge_cells("A6:J6")
sheet.unmerge_cells("A7:J7")
sheet.unmerge_cells("A8:A9")
sheet.unmerge_cells("B8:B9")
sheet.unmerge_cells("C8:C9")
sheet.unmerge_cells("I8:I9")
# 取消需要经过计算的最后三行合并单元格
for i in range(0, 3):
row_number = "A{}:J{}".format(start_max_row - i, start_max_row - i)
print("取消合并单元格:", row_number)
sheet.unmerge_cells(row_number)
# 删除从总计开始的最后四行
sheet.delete_rows(start_max_row - 3, 4)
# 删除固定的第9行
sheet.delete_rows(9, 1)
# 删除固定的1-7行
sheet.delete_rows(1, 7)
# 填充长度
def fill_in_length(sheet):
print("开始从第11列填写科目代码长度")
row_length = sheet.max_row
print("处理后最大列数是:", row_length)
# 填充表头
sheet.cell(row=1, column=11, value="LEN")
# 填充K列每一个单元格
for i in range(2, row_length + 1):
sheet.cell(row=i, column=11, value=len(sheet.cell(row=i, column=1).value))
# 先将default.xls 通过Excel保存为xlsx文件
print("自动处理科目余额表\n")
default_path_name = "C:\\Users\\Minko\\Desktop\\default.xlsx"
wb = openpyxl.load_workbook(default_path_name)
for sheet in wb:
delete_redundancy_data(sheet)
fill_in_length(sheet)
print("完成工作表:", sheet.title, "\n")
print("全部处理完成:工作表已经保存至桌面 processed_ledger.xlsx")
wb.save("C:\\Users\\Minko\\Desktop\\processed_ledger.xlsx")