diff --git a/excel/excel.py b/excel/excel.py new file mode 100644 index 0000000..9e77dff --- /dev/null +++ b/excel/excel.py @@ -0,0 +1,98 @@ +#!/usr/bin/python +# -*- coding=utf-8 -*- + +import openpyxl + +from openpyxl import worksheet + + +class Excel(object): + + def __init__(self): + self.work_book = None + self.work_sheet: worksheet = None + + def load(self, path, index=None, sheet_name=None): + """ + + :param path: excel文件地址 + :param index: 表格下标 + :param sheet_name: 表格名字 + :return: + """ + if path is None: + raise ValueError("请配置excel文件地址") + + self.work_book = openpyxl.load_workbook(path, read_only=False) + self.set_sheet(index, sheet_name) + + def set_sheet(self, index=None, sheet_name=None): + """ + 设置表格,默认第一个,优先按照index + :param index: 表格下标 + :param sheet_name: 表格名字 + :return: + """ + if isinstance(index, int) and index >= 0: + self.work_sheet = self.work_book.worksheets[index] + elif isinstance(sheet_name, str): + self.work_sheet = self.work_book[sheet_name] + else: + self.work_sheet = self.work_book.worksheets[0] + + def update_by_condition(self, param): + """ + + :param param: + { + "condition":{ + "col":"A", + "value":["张三","李四"] + }, + "value":{ + "H":"填入的值", + "G":"G列的值" + } + } + :return: + """ + updates = 0 + condition = param.get("condition", {}) + condition_aim = condition.get("value", []) + for row in range(1, self.work_sheet.max_row + 1): + condition_index = "{}{}".format(condition.get("col"), row) + condition_value = self.work_sheet[condition_index].value + if condition_value in condition_aim: + updates += 1 + for col, val in param.get("value", {}).items(): + cell = "{}{}".format(col, row) + self.work_sheet[cell] = val + + # print("表格\t条件列\t条件\t更新数") + # print("{}\t{}\t{}\t{}".format(self.work_sheet.title, condition.get("col"), condition_aim, updates)) + print("表格:{},列在{},条件为{}之一,更新条数:{}".format(self.work_sheet.title, condition.get("col"), condition_aim, updates)) + + def save(self, path): + self.work_book.save(path) + + +if __name__ == '__main__': + handler = Excel() + + handler.load("/Users/lh/Downloads/联名&IP合——鞋服2.xlsx") + + handler.set_sheet(sheet_name="服饰映射") + + handler.update_by_condition( + { + "condition": { + "col": "A", + "value": ["IP合作"] + }, + "value": { + "E": "填入的值", + "G": "G列的值" + } + } + ) + handler.save("./test.xlsx")