Metadata-Version: 2.1
Name: slack_off_mj
Version: 0.0.4
Summary: 可以把多个数据源，转换为JSON。通过自定义合并规则，对多个JSON源进行合并，最后定义写入规则可以写到excel，目前应用在一些对账场景
Author: 蒋经雄
Author-email: 723137901@qq.com
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE

一、项目简介
```text
代号：摸鱼
宗旨：通过小工具提高工作效率。
```
二、里程碑

v0.0.1
- 可以把多个数据源组织成二维表，然后转换为json格式
- 把多个数据源合并，可以定义表达式，合并的时候新增key
- 把合并好的数据写入到excel
- 合并时的表达式目前只支持 +-*/% 运算符，并且只支持整数和小数

v0.0.2
- 删除没必要的文件

v0.0.3
0.0.3x的所有更新记录
- 把包名从module换为SlackOffMj
- 修复模块找不到的问题
- 优化generator，可选填filter，folders可填文件和路径

v0.0.4
- 把包名从SlackOffMj改成slackoff，新增toj模块，模块功能就是0.0.1的全部功能
- 新增generator默认配置，XlsxReconciliation默认实现init_iterator，iterator_item的功能
- 在XlsxReconciliation中新增默认配置sheet，里边包含sheet的名字（name）和起始行（min_row）

案例

```python
from SlackOffMj.reconciliation import XlsxReconciliation
from openpyxl import load_workbook
from re import findall


def init_xlsx_iter(ctx):
    if ctx.current_file_index >= len(ctx.files):
        ctx.iter = None
    else:
        filepath = ctx.files[ctx.current_file_index]
        ctx.current_file_index += 1
        workbook = load_workbook(filename=filepath)
        sheet = workbook["Sheet"]
        ctx.iter = sheet.iter_rows(min_row=2)


def jymx_file(ctx):
    row = ctx["table"]
    if row[18] is None or row[24] is None:
        return True
    if "银联商务" in row[17]:
        return False
    if "财付通" in row[18] and "1656660632" in row[24]:
        return False
    return True


def jymx_kaihu(ctx):
    print(ctx["table"][13])
    return "CBS"


def actual_picture(ctx):
    picture = ctx["table"][13]
    return picture


xlsx = XlsxReconciliation({
    "generator": [
        {
            "source": {
                "init_iterator": init_xlsx_iter,
                "iterator_item": lambda cells: [cell.value for cell in cells],
                "filter": lambda filename: filename.endswith(".xlsx") and "泊时易" in filename,
                "folders": ["E:\\YLSW\\工作项目\\交接的项目\\北投富能RPA流程\\对账结果\\"]
            },
            "rules": {
                "rule": lambda ctx: findall(r"\d{4}\d{2}\d{2}", ctx["filename"])[0],
                "children": [
                    {
                        "rule": lambda ctx: ctx["table"][1],
                        "children": [
                            {
                                "rule": lambda ctx: ctx["table"][2]
                            }
                        ]
                    }
                ]
            }
        },
        {
            "source": {
                "init_iterator": init_xlsx_iter,
                "iterator_item": lambda cells: [cell.value for cell in cells],
                "filter": lambda filename: "交易明细清单.xlsx" in filename,
                "folders": ["E:\\YLSW\\工作项目\\交接的项目\\北投富能RPA流程\\对账结果\\"]
            },
            "rules": {
                "filter": jymx_file,
                "rule": lambda ctx: findall(r"\d{4}-\d{2}-\d{2}", ctx["table"][2])[0].replace("-", ""),
                "children": [
                    {
                        "rule": "actual",
                        "children": [
                            {
                                "rule": actual_picture
                            }
                        ]
                    }
                ]
            }
        }
    ],
    "merge": {
        "\\d{8}": {
            "exper": "${泊时易} * 0.05",
            "name": "管理费"
        }
    },
    "toXlsx": [
        {
            "target": {
                "sheet": {
                    "name": "Sheet1"
                },
                "dir": "E:\\YLSW\\工作项目\\交接的项目\\北投富能RPA流程\\对账结果",
                "filename": "夏娃.xlsx"
            },
            "writer": [
                {
                    "start_row_num": 1,
                    "row": "\\d{8}",
                    "col": {
                        "1": "泊时易",
                        "2": lambda num, row: "=SUM(A" + str(num) + ")"
                    }
                }
            ]
        }
    ]
})

print(xlsx.handle())

```
