自定义的中文脚本解释器来实现对excel自动化处理(一)

最近学习使用了一下有关excel处理的库openpyxl和pandas,就想实现只需要录入一段中文文字就能对excel工作簿进行文件创建、单元格的格式设置、单元格的合并等常规操作功能,本代码没有用AI完成,为自已学习python过程中业余书写完成,具体思路如下,相关代码模块在本专栏中依次开源共享:

1、设计一可以识别中文语言的解释器,将每行文字解析识别成本中文解释器可以理解的标准命令,

标准命令格式为:行号:命令名 {命令参数集} ,解释器根据命令名和对应的命令参数,调用python中对应的代码或自定义的方法函数完成功能。

解释器不是将python解释器再套一个壳,而是确实对每段文本进行详细解析,支持模糊中文语义,如【'打开','打开文件','文件','打开工作簿','工作簿','当前工作簿'】等这些中文名字均被解析成open命令,【'if','假如','如果','判断','若'】等这些这些中文名字均被解析成if命令等。

设计时分两部分命令,一部分为解释器通用系统命令,这部分命令为中文解释器通用,主要用于设计变量、条件体、循环体等简单的通用代码逻辑,这部分命令包括:

sysCmdNames=['set','get','input','cmd','printf','msgbox','if','endif','else','elseif','while','endwhile','continue','break','goto','exit','pause']

本系统命令对如用设置变量命令时均为全局变量,变量保存于一全局字典中。

第二部分命令为专门用于处理某一领域工作的命令,我这里用的是处理excel工作簿文档,即采用openpyxl和pandas库,扩展封装实现对应命令的功能函数,系统解析此专用命令时,根据专用命令名称和命令对应的参数集(即封装集成方法的参数)调用对应函数实际对excel文档的自动化处理。

2、编写一文本文件,将要自动化处理的中文文本按行录入,每一行为一个处理命令,本节先列出只有中文解释系统命令的测试示例,以供了解命令行的编制方法和中文解释器对中文文本的解析功能..

(1)纯中文供解释器解析的测试文本内容如下,测试文本中使用有设置变量,条件,循环,调用对话框显示等功能:test_cn.txt

::这是一个测试用中文脚本供比较

::行号可有可无,参数外大括号可有可无,变时赋值命令可以省略(但要有等号)

1:设置变量 {123,a1=3.1,d3=5|7|9,e5=True,f6=None,学生A=95,xy} ::会将{}中的有=号的存入全局字典变量中,没=号的存入一全局列表中,对有名称的变量,在后面的代码中可以使用这些变量进行运算了

2:设置条件 {条件1=a1大于2和(f6是空或9包含在d3) 和 e5为真} ::条件等式中采用的变量名称都是上一行设置的变量,故不会出现没有变量被定义的错误,可以正常运算出结果为True

设置变量 计数1=0

count=5 ::等同于设置变量 count=5

假如 count小于0 ::第1层IF块

终端显示 第1层if(条件为真)

否则假如 count等于50

终端显示 第1层elseif(条件为假)

否则假如 计数1等于10

如果 1大于0 ::第2层IF块

终端显示 第2层if(条件为真)

否则

终端显示 第2层else(条件为假)

结束如果 ::结束第2层if块

否则 ::10013等同于:否则(当count<0不成立时,当前不成立应执行本else代码,本else块主要测试while循环)

终端显示 第2层else(if条件为假)

n等于0,i=0,myname=luowei

namelen=len(myname) ::赋值,可以使用python中的内置函数

开始循环 n小于count

i=0

n=n+2

跳出循环

终端显示 序号,累加,n,count

循环 i<namelen ::第二层循环

i=i+1 ::10023等同于:设置变量 {i=i+1}

跳出循环 ::可换continue来试

终端显示 myname[i]

结束循环

xyz=abs(sin(30)) ::支持math库函数

结束循环

结束假如 ::结束第1层IF块

得到变量值 count,计数1

显示对话框 窗体名称,上行代码得到的count值=count,计数1值=计数1 ::10031等同于:显示对话框 count,计数1

输入变量 需要录入的变量内容如下,变量a=0,变量b=1.23,变量c=abc,count=9999 ::10032等同于:输入命令 需要录入的信息内容如下,变量a=0,变量b=1,变量c=abc ,此方法通过可视化UI,可以更改系统已有变量值,也可以增加变量名及值

执行命令 ::弹出一对话框录入要插入运行的命令及参数,默认临时插入的命令内部行号为0

暂停 1 ::暂停1秒

退出程序

(2)对应上面的供测试的文本的混用格式(运行结果相同)内容格式如下:test.txt

::这是一个测试用混合脚本供比较

::行号可有可无,参数外大括号可有可无,变时赋值命令可以省略(但要有等号)

1:设置变量 {123,a1=3.1,d3=5|7|9,e5=True,f6=None,学生A=95,xy} ::会将{}中的有=号的存入全局字典变量中,没=号的存入一全局列表中,对有名称的变量,在后面的代码中可以使用这些变量进行运算了

2:设置条件 {条件1=a1大于2和(f6是空或9包含在d3) 和 e5为真} ::条件等式中采用的变量名称都是上一行设置的变量,故不会出现没有变量被定义的错误,可以正常运算出结果为True

计数1=0 ::等同于 set {计数1=0}

count=5 ::等同于 set {count=5}

if count>5 ::10003等同于:假如 {count小于0} ::大括号可选,不要也行,余同

printf 第1层if(条件为真) ::10004等同于:终端打印{ 第1层if(条件为真)} ::要测试本块时,可以将if条件由假改真

elseif count==50 ::10005等同于:否则假如 {count等于50}

printf 第1层elseif(条件为假) ::10006等同于:终端打印 {第1层elseif(条件为假)}

elseif 计数1==10 ::10007等同于:否则假如 {计数1等于10}

if 1>0 ::10008等同于:假如 {1大于0}

printf 第2层if(条件为真) ::10009等同于:终端打印 {第2层if(条件为真) }

else ::10010等同于:否则

printf 第2层else(条件为假) ::10011等同于:终端打印 {第2层else(条件为假) }

endif ::10012等同于:结束假如

else ::10013等同于:否则(当count<0不成立时,当前不成立应执行本else代码,本else块主要测试while循环)

printf 第2层else(if条件为假) ::10014等同于:终端打印 {第2层else(条件为真)}

n=0,i=0,myname=luowei ::10015等同于:设置变量 {n=0,i=0,myname=luowei }

namelen=len(myname) ::10016等同于:设置变量 {namelen=len(myname)}

while n<count ::10017等同于:开始循环 {条件n<count}

i=0 ::10018等同于:设置变量 {i=0}

n=n+2 ::10019等同于:设置变量 {n=n+2}

break ::10020等同于:跳出循环

printf 序号,累加,n,count ::10021等同于:终端打印 {序号,累加,n,count}

while i<namelen ::10022等同于: 开始循环 {i<namelen}

i=i+1 ::10023等同于:设置变量 {i=i+1}

break ::可换continue来试 ::10024等同于:跳出循环

printf myname[i] ::10025等同于:终端打印 {myname[i] }

endwhile ::10026等同于:结束循环

xyz=abs(sin(30)) ::10027取消注释时等同于:设置变量 {xyz=abs(sin(30)), 如注释后,连续两个endwhile测试}

endwhile ::10028等同于:结束循环

endif ::10029等同于:结束假如

get count,计数1 ::10030等同于:得到变量值 count,计数1

msgbox 窗体名称,上行代码得到的count值=count,计数1值=计数1 ::10031等同于:显示对话框 count,计数1

input 需要录入的变量内容如下,变量a=0,变量b=1.23,变量c=abc,count=9999 ::10032等同于:输入命令 需要录入的信息内容如下,变量a=0,变量b=1,变量c=abc ,此方法通过可视化UI,可以更改系统已有变量值,也可以增加变量名及值

cmd ::弹出一对话框录入要插入运行的命令及参数,默认临时插入的命令内部行号为0

暂停 1 ::10033等同于:pause {1}

退出程序 ::10034等同于:exit

(3)上面两个文本文件被中文解析器解析的标准命令格式如下(运行结果同上面两个文件一致) test_standard.txt

::这是一个测试用脚本,脚本内容为解析后的标准命令

::行号可有可无,参数外大括号可有可无,变时赋值命令可以省略(但要有等号)

1: set {123,a1=3.1,d3=5|7|9,e5=True,f6=None,学生A=95,xy} ::会将{}中的有=号的存入全局字典变量中,没=号的存入一全局列表中,对有名称的变量,在后面的代码中可以使用这些变量进行运算了

2: set {条件1=(a1>2 and(f6 is none or 9 in d3) and e5)} ::条件等式中采用的变量名称都是上一行设置的变量,故不会出现没有变量被定义的错误,可以正常运算出结果为True

3: set {计数1=0} ::设置变量命令

4: set {count=5}

5: if count>5 ::第一层if块开始

6: printf 第1层if(条件为真) ::在终端输出文字

7: elseif count==50 ::第一层中的第一个elseif

8: printf 第1层elseif(条件为假)

9: elseif 计数1==10

10: if 1>0 ::第一层中的第二个elseif中的第二层if块开始

11: printf 第2层if(条件为真)

12: else

13: printf 第2层else(条件为假)

14: endif ::第一层中的第二个elseif中的第二层if块结束

15: else ::第一层if块中的else块

16: printf 第2层else(if条件为假)

17: set {n=0,i=0,myname=luowei} ::设置变量

18: set {namelen=len(myname) } ::设置变量得到字符串长度

19: while n<count ::开始第一层循环

20: set i=0

21: set n=n+2

22: break ::直接跳出循环

23: printf 序号,累加,n,count ::终端输出这几个变量的当前值

24: while i<namelen ::第二层循环开始

25: i=i+1

26: break ::可换continue来测试

27: printf myname[i]

28: endwhile ::第二层循环尾部

29: set xyz=abs(sin(30)) ::设置变量,可以使用math库中的函数

30: endwhile ::第一层循环尾部

31: endif ::第一层if块尾部

32: get count,计数1 ::得到变量值

33: msgbox 窗体名称,上行代码得到的count值=count,计数1值=计数1 ::用tk对话框方式显示当前值

34: input 需要录入的变量内容如下,变量a=0,变量b=1.23,变量c=abc,count=9999 ::用tk对话框方式录入变量或修改原有变量,可以更改系统已有变量值,也可以增加变量名及值

0: cmd ::弹出一对话框录入要插入运行的命令及参数,默认临时插入的命令内部行号为0

35:暂停 1 ::暂停运行1秒

36:退出程序 ::退出程序

第一个开源模块:scriptDefine.py:有关脚本命令及参数识别的一些定义的模块

python 复制代码
# -*- coding: utf-8 -*-
"""
scriptDefine.py:有关脚本命令及参数识别的一些定义的模块:定义分为两部分:
1、通用标准命令:如 设置变量,如果等,此部分命令为所有专用模块共用的命令
2、专用命令:如本模块中已有的专门用于处理excel文件的专用命令集,如新建文档,合并单元格等命令,可以针对不同的专业领域扩充对应的中文命令集合
所定义的识别选项类似于AI方式,可以逐步进行学习和扩充,也可以增加语音识别接口进行识别和扩充对应各标准命令的不同文字串表达
方法为:将本文件中定义的全部识别项只作为初始内容,通过增加外部录入或语音识别录入(学习)接口,对字典中的语汇可进行动态扩充,扩充后的字典以文件形式保存下来
代码运行时,总是从扩充后的字典文件中得到全部字典内容,通过字典中词汇的不断积累扩大,使代码对文字的理解将会"越来越"聪明^-^
==暂没时间作此再扩充模块===
"""
import sys,time,copy,os,random,math,re
from math import *
import numpy as np
from enum import Enum
from wExcelDefine import *   #对模块wExcel.py提供一些定义的一些常数、枚举等的支持

class cmdPostion():
    """
    脚本命令当前执行的位置
    """
    cmdID=0        #在正常的按命令顺序号执行
    cmdLooping=1   #在一个循环体内执行
    cmdIf=2        #在一个条件判断中的if中执行
    cmdElse=4      #在一处条件判断中的else中执行
    cmdLoopIf=3    #在一个循环体中的条件判断中的if中执行 
    cmdLoopElse=5  #在一个循环体中的条件判断中的Else中执行 

#最先可以直接中文替换关键字明细
replace_cns={
           #'':['\n','\r','\t'],
           #' ':['{','}'],   
           '=':['等于'],
           '==':['条件等于','等于条件'],
}          

#系统定义的全部变量名称及其当前值
sys_Values={
    'PI':3.14159265,
    'myValue':123.456,   #通过脚本命令 set 临时定义的变量值也加入此字典中
 
    }

#定义全部可用命令关键字及模糊命令名
execl_cmdStand={
        #============================第1部分:通用标准命令定义集合=================================================
        'unknownCmd':['unknownCmd','未知命令','无效命令','不明命令','无法识别的命令'],
        'set':['set','设置变量值','设置变量','变量赋值','赋值','变量','设置条件','条件赋值','条件'],
        'get':['get','得到变量','得到变量值','变量值','取得变量','取得变量值','得到条件值','得到条件','取得条件'],
        'input':['input','键盘输入','输入变量','输入','录入','输入等待','等待输入'],
        'cmd':['cmd','command','powershell','输入命令','插入命令','执行命令','运行命令','录入命令'],
        'printf':['printf','终端显示','打印到终端','终端','终端打印','屏幕显示'],
        'msgbox':['msgbox','对话框','显示信息框','显示对话框','弹框显示','弹框','信息窗体','对话框窗体'],
        'if':['if','假如','如果','判断','若'],
        'endif':['endif','结束假如','结束如果','结束判断','结束if'],
        'elseif':['elseif','elif','else if','elseIf','ElseIf','否则假如','其他假如'],
        'else':['else','否则','其他条件','其他情况','不满足条件时'],
        #不设置'endelse',他同'endif'是同一地方结束,也不设置'endelseif',他同下一个'elseif'或'endif'同时结束
        #'endelseif':['endelseif','endelif','endElseIF','结束否则假如','结束其他条件','结束其他判断','结束elseif','结束elif'],
        'while':['while','循环','执行循环','开始循环','循环开始'],
        'endwhile':['endwhile','结束循环','循环结束','完成循环','循环完成','结束循环体','完成循环体','循环体结尾','循环结尾'],
        'continue':['continue','开始下一轮循环','下一循环','下一次循环','下一轮循环','结束本轮循环','结束本次循环','返回循环体顶部','返回循环顶部'],
        'goto':['goto','转到','跳转到','跳转','执行跳转','执行跳转到'], 
        'exit':['exit','退出','退出程序','关闭程序','离开程序','结束程序','结束','关闭','退出脚本程序','退出脚本'],
        'pause':['pause','暂停','暂停执行','暂时停止','休息片刻','休息','停顿'],  
        'call':['call','函数','调用','函数','外部函数','其他函数','其他命令','命令'],    
        #扩展中.........          

       #============================第2部分:用于操作excel文档的专用命令定义集合=================================================
        'new':['new','新建','新建文件','新建表格文件','新建excel文件','新建wps表格文件','新建excel表格文件','新建excel','新建工作簿','新建工作簿文件'],
        'newSheet':['newSheet','新建工作表','新工作表','增加工作表','新建表格','新表格','增加表格','增加表单','新表单'],
        'open':['open','打开','打开文件','文件','打开工作簿','工作簿','当前工作簿'],
        'sheet':['sheet','工作表','表单','表','当前工作表'],
        'save':['save','保存','保存文件','写文件','保存工作簿','写工作簿'],
        'saveAs':['saveas','另存为','另存文件','改名存文件','改名存盘','改名工作簿并保存'],
        'setPirntRange':['setPirntRange','打印区域','设置打印区域'], 
        'print':['print','打印','打印文件','打印表格','打印报表'],

        'getValue':['getvalue','得到值','单元格值','得到单元格值'],
        'getFormat':['getformat','得到格式','得到单元格格式','单元格格式','得到单元格显示格式'],
        'getFont':['getfont','得到字体','得到单元格字体'],
        'getFontStrike':['getfontstrike','得到字体删除线','得到单元格字体删除线','得到单元格字体是否删除线','得到字体是否删除线',],
        'getAlignment':['getalignment','得到对齐','得到对齐方式','得到单元格对齐方式','得到字体对齐方式','得到表格对齐方式'],
        'getBorder':['getborder','得到边框','得到单元格边框','得到表格边框','得到边框样式','得到单元格边框样式'],

        'setValue':['setvalue','设置值','设置单元格值','设置单元格的值','设置单元格内容','设置表格值','设置表格内容','更新表格内容','更新单元格','更新单元格内容','更改表格内容','更改单元格','更改单元格内容'],
        'setValidation':['setValidation','设置数据有效性','数据有效性','有效性','可选数据','下拉列表','下拉数据','组合框','组合选择框','数据限制'],
        'setOutLinkFile':['setOutLinkFile','设置外部链接','设置外部连接','设置外部链接文件','设置外部连接文件','外部链接文件','外部连接文件','外部链接','外部连接','其他链接','其他连接'],
        'setValueType':['setValueType','值类型','设置值类型','单元格值类型','表格值类型','单元格格式'],
        'setNumber_format':['setNumber_format','设置单元格格式','单元格格式','设置格式','格式','设置表格格式','表格格式'],   #单元格的值显示格式
        'setFont':['setfont','字体','设置字体','设置单元格字体'],
        'setAlignment':['setalignment','设置对齐','设置对齐方式','设置单元格对齐方式','设置字体对齐方式','设置表格对齐方式','更新对齐','更新对齐方式','更新单元格对齐方式','更新字体对齐方式','更新表格对齐方式','更改对齐','更改对齐方式','更改单元格对齐方式','更改字体对齐方式','更改表格对齐方式'],
        'setBorder':['setborder','设置边框','设置单元格边框','设置表格边框','设置边框样式','设置单元格边框样式','更新边框','更新单元格边框','更新表格边框','更新边框样式','更新单元格边框样式','更改边框','更改单元格边框','更改表格边框','更改边框样式','更改单元格边框样式'],
        'setFill':['setfill','设置底色','设置单元格底色','设置表格底色','设置背景色','设置单元格背景色','设置表格背景色','更新底色','更新单元格底色','更新表格底色','更新置背景色','更新单元格背景色','更新表格背景色','更改底色','更改单元格底色','更改表格底色','更改置背景色','更改单元格背景色','更改表格背景色'],
        
        'cellMerged':['cellmerged','合并','合并单元格','单元格合并','合并表格','表格合并'],
        'unCellMerged':['uncellmerged','取消合并','取消合并单元格','取消单元格合并','取消合并表格','取消表格合并'],
        'setValidity':['setvalidity','有效性','设置数据有性','设置数据规则','更新数据有效性','更新数据规则','更改数据有效性','更改数据规则'],
        'copy':['copy','复制','复制单元格','复制表格','拷贝','拷贝单元格','拷贝表格','复制到','拷贝到'],
        'paste':['paste','粘贴','粘贴单元格','粘贴表格','粘贴内容','粘贴当前内容'],
        'copyto':['paste','复制粘贴单元格','复制粘贴','复制粘贴表格','拷贝粘贴','拷贝粘贴单元格','拷贝粘贴表格','复制到','粘贴自'],
        'del':['del','删除','删除内容','清除','清除内容'],
        'clearAll':['clearall','删除全部','删除全部内容','清除全部','清除全部内容'],
        'dragCell':['dragcell','拖拉表格','拖拉单元格','拖表格数据','拉单元格数据','拖表格数据','拖单元格数据','拖拉表格数据','拖拉单元格数据'],
        #扩展中......... 
       
    }
execl_cmdNames=list(execl_cmdStand.keys())    #当前支持的全部命令关键字
sysCmdNames=['set','get','input','cmd','printf','msgbox','if','endif','else','elseif','while','endwhile','continue','break','goto','exit','pause']
sysCmd_noVar=['continue','break','endif','else','exit','endwhile'] #系统无参数命令:用于判断命令行只有一段文本,文本是命令还是设置值命令的参数
sysCmd_condition=['if','elseif','while'] #此部分命令后为条件等式

#以下定义用于参数解析
execl_parStand={
        'sys_original':['sys_original',[]],  #如是系统命令,命令后的原始作处理的参数计入[]列表中,需注意参数顺序和数量
        'sys_list':[],                       #如是系统命令,命令后的原始参数(没有变量名称的)经过处理后的数据列表[参数1,参数2,。。。。],如条件等式,已经转换为可以直接判断的条件等式,无需再经过分析处理
        'sys_dict':{},                       #如是系统命令,命令后的原始参数(有变量名称的)经过处理后的数据字典{'变量1':123,  '变量2':a>10,}
        'excelFilePath':['excelFilePath','excel文件','excel表格文件','wps表格文件','wps文件','工作簿','工作簿文件','表格文件','文件名称','文件名','工作簿文件名称','表格文件名称','工作簿文件名','表格文件名',], 
        'sheetName':['sheetName','工作表','工作表名称','工作表名','表格','表格名称','表格名','工作簿中的工作表','表名'],
        'cellPos':['cellpos','单元格','单元格地址','单元格1','单元格地址1','原单元格1','原单元格地址','复制单元格地址','复制单元格'],                  #要操作的单元格(或区域)1
        'cellPos2':['cellpos2','单元格2','单元格地址2','原单元格2','目标单元格地址','粘贴单元格地址','粘贴单元格','拖拉后单元格','拖拉后单元格地址'],     #要操作的单元格(或区域)2
        'data_type':['type','单元格类型','数据类型','单元格数据类型','数据格式','值类型','单元格值类型','表格数据类型','表格值类型','表格数据类型'], 
        'value':['value','单元格值','值','表格值'],                #单元格的值
        'validation':['validation','数据有效性','有效性','可选数据','下拉列表','下拉数据','组合框','组合选择框','数据限制'], 
        'outLinkFile':['outLinkFile','外部链接','外部连接','外部链接文件','外部连接文件','外部链接','外部连接','其他链接','其他连接'],
        'number_format':['number_format','单元格格式','格式','表格格式'],   #单元格的值显示格式
        'useRow':['userow','按行','使用行','按行复制','按行拖拉'],  #操作按行
        'useCol':['usecol','按列','使用列','按列复制','按列拖拉'],  #操作按列
        'useMirror':['usemirror','镜向','使用镜向','镜向复制','镜向拖拉'], #拖拉工作表时,是否同时采用镜向赋值方式
        'mergeType':['mergetype','单元格合并类型','单元格合并方式','合并类型','合并方式'],   #单元格合并方式
        'startRowID':['startrowid','起始行号','开始行号','行号'],     #开始行号
        'rowCount':['rowcount','处理行数','操作行数量','行数量'],     #处理的行数量
        'height_mm':['height_mm','行高','设置行高','行高度','行宽','设置行宽','设置行宽度','行宽度','高度'],    #行高mm
        'startCol':['startcol','起始列号','开始列号','列号'],        #开始的列字母 如B
        'colCount':['colcount','处理列数','操作列数量','列数量'],     #处理的列数量
        'width_mm':['width_mm','列宽','设置列宽','列宽度','列高','设置列高','设置列高度','列高度','宽度'],    #列宽mm

        'fontColor':['fontcolor','字体颜色','字色','字颜色','文字颜色','文字色'],   #字体颜色
        'fontName':['fontname','name','字体','字体名称'], 
        'fontSize':['fontsize','size','字号','字体大小','字休尺寸','字大小','字尺寸'],          #字体号
        'bold':['bold','加粗','粗体','字体粗体','字体加粗','文本加粗','文字加粗','字加粗'],                        #加粗
        'italic':['italic','倾斜','倾斜体','字体倾斜','文本倾斜','文字倾斜'],                              #倾斜
        'outline':['outline','外框线','字体外框线','字体有外框线','文字有外框线','文本有外框线'],            #字体外框线
        'underline':['u','underline','下划线','字体下划线','文本有下划线','文字有下划线'],                  #字体下划线 
        'strike':['strike','删除线','字体删除线','文字有删除线','文本有删除线'],         #字体有删除线
        'shadow':['strike','阴影','字体阴影','文字有阴影','文本有阴影'],                #字体阴影
        'horizontal':['horizontal','水平对齐','单元格水平对齐','字体水平对齐','文字水平对齐','文本水平对齐'],  #文字水平对齐
        'vertical':['vertical','垂直对齐','单元格垂直对齐','字体垂直对齐','文字垂直对齐','文本垂直对齐','竖直对齐','单元格竖直对齐','字体竖直对齐','文字竖直对齐','文本竖直对齐'],    #文字竖直对齐
        'fgColor':['fgcolor','底色','背景色','单元格背景色','单元格底色','表格颜色','表格背景色','表格底色'],        #单元格前景色:对fill_type='solid'时,即为单元格的底色
        'bgColor':['bgcolor','填充色','图案填充色','图案背景色','单元格图案背景色'],            #单元格背景色
        'fill_type':['fill_type','填充类型','填充图案','图案','填充图案类型','图案类型'],       #单元格填充方式
        'borderPos':['borderpos','边框','边框线','单元格边框','单元格边框线','表格边框','表格外框线','外框线'],   #单元格边框
        'bordStyle':['bordstyle','边框线类型','边框类型','单元格边框类型','单元格边框线类型','表格边框类型','表格外框线类型','外框线类型'],              #单元格边框线类型
        'formulaAuto':['formulaauto','公式自动','自动公式','公式自动计算','自动计算公式'],                 #粘贴单元格时,公式中的地址自动按偏移时计算
        'valueAuto':['valueauto','值自动','自动计算值','自动计算单元格值','单元格值自动计算'],              #粘贴单元格时,非公式中的值是否模拟拖拉方式也自动变化
        'useWps':['useWps','同wps方式','同软件方式','wps'],                                             #拖拉或粘贴单元格时的优先方向
        'dragDir':['dragDir','方向','操作方向','拖拉方向','采用方向','粘贴方向'],
        
        'paperSize':['papersize','打印纸规格','打印纸规格','打印纸','设置纸张大小','设置纸张','设置打印纸张'],   #打印纸张规格
        'orientation':['orientation','打印方向','打印线方向'],   #打印方向
        'zoomType':['zoomType','打印缩放类型','打印缩放'],         #缩放打印方式
        'pageWidth':['pagewidth','打印页宽度','打印页宽度用纸张','打印页宽度数量'],        #打印页宽纸张数量
        'pageHeight':['pageheight','打印页高度','打印页高度用纸张','打印页高度数量'],      #打印面高纸张数量
        'pageHead':['pagehead','表头','打印表头','固定表头','表头行'],     #每页打印的表头行数
        'scale':['scale','比例','打印比例','缩放比例'],                    #打印缩放比例
        'fitToWidth':['fittowidth','适合页宽','打印适合宽度','打印适合页宽度'],       #打印适合页宽
        'fitToHeight':['fittoheitht','适合页高','打印适合高度','打印适合页高k度'],     #打印适合页高
        #扩展中.........
    }
execl_parNames=list(execl_parStand.keys())    #当前支持的全部参数名称关键字
execl_parNames_=['_lstValue','']              #上面的字典中属于临时属性的项

#定义在识别参数时,只有参数值没有参数名,但可以判断参数名的参数名(=值)集合,如'宋体' 翻译出来就是fontName='宋体'
execl_parAndValues={
    #'sys_int':['pattern',r"\s*(\d+).*"],             #得到命令后的参数字符中的第一个整数
    'excelFilePath':['pattern',r"(..*\.xls[xm]?)"],  #excel文件
    'sheetName':['no',0],      #参数值0位直接赋值
    'type_n':['list','整数','小数','整数类型','小数类型','浮点数','浮点数类型','货币数','货币类型','钱类型','钱数','人民币','人民币类型','百分数','百分数类型','百分比','百分比类型','分数'],
    'type_d':['list','日期','时间','日期类型','时间类型','日期型','时间型'],
    'type_s':['list','字符串类型','文本类型','字符串型','文本型','字符串','文本','字符型','文本型','字符串','文本'],
    'type_f':['in_or','公式','计算式'],    #表示'公式' 若'计算式' 如出现在secipt的参数内容中,即认为指定的单元格为公式类型,项间关系为or
    'cellPos':['pattern',r"^\$?[A-Z]{1,3}\$?\d{1,5}(?::\$?[A-Z]{1,3}\$?\d{1,5})?$"],             #单元格地址
    'fontName':['list','宋体','新宋体','仿宋','黑体','微软雅黑','仿宋_GB2312','楷体','等线','幼圆'],   #即script中的值包含在此list表中即认为script参数字符串为fontName参数及值
    'fontSize':['pattern',r"(?:字号|体大小|体尺寸|大小|尺寸)\s*(\d+)"],                              #字号,用于识别  '字号9'等
    'fontColor':['pattern',r"(?:文字色?|字体颜色?|字色|颜色)\s*([\u4e00-\u9fa5]+(?:色)?)" ],         #字颜色,用于识别 '字体红色'等
    'bold':['in_or','粗'],                         #加粗  表示'粗'字在script中的参数字符串中即为真,如有多项,项间关系为or
    'italic':['in_or','倾斜'],                      #倾斜
    'outline':['in_and','外','框','线'],            #字体外框线
    'underline':['in_or','下划'],                   #字体下划线 
    'strike':['in_or','删除线'],                    #字体有删除线
    'shadow':['in_or','阴影'],                       #字体阴影
    'startRowID':['pattern',r"(?:|第一|起始|开始)行\s*(\d+)"],           #开始行号
    'rowCount':['pattern',r"(?:|操作|处理|计算)行(?:数量)?\s*(\d+)行?\s*"],            #处理的行数量
    'height_mm':['pattern',r"(?:设置)?(?:行|高度)(?:|高|高度|宽|宽度)\s*(\d+)\s*"],    #行高mm
    'startCol':['pattern',r"(?:|第一|起始|开始)列\s*(\d+)"],                          #开始的列字母 如B
    'colCount':['pattern',r"(?:|操作|处理|计算)列(?:数量)?\s*(\d+)列?\s*"],            #处理的列数量
    'width_mm':['pattern',r"(?:设置)?(?:列|宽度)(?:|宽|宽度|高|高度)\s*(\d+)\s*"],     #列宽mm
    'dragDir_col':['in_or','纵向','列方向','竖'],                        #复制粘贴或拖拉时的方向
    'dragDir_row':['in_or','横向','行方向','水平'],                      #复制粘贴或拖拉时的方向
    'validation_comboBox':['list','序列','下拉列表','下拉列表内容'],             #数据有效性-序列   -》暂不支持
    'validation_minmaxNum':['pattern',r"(?:最小值|最大值|限值|数值|范围|介于|从)?\s*(\d+(?:\.\d+)?)\s*(?:到|至|-|~|-|~|...|\.\.)\s*(\d+(?:\.\d+)?)"],                                      #数据有效性-数字范围 -》暂不支持
    'validation_rangeDater':['pattern',r"(?:最小日期|最大日期|日期范围|日期|范围|介于|从)?\s*(\d+(?:\.\d+)?)\s*(?:到|至|-|~|-|~|...|\.\.)\s*(\d+(?:\.\d+)?)"],                              #数据有效性-日期范围 -》暂不支持
    'validation_rangeStr':['pattern',r"(?:最小字符数|最大字符数|限制字符数|字符数范围|字符数范围|字符数量介于|字符数量从)?\s*(\d+(?:\.\d+)?)\s*(?:到|至|-|~|-|~|...|\.\.)\s*(\d+(?:\.\d+)?)"],   #数据有效性-文本长度范围 -》暂不支持
    #扩展中.........
}

#定义全部可用的标准参数值信息(参数名:参数值),可供执行函数体直接调用
#格式为:'key参数名':[参数值,参数值的类型,默认参数值]
execl_pars={
    'sys_original':[None,'list',None],            #只有命令的参数列表[['假如count<5'],'list',None]  此参数为原始参数,未进行解析处理
    'sys_list':[None,'list',None],                  #此参数已将'sys_original'中的内容(无变量名称的部分)解析
    'sys_dict':[None,'dict',None],                  #此参数已将'sys_original'中的内容(有变量名称的部分)解析
    'excelFilePath':[None,'str',None],   #工作簿文件名
    'sheetName':[None,'str',None], #工作表名
    #'type':['General','str','General'],  #单元格值类型
    'data_type':['General','str','General'],         #单元格的值类型
    'value':[[[None]],'General',[[None]]],           #单元格的值:此属性保存的是二维列表数组
    'validation':[None,'list',['选项1','选项2']],     #数据有效性:对序列['选项1','选项2'] 对限值[1,100]
    'outLinkFile':[None,'list',None],                 #外部链接文件(实际是公式'f')
    'number_format':[None,'str',None],   #单元格的值显示格式
    'cellPos':[None,'str',None],    #要操作的单元格(或区域)
    'cellPos2':[None,'str',None],   #要操作的单元格(或区域)2:只有cellPos有值后,才会设置cellPos2的值
    'useRow':[None,'bool',False],   #操作按行
    'useCol':[True,'bool',True],    #操作按列
    'useMirror':[False,'bool',False], #拖拉工作表时,是否同时采用镜向赋值方式
    'mergeType':[cell_mergeType.onlyLeftTopText,'int',cell_mergeType.onlyLeftTopText],   #单元格合并方式
    'startRowID':[None,'int',1],     #开始行号
    'rowCount':[None,'int',1],       #处理的行数量
    'height_mm':[None,'float',8],    #行高mm
    'startCol':[None,'str','A'],     #开始的列字母 如B
    'startRow':[None,'int',1],       #处理的列数量
    'width_mm':[None,'float',20],    #列宽mm
    'fontColor':['000000','str','000000'],  #字体颜色
    'fontName':[None,'str','宋体'],          #字体名称
    'fontSize':[None,'int',11],             #字体号
    'bold':[None,'bool',False],             #是否加粗
    'italic':[None,'bool',False],       #是否倾斜
    'outline':[None,'bool',False],      #字体外框线
    'underline':[None,'bool',False],    #字体下划线 
    'strike':[None,'bool',False],       #字体删除线
    'shadow':[None,'bool',False],       #字体阴影
    'horizontal':[None,'str','中'],     #文字水平对齐
    'vertical':[None,'str','中'],       #文字竖直对齐
    'fgColor':[None,'str','FFFFFF'],        #单元格前景色:对fill_type='solid'时,即为单元格的底色
    'bgColor':[None,'str','FFFFFF'],        #单元格背景色
    'fill_type':[None,'str','solid'],       #单元格填充方式
    'borderPos':[None,'str','左右上下中'],   #单元格边框
    'bordStyle':[None,'str','thin'],        #单元格边框线类型
    'formulaAuto':[None,'bool',True],       #粘贴单元格时,公式中的地址自动按偏移时计算
    'valueAuto':[None,'bool',False],        #粘贴单元格时,非公式中的值是否模拟拖拉方式也自动变化
    'useWps':[None,'bool',True],            #粘贴单元格时,参照wps软件方式
    'dragDir':[None,'str','col'],           #复制粘贴或拖拉单元格时,按列向还是按模向优先
    
    'paperSize':[None,'str','A3','A4','A5','B4','B5','LETTER','LEGAL'],   #
    'orientation':[None,'str','portrait','landscape'],   #打印方向
    'zoomType':[None,'int',1],         #缩放打印方式
    'pageWidth':[None,'int',1],        #打印页宽纸张数量
    'pageHeight':[None,'int',100],     #打印面高纸张数量
    'pageHead':[None,'str','1:2'],     #每页打印的表头行数
    'scale':[None,'int',100],          #打印缩放比例
    'fitToWidth':[None,'int',1],       #打印适合页宽
    'fitToHeight':[None,'int',1],      #打印适合页高
    #扩展中.........
}

execl_lstBoolValue=['useRow','useCol','useMirror','bold','italic','outline','underline','strike','shadow','formulaAuto','valueAuto','useWps']  #本列表中的参数名如果有值,即为True,没值即为False

#定义全部可用于识别的参数值,即字典值列表中第[0]项的值对应第[1~n]项的模糊字符串
#用于script中的参数中有=时,=右侧的内容如是下面的内容得以对应值
execl_parValues={
        'PI':[3.14159265,'pi','PI','圆周率'],  
        'bool_true':[True,'true','是','真','满足条件'],                                                 
        'bool_false':[False,'false','否','假','不满足条件'],                                             
        'type_n':['n','type_n','整数','小数','浮点数','货币数','钱数','人民币','百分数','百分比','分数'],  
        'type_d':['d','type_d','日期','时间','日期时间','日期+时间'],                                     
        'type_s':['s','type_s','字符串','文本','纯文本','字符','非数字'],                                
        'type_f':['f','type_f','type_f','公式','计算式'],                                              
        'number_format_point0':[f"0.{'0'*0}_ ",'整数格式','小数点位数0','无小数点','0位小数点','小数点0位'], 
        'number_format_point1':[f"0.{'0'*1}_ ",'小数点位数1','1位小数点','有1位小数点','小数点1位'], 
        'number_format_point2':[f"0.{'0'*2}_ ",'小数点位数2','2位小数点','有2位小数点','小数点2位'], 
        'number_format_point3':[f"0.{'0'*3}_ ",'小数点位数3','3位小数点','有3位小数点','小数点3位'], 
        'number_format_point4':[f"0.{'0'*4}_ ",'小数点位数4','4位小数点','有4位小数点','小数点4位'], 
        'number_format_money2':[f'"¥"#,##0.{"0"*2}','货币格式','人民币格式'], 
        'number_format_persent2':[f'0.{"0"*2}%','百分比格式','百分比'], 
        'number_format_date_cn':['yyyy"年"m"月"d"日";@','日期格式','年月日格式','中文日期格式','中文日期'], 
        'number_format_date_en':['yyyy/mm/dd','8位日期格式','标准日期格式','英文日期','英文日期格式'],
        'number_format_time':[f'h:mm:ss;@','时间格式','时分秒格式','时分秒'], 
        'dragDir_col':['col','列方向','按列方向','沿列方向','按列方向','竖向','纵向','按竖向','按纵向','沿竖向','沿纵向','竖直方向','纵向方向','竖向方向'],
        'dragDir_row':['col','行方向','按行方向','沿行方向','按行方向','横向','水平向','按横向','按水平向','沿横向','沿水平向','水平方向'],

        #扩展中.........

}
execl_valueNames=list(execl_parValues.keys())
相关推荐
wapicn992 小时前
技术实战:基于Python的企业信息四要素核验API调用示例
开发语言·python
天空属于哈夫克32 小时前
OpenClaw 开发者进阶:如何通过 API 实现更稳定的企微自动化?
开源·自动化·企业微信
sg_knight2 小时前
外观模式(Facade)
开发语言·python·外观模式·facade
老师好,我是刘同学2 小时前
Python字典完整用法指南
python
深蓝电商API2 小时前
百度百科词条关联关系爬取
爬虫·python
Bert.Cai2 小时前
Python type函数详解
开发语言·python
李昊哲小课2 小时前
Python OS模块详细教程
服务器·人工智能·python·microsoft·机器学习
geovindu2 小时前
python: Singleton Pattern
开发语言·python·单例模式·设计模式
测试_AI_一辰2 小时前
AI测试工程笔记 04:Codex + Playwright 自动修复 UI 自动化脚本
人工智能·笔记·自动化