win10小程序(二十二)文件管理程序
一、档案管理依靠AI能解决人脑的以下困扰
1.更方便的时间逻辑检查,避免了多资料来源检查时的头昏脑涨。
2.更方便的引用联动,避免了改动一处其他各处不联动的手忙脚乱。
3.更方便的文件生成,避免了几十个文件同一个名称录入的繁琐。
4.更方便的标号目录生成,避免了分卷、分页的前后逻辑混乱。
二、存在的Risk
缺少后端。很多细化功能未实现。
例如,单独指定某段文字格式。
因为文档代码有11万字,所以传了附件,里边的程序代码在linux和windows中均使用过。
以下是程序要求:
====================================================================
'''
制作一个名叫文档管理的python程序,尽量实用类来减少代码量,通过一个py文件完成所有功能。通过tktinter界面输入参数,窗口大小默认单显示器1920*1080(获取屏幕分辨率),可拖动调整大小并记住。底色淡黄色,字体的系统判断,如果是windows,默认字体为仿宋,否则是Fangsong Ti,字号均为12号。尽量简洁,如果无错误则不要弹窗提示.
程序目的是类似一个书架,目录区域作为书架,每行就是每本书,显示书的索引(起到标注、预览作用),每本书可以通过编辑窗口来编辑其内容,然后支持导出“每本书”和目录,最后支持以树形机构的形式保存这个书架,并可以搜索比对书架上的书的内容。
程序所在目录应有“项目”和“模板”两个文件夹,如果没有则创建,支持多级目录。其中“模板”文件夹中放有docx、xlsx文档,用于程序点击输出按键时查找对应名称以提供内容替换。其中“项目”文件夹用来保存项目json文件。采用结构化的存储方式,
第1个类,定义表格类如下(只有目录区域和各个编辑窗口用到此类):
使用pandas和kk.treeview来实现表的嵌套、链接、自动更新功能,对这个表格类的一些要求如下:
表格形式列表的风格应统一。
各列表均包括标题栏、各行内容两个部分,可以设定和调整列宽,可以预先设定和手动设定标题栏的名称,有侧边滚动条。
标题栏本质上也是输入框的一部分,只是颜色底色淡黄色,而且预先写入的默认值,并可以手动拖动宽窄(以此避免标题栏和输入框的宽度不一致问题)。
表格是无边框表格,每一行的底色为白色、淡蓝色相间。
可以限制默认显示行数,应支持通过复制来添加行,总行数最多50行。并可以复制、删除或减少、移动行,可以选择编辑来打开某行的子表。子表的结构如果不做限定,则和母表一样。各行能复制、删除、上移、下移,操作时注意不要断开引用关系。注意:各行复制时,不单复制了各行的内容。目录区域复制时各行对应的编辑窗口内容一并被复制。
表左边是复选框列,默认都选中,如果不选则不参与并且此行底色整行变为灰色,并可指定其关联功能。
复选框列右边是序号列,作为第1列,且该行无内容时改行无序号,复选框、序号列的列宽默认统一为25。其他各列如果不指定尺寸则默认尺寸100,可调整。
表格中复选框可以选择,序号列随之变化,例如未选中时序号列改行无序号,其他输入框可以输入内容,也可以输入“=”之后回车,弹窗来选择链接引用其他输入框内容,这样被引用框内容变化时能实时联动。
表格的最下边一行是合计行,对应列表上边的每列,作用是判断如果该列输入的全是数字或引用返回的数字,但没有其他文本,则自动显示该列的求和结果。
第2个类,定义“概览类”,功能如下(只有引用区域和各个编辑窗口的概览区域用到此类):
第1至2行,从左到右是按钮。
第3至4行,是输入框,其名称可自定义。输入框可以输入内容,也可以输入“=”并回车,来链接引用其他输入框内容,这样被引用框内容变化时能实时联动。第1个输入框默认名称为项目名称,其输入框内容随着读取项目而自动显示当前读取的项目名称,并支持修改,保存时json文件名称按此输入框内容保存。
定义程序界面如下:
程序主界面布局分为三块区域:上边的引用区域、中间的目录区域、底部的状态栏。
定义上边的引用区域标题为“项目概览”,通过引用“概览类”来实现。该区域共四行。
第1至2行,用于执行程序操作。从左到右第一个是保存按钮,第2个是时间逻辑按钮,第3个是读取按钮,第4个是说明按钮、第5个是输出按钮。第6个是目录模板文件选择按钮。
点击目录模板文件选择按钮用于选择目录区域四个单元导出目标模板文件,文件名包括扩展名以便区分,选择模板文件后列表显示对应文件名,并在保存时存储。注意不能两个不同文档的编辑窗口中模板文件名选择框选择同格式且同一个文件名的文件(包括扩展名)。如果有则拒绝并提示。
引用区域第3行至第4行为引用列表,用于保存用于替换的重复性高的信息。区域总高度不超过150。
具体包括16个输入框,其默认名为:项目名称、归档年度、归档单位、涉及单位、被涉单位、被涉单位简称、分卷页数、总卷号、页高度、自定义0、自定义1、自定义2、自定义3、自定义4、自定义5、自定义6。
其中涉及单位的默认值“涉及局”、分卷页数的默认值220、页高度ygd默认值515。
其中,分卷页数、总卷号、页高度、自定义0、自定义1、自定义2、自定义3输入框的默认宽度定义为50。
各个列表的替换码分别为xmmc、gdnd、gddw、sjdw、bsjdw、bsjdwjc、fjys、zjh、ygd、zdy0、zdy1、zdy2、zdy3、zdy4、zdy5、zdy6。
一、点击时间逻辑按钮后,弹出时间逻辑窗口。
该窗口的内容不参与导出,包括时间校核表格。
使用表格类来实现时间校核表格。
设定标题栏为复选框、序号、题名、日期、间隔天数、工作日间隔、备注。
序号、间隔、工作日间隔标题栏因内容很少而宽度较窄宽度为15,题名及备注宽度95,
复选框默认选中,未选中则跳过该行时间计算功能。
如果输入等号“=”后回车后弹窗按顺序显示软件中引用区域、目录区域、编辑区域有输入内容的输入框,注意不要嵌套引用。也可随后手动输入修改,修改后引用关系断开。
每行的日期列支持日期格式yyyymmdd,例如20251010。
每行的间隔天数框默认写入内容,是自动计算并显示上下两个日期的间隔天数,每行的工作日间隔列默认写入内容是显示上下两个日期的工作日间隔天数(只考虑周末及中国法定假日、调休日,其中调休日如国庆调休上班算工作日),如果天数为负数则字体为红色。每行的备注列,能手工录入备注。
各行能复制、删除、上移、下移,操作时注意不要受影响断开引用关系。
二、
点击保存按钮,则按项目名称保存项目,需要检查“项目”文件夹中看是否有重名,有重名则提示覆盖还是手动另存,无重名则直接保存无提示。
三、
点击读取按钮,用来“模板”文件夹中的所有文件名,文件名包括扩展名以便区分。
四、
点击说明按钮弹出一个说明窗口,其中是一个大的输入框,可编辑输入内容,默认内容为:
“p代表^p。文字/代表删除对应文字。
输入=后回车开始引用
各个单元的目录替换码分别为mltha、mlthb、mlthc、mlthd
编辑窗口的输入区域替换码初始值是bjwh、bjzrz、bjtm、bjrq、bjys、bjmj、bjtjmc、bjbz。编辑窗口的输入区域替换码初始值是bjth
引用区域的替换码初始值是xmmc、gdnd、gddw、sjdw、bsjdw、bsjdwjc、fjys、gjj、bjth、ygd、zdy0、zdy1、zdy2、zdy3、zdy4、zdy5”
五、
点击输出按钮后,先执行保存按钮的功能,随后通过导出程序将所有编辑窗口内容、目录区域、引用区域内容按要求批量替换“模板”文件夹中放的docx、xlsx文档内容后,执行改名程序后按原文件结构统一另存到同一目录下的项目名称+“档案”文件夹。如果已存在相同的文件夹,则自动在文件夹名字后增加序号以免覆盖。可以取消选择模板,如果模板文件不存在,程序应提示并跳过。
改名程序:作用是替换后把模板文件改名后以便另存。首先判断编辑页面中,“添加名称”输入框,如果有内容,替换内容后的文件名称前增加“添加名称”的内容;如果“添加名称”没有内容,则不改名。
目录区域在引用区域下边从第5行开始向下到状态栏的区域,标题为“档案目录”,从上到下分为四个单元,。
1、四个单元分别是第一单元、第二单元、第三单元、第四单元,只有一个标题栏在第一单元列表上,各单元的列表从上到下顺序排列,之间不连续,这四个单元共同构成目录区域,输出时共同导出到一个模板文件。
2、使用表格类来实现四个目录列表。
标题栏从左到右依次是复选框、序号,文号、责任者、题名、日期、页号、密级、页数,
随后是需盖章、已盖章、需签字、已签字的复选框的标题、备注列。支持滚轮上下滚动。
标题栏默认列宽如下:复选框、序号、页数、需盖章、已盖章、需签字、已签字宽度默认为25,文号、责任者、日期、页号、密级标题栏宽度默认为100。题名、备注列表默认宽度为525。各个输入行内容均代表一个目录文件,每行对应一个编辑窗口,里边是各行的子表。
各行能复制、删除、上移、下移,操作时注意不要受影响断开引用关系。注意:复制时,不单复制了各行的内容,各行对应的编辑窗口内容一并被复制。
各行的功能要求从左到右具体如下:
复选框,默认都选中,用于确定某一行是否参与批量输出写入文件及计算页号,如果勾选则点击时参与写入及计算页号。
序号列数值等于变量xh,默认值为1,逐行累加1,如果该行复选框未勾选或本行无内容则不参与编号即跳过该行,如果分卷则xh重置为1。原理是在每卷内从1开始给个每勾选及 有内容的行编号,序号计算不受单元影响也不受分页影响,而只受到分卷判断影响,且等于目录区域内本卷第1行到本行的勾选及有内容行的数量之和。例如:第一单元页数合计小于分卷页数fjys,则第二单元的序号就不是从1开始的。
分卷页数fjys是一个数组,以便完成各卷页数、序号、页号、输出时各个分卷判断单独控制的目的。具体办法是读取分卷页数输入框内容,默认是一个数字,此时单个数字循环,如果是多个数字以英文或中文逗号分开,则多个数字循环读取,每分一卷则读取下一个数字。例如:输入框中为210,220,250时,共分了5卷,则第一卷用210,第二卷用220,第三卷用250,第四卷用210,第五卷用220。
输入区域的目录,每行可以编辑每个输入框内容,而且进入编辑窗口。
页号列的内容数值等于变量yh。
页号变量yh规则如下:
页号计算跨四个单元,也不受分页影响,而只受到分卷判断影响,且基于目录区域内各个单元中所有仅勾选行的页数在每卷内进行累加。分卷判断则仅受勾选行影响不受单元影响,基于最终写入输出文件的所有行的页数进行累加,即页号仅处理每卷中勾选了复选框的行的页数列,每行的页号从其上本卷各行的页数及本行的页数累加得出,每卷的第一行页号从1开始,如果本行页号为1,则页号是1,如果本行页数大于1,其页号为“1-{本行的页数}”;其余的行如果本行页号为1,则页号是个{本卷第一行到本行的上一行的页数之和加一}的数字,如果本行页数为空则页号也是空的,如果本行页数大于1,则页号是:“{本卷第一行到本行的上一行的页数之和加一}-{本卷第一行到本行的页数之和}”。
如果目录区域中页数列之和>=fjys,即本卷已写入的包括本行的各行页数相加的变量卷页数jys(不区分单元、只区分卷)结果如果大于等于代码fjys的值,则下一行就是新的一卷,因此下一行就是下一卷的第一行,其页号yh从1开始,且下一行序号xh从1开。即页号只有分卷才会重新计算,且重置序号变量xh值为1。
总卷号输入框中显示zjh,也就是fjh的最大值就是
状态栏在目录区域下边,位于程序界面底部,鼠标移动到输入框上时,状态栏中显示其替换码。
编辑窗口与目录区域各行目录文件所各自对应(通过便捷的办法链接起来):从上到下分为“概览区域”“输入区域”“状态栏”三个部分。窗口大小默认全屏,可缩小为900和600,不限制最小最大尺寸,并可拖动调整大小并记忆大小。
上半部分为编辑概览区域,通过引用“概览类”来实现。
这个区域的作用是,将目录区域的内容引进来,给他们替换码,来统一参与编辑窗口所对应的模板文件内容替换。
第1至行,从左到右是按钮。第1个为模板文件选择按钮点击之后选择“模板”文件夹中的文件。两个不同的编辑窗口不能选择同一个文件。第2个为调整格式复选框:默认值为选中(用于替换时选择是否带格式替换)。第3个为保存并退出功能按钮、四4个为不保存退出功能按钮。
概览区域第2至4行,是输入框,其名称可自定义。默认显示文号、责任者、题名、中文日期、页号、密级、添加名称、备注的对应名称和内容,替换码为bjwh、bjzrz、bjtm、bjrq、bjyh、bjmj、bjtjmc、bjbz。其中各个输入框默认自动连接目录区域该行的各个列的对应内容,除了其中“中文日期”是链接目录区域的该行日期之后,把默认值内容直接由日期内容转化为中文日期,例如20251010转化为2025年10月10日。其中的添加名称输入框,默认为空,用于执行批量输出程序时给模板文件添加名称,如果有内容则输出时会在另存时把内容加到模板文件原文件之前。题名默认宽度80,其他输入框默认宽度20。
编辑窗口第5行及以下直到状态栏是输入区域,使用表格类来实现。
该输入区域标题栏左到右依次是复选框、序号、十个空白标题栏、备注。
十个默认空白标题栏支持手动改名。
输入行默认显示15行。
复选框均默认选中,如果未选中,则该行在输出时不参与替换。
每行的序号列为1列,按内容自动从1开始向下累加。
对本表格的每列进行判断如果该列输入的全是数字或引用返回的数字,但没有其他文本,则自动显示该列的求和结果写入表格的最下边一行对应列。
但是编辑窗的的输入区域可以编辑每个输入框内容,但不可以再进入编辑窗口。
编辑窗口最下边一行是状态栏。
导出程序:
先按目录区域的目录行顺序执行编辑窗口批量导出,然后执行目录区域导出。注意:模板文件里的替换内容之外的其他内容均需保留,因此操作中不得覆盖内容,只能替换、插入
一、
编辑窗口导出使用单独的类实现。首先判断该窗口的“模板文件选择”是否为空,为空则跳过这个编辑窗口,如果有模板文件则继续导出,规则如下:
以其中一个目录文件关联的编辑窗口为例,先按该编辑窗口的替换文件名列表找到“模板”文件中的对应文件,然后判断文件类型、X情况,再来逐一按替换规则和转换规则进行替换。
替换规则:
替换码初始值是bjth,则代表编辑窗口的输入区域可执行被勾选的所有行、从1列开始的所有列。其数据参数形式为bj{行数范围}.{列数范围}th。例如,如果文件中为bj1-10.1th,则代表要替换的是编辑列表中1至10行的第1列内容(注意序号列为1列);bj1-5.3-4th,则代表要替换的是编辑列表中1至5行第3列到第4列的列表内容;为bj1-3.5th,则代表要替换的是编辑列表中1至3行中第5列的列表内容;为bj1-3.5-th,则代表要替换的是编辑列表中1至3行中第5列及向右之后列表内容;bj1-3.1-5th,则代表要替换的是编辑列表1至3行中第1列至5列之间列表内容;为bj1-3.1-th,则代表要替换的是编辑列表中1至3行中1列及向右所有有内容的列表内容。
替换逻辑是每个列表对应一个表格替换码,例如一个xlsx单元格中存在多个编辑替换码则分别替换。例如编辑窗口中列表第一行各列表内容从左到右分别是:“企业、开展、结果”,某个单元格“bj1.1-2th今年bj1.3th”,则该单元格替换结果为“企业开展今年结果”。可见,编辑替换码“bj1.1-2th”与“bj1.th1b1.2jth”的效果相同。
注意没有替换码的地方,不进行替换。
转换规则:
替换前均进行符号转换处理(以便将处理后的输入框内容进行替换):编辑窗口中输入区域的内容在替换时先进行符号的转换:如果表格每个格子中内容只有p就是代表回车符^p。注意是回车符不是软回车符也不是输入内容,目的是为了换行。因此输出时应转化为^p,在docx文档中就是一个回车换行;有多个p,就是代表多个回车符^p,例如pp代表文档中的^p^p两个回车符,如果在处理xlsx文件时p对应转换为CHAR(10)换行符;如果是“;/。”就是将其左侧输入的内容在执行导出时将其中的所有中文分号“;”替换为中文句号“。”;如“;/”就是将其左侧输入的内容在执行导出时将其中的所有中文分号“;”替换为空,即删除。
判断文件类型:
分辨是docx或xlsx文件。
如果是docx,则分为两种情况顺序执行情况1和情况2:
情况1:如果是docx文件,则先顺序执行判断1和判断2,如果不是则执行情况2。
判断1:如果文档中发现编辑替换码中有X参数,则对每个有X参数的编辑替码逐个执行先组合再替换。即先将复选框被勾选的输入行,在替换规则范围内,每行从左到右将内容(不包含复选框及序号)进行逐行整合、赋予格式判断、逐个替换,期间不忽略内容为空的列表而是将其视为空,例如:对于文档发现带X参数的替换码,则逐行读取每行内容,如果有后缀,例如bjX1-3.2th,则只逐行处理1至3行的第2列。bjX1-3.2-4th,则只逐行处理1至3行的第2至4列。
逐行整合:
第一个输入行的所有内容经转化为“一、基本情况。^p(一)资产负债^p净资产。^p”,第二个输入行的所有内容经转化为“二、其他情况。^p(二)权益负债^p收益。^p”,则首先认为:“一、基本情况。”和“二、其他情况。”以“一、二、三、”这样的每段开头中文序号带中文顿号开始的文字段是一级标题,目录级别为1级,格式为黑体不加粗,首行缩进2个字符。其次“(一)资产负债”和“(二)权益负债”这样以“(一)(二)(三)”这样的每段开头中文序号带左右括号的开始的文字段为二级标题,目录级别为2级,从(开始到,回车或句号或冒号结尾范围内的文字格式为楷体_GB2312不加粗,目录级别为2级,左对齐,首行缩进2个字符。
最后认为:“净资产。”没有以上两种特征的文字段,目录级别是正文,格式为仿宋_GB2312不加粗,首行缩进2个字符。如果模板文档中已经定义了标题样式则覆盖。
则在文档中X字母以及替换码,将被替换为:
“一、基本情况
(一)资产负债
净资产。
二、其他情况
(一)权益负债。
收益。”
至此,该文字行的已调整好格式并暂存,随后以此类推处理以下的各个行按格式判断的要求调整好格式后加入暂存,全部行处理完毕后才将编辑替换码替换为暂存内容。然后查找并处理下一个有X参数的替换码。
赋予格式判断:
该编辑窗口的调整格式复选框如果不选中,则以无格式文本粘贴以延续文档原有格式,如果选中则进行替换并执行调整格式功能。最后,将编辑窗口引用列表的内容按对应关系统一替换文档中的所有替换码(可能同样的替换码会有多个)。
判断2:优先处理完所有X判断后,如果判断文档中所有剩余的编辑替换码没有X参数了,则执行模板先分份后循环替换。
具体如下:首先判断编辑窗口中已勾选的,替换码对应的范围的输入区域列表中的有内容且勾选的总行数,这就是要替换几份,然后将文档内容保持原格式在缓存中复制为对应份数(为了保证输出格式可以先不复制分页符后每份末尾添加分页符),最后一份如果最后有分页符则删除该分页符。期间第一份文档的编辑替换码按列号作为无格式文本逐个写入编辑窗口中列表对应行的内容,第二份文档的编辑替换码替换为下一行的内容以此类推完成所有页的替换(如果每一行替换范围是多个列则从左到右顺序读取写入)。
例如,如果编辑窗口中列表第一行各列表内容从左到右分别是:“企业、开展、结果”。文档内容第一份为“bj1.1th今年bj1.2th了。获得bj1.3th。”则执行替换规则第一页的替换结果为“企业今年开展了。获得结果。”编辑窗口中列表第二行各列内容从左到右分别是:“单位、执行、结果”。文档内容第二份的替换结果为“单位今年执行了。获得结果。”
然后将各份文档保留原格式按循序合并为一个文档。
然后将文档中所有“ 年 月 日”无格式替换为“日期”的内容,注意不改变文档中文本格式。
最后,将引用区域的内容按对应关系统一替换文档中的替换码。至此,完成了编辑窗口的导出。
情况2:如果是xlsx文件则先执行判断后按替换规则、转换规则进行替换:
首先得出编辑窗口的输入区域中有内容且勾选的输入行数,然后将xlsx文档内容对应行保持原格式逐步向下逐行复制对应数量的行,期间每复制一行,就把有编辑替换码的内容进行替换,然后对应复制后替换下一行,逐行进行。
注意不改变文件涉及行的各单元格原格式,维持列宽不变。然后将文档中所有“ 年 月 日”无格式替换为“日期”的内容,注意不改变文档中文本格式。接着将引用区域的列表的内容统一替换该文档中的替换码。
至此,完成了一个编辑窗口的导出。
二、
目录区导出规则如下:
通过单独的类实现。要求是首先判断目录模板文件是否存在,不存在则跳过,存在则继续按照顺序对档案目录四个单元窗口的列表内容逐个模板文件中,其四个单元的目录替换码分别为mltha、mlthb、mlthc、mlthd。然后按导出规则、转换规则、表头复制、替换写入、逐行进行分离判断把文件找到的编辑替换码逐行、从左到右替换,每行循环。
未勾选的行则跳过不导出。注意未勾选的行的编辑窗口信息正常导出。
导出规则如下:
以其中第一单元为例,目录替换码是mltha,则代表可执行被勾选的从1行及其向下的所有行、从1列开始及其向右的所有列。其数据参数形式为ml{行数范围}+.+{列数范围}tha。如果文件中为ml1-5.1tha,则代表要替换的是目录列表中1至5行的第1列输入框内容;为ml1-5.3-4tha,则代表要替换的是编辑列表中1至5行第3列到第4列内容;为ml1-3.5tha,则代表要替换的是编辑列表中1至3行中第5列;为ml1-5.5-tha,则代表要替换的是编辑列表中1至5行中第5列及其向右列的内容;为ml1-5.1-5tha,则代表要替换的是编辑列表中1至5行中第1列至5列。
表头复制:
先复制文档中1至6行的表头内容到缓存中以便随后的多次插入,接着执行写入程序操作,最后执行输出程序。保留原格式,有单元边框,保留里边的合并单元格。
替换写入:
模板文档中各行查找单元格内的目录替换码并按照与编辑窗口导出的情况2相同方法(按目录区域先从左到右再从上到下顺序把勾选行内容按导出规则替换输出文件的第一个工作表)。注意替换时维持原单元格的字体、字号、左右居中等格式不变。
例如:某一行有两个单元格存在替换码:ml1-2.1tha、ml1-2.2tha,则首先得出编辑窗口的输入区域中有内容且勾选的输入行数为1、2两行,然后将xlsx文档内容对应行保持原格式逐步向下逐行复制对应数量的两行,期间此行对应替换ml1.1tha、ml1.2tha内容每复制一行,就把有编辑替换码的内容进行替换,然后对应复制后在下边插入复制内容后替换下一行对应替换ml2.1tha、ml2.2tha,如此逐行进行。
并且每写一行后执行一次分离判断。
分离判断:
每写入一行之后为了正确分页、分卷,都要首先进行一次分离判断,包括以下内容:
1、行高合计:
行高变量为DHG,用于通过每行“题名列”内容的字数确定xlsx文件中的行高,算法为每个汉字和标点算1,英文、数字算0.5个字数,每15为一个级别。如该行题名列字数≤15,行高DHG=15*1+10=25,16≤字数≤30算两行,行高DHG=15*2+10=40,,31≤字数≤45算三行,行高DHG=15*3+10=55。以此类推,单位为磅。{最少为1且取整数:字数/15}*15+10
行高变量BHG用于通过每行的“文号列”单元格确定行高,算法为每6个字一个级别每个汉字和标点算1,英文、数字算0.5个字数。如该行文号列字数≤12,行高BHG=10*1+10=25,13≤字数≤17算两行,行高BHG=15*2+10=40,,31≤字数≤45算三行,行高BHG=15*3+10=55。以此类推,单位为磅。{最少为1且取整数:字数/6}*15+10
行高变量CHG用于通过每行的“责任者列”单元格确定行高,算法为每4个字一个级别,每个汉字和标点算1,英文、数字算0.5个字数。如该行责任者列字数≤4,行高CHG=10*1+10=25,5≤字数≤8算两行,行高CHG=15*2+10=40,9≤字数≤12算三行,行高CHG=15*3+10=55。以此类推,单位为磅。{最少为1且取整数:字数/4}*15+10
该行的行高HG为该行DHG、BHG、CHG的最大值,调整该行行高为HG,本页内截止本行输入的所有行高HG累加的结果再加上(25*Ns)为行高合计值就是HGhj。Ns初始为0且小于5,模板文件中每个单元的开头初始默认有一个高度25的行,如果在每页有一个单元的开头行Ns就加1,有两个就加2。因此,Ns默认值为0,本页如果每开始写入一个新的单元Ns+1,并且下一页Ns会清零。
分卷数(即卷号)变量“fjh”初始值为1。页码变量ym的初始值为1。
2、结尾操作:
如果写完一行之后判断是否完成了四个单元的所有写入,没完成开始分卷判断,完成了则开始结尾操作。
将当前写入行的向下添加wc行,行高25,并将这些行单元格边框设置为细边框,并wc的值为:(ygd-HGhj)/25的结果取 整数,结果为负数则不添加行。然后将文档中fjh,替换写入其中分卷数的变量fjh的值,然后将文件中所有zjh替换为fjh的值(即最后的总卷数就是整体总卷号)。执行页码操作。
然后然后跳过分卷判断和分页判断,执行输出程序结束目录区导出程序。
3、分卷判断:
如果本卷已写入的包括本行的各行页数相加的变量卷页数jys(不区分单元、只区分卷)结果如果不大于代码fjys的值,则不执行分卷操作,转而执行分页判断。大于分卷页数的代码fjys的值,则执行分卷判断。
首先当前写入行的向下添加wc行,行高25,并将这些行单元格边框设置为细边框。并wc的值为:(ygd-HGhj)/25的结果取整数,结果为负数则不添加行。执行然后将文档中的fjh,替换写入其中分卷数的变量fjh的值,执行页码操作。
重置页码“ym”为1,重置jys的值、行高合计HGhj的值为0,分卷数(即卷号)变量“fjh”值加1。
在页码操作行的下一行插入分页符,接着在下边行插入之前复制的1至6行的表头内容。
跳过分页判断,直接进入目录区导出程序的下一次循环。
4、分页判断:
判断当前行的本页HGhj如果小于页高度ygd的值,继续写入下一行,否则执行分页判断。
执行一次页码操作。
随后的页码变量“ym”累加1,重置HG、Ns的值为0。在页码操作行的下一行插入分页符,接着在分页符下边插入之前复制的1至6行的表头内容,然后进入目录区导出程序的下一次循环。
5、页码操作
在HGhj不小于页高度ygd的值的行或添加wc行之后的下边插入一行,无外边框,行高14,在F列写入内容为“第{ym}页”,格式为宋体1不加粗2,该内容左右居中。
6、输出程序:
结尾操作后,将引用区域的列表的内容按对应关系统一替换该文档中的替换码。
'''
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)