吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4355|回复: 21
收起左侧

[其他原创] 【友友 RPA】零基础小白系列分享:如何将只有两列的 Excel 一键自动调整为一页打印

  [复制链接]
lisaisacat 发表于 2022-6-8 17:49
本帖最后由 lisaisacat 于 2022-7-13 18:17 编辑

前情提要
有个朋友经常需要打印材料提交申报各种项目,据说经常推着小车去打印店装订。
于是有一天她忽然问我,说有个 Excel,好几千行,是从后台导出的数据,只有两列,但是要打印出来就有一百多页。
看起来很丑不说,还很浪费纸张,就问我有没有什么办法能快速整理下表格变成一页可以打印多列。
其实本来挺简单的,我当时想的就是让她先试试一张可以最多打印几列,然后手动把表格拆分一下不就好了吗。
比如一页横着可以打印 8 列,一共 800 行的话那就把第 201 行到 400 行剪切粘贴到第 3、4 列,以此类推。
然而问题又来了:
1. 有的文件行数太多,还不是 4 的整数,这个问题也不太大
2. 还要保留标题行
3. 有的文件太大了人工操作特别慢,还容易误操作。

因为最近正好在研究 RPA(机器人流程自动化),就写了一个流程给她用,只需要选择自己要拆分的 Excel 文件,自动实现计算、剪切、填写标题行等功能。
image.png

图片演示
image.png
比如表格原来长这样(演示用文件,随便瞎写的),直接打印是 14 页
image.png

打印预览发现横向最多一页打印 6 列,调整之后打印预览为 5 页
image.png image.png

开发环境
Win10,Excel,友友编辑器 SDK 1.0.2.14(测试包 https://share.weiyun.com/0dfrllmA)
因为很多人问,这里特别说明:这个 RPA 是免费的!公测阶段注册就是专业版~


运行环境
Win10,Excel

项目压缩包
Excel 一页打印 (1).zip (38.04 KB, 下载次数: 46)
也可以点击下面的链接下载,因为可以实时更新,肯定是最新版
image.png
下载链接:https://console.yoyorpa.com/process_share?id=dXeGgjSA58uBT4WsdBknQclPEBU0Uks8hGQy1H96QEHKJE

使用方法
image.png

部分源码
[XML] 纯文本查看 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <rpa>
    <variable key="总行数" type="string" value=""/>
    <variable key="第一次剪切结束行号" type="string" value=""/>
    <variable key="第二次剪切结束行号" type="string" value=""/>
    <variable key="第二次剪切开始行号" type="string" value=""/>
    <variable key="第一次剪切开始行号" type="string" value=""/>
    <variable key="文件" type="string" value=""/>
    <variable key="每次复制行数" type="string" value=""/>
    <variable key="拆分后各列行数" type="string" value=""/>
    <variable key="拆分后各列行数" type="int" value=""/>
    <node id="dialog.openFile1645503914054" type="func" title="选择文件" name="dialog.openFile" out="文件" lineNum="1" displayTitle="选择文件:标题"请选择要处理的Excel文档",文件类型Excel工作簿(xls,csv,xlsx),单选,默认路径"./res",返回文件路径文件">
      <param name="title" type="string" text="标题" value=""请选择要处理的 Excel 文档""/>
      <param name="type" type="int" text="文件类型" value="1"/>
      <param name="count" type="int" text="选择数量" value="0"/>
      <param name="path" type="string" text="文件夹" value=""./res""/>
      <param name="timeout" type="int" value="" text="超时"/>
      <param name="beforeDelay" type="int" value="" text="运行前等待"/>
      <param name="afterDelay" type="int" value="" text="运行后等待"/>
      <param name="errorPolicy" type="int" value="0" text="运行失败后"/>
    </node>
    <comment id="comment4552517405625">使用方法:给【打开 Excel 文件】选择文件后点击运行</comment>
    <container id="openExcel4342694025421" title="打开 Excel 文件" type="excel" typeText="起始单元格" file="文件" fileText="文件" isVisible="1" isVisibleText="前台可见" isAutoSave="1" isAutoSaveText="自动保存" autoRelease="0" autoReleaseText="结束后关闭" saveBeforeClose="1" saveBeforeCloseText="关闭前保存" isCreate="0" isCreateText="新建文件" isReadOnly="0" isReadOnlyText="只读" errorPolicy="0" errorPolicyText="运行失败后" lineNum="3" displayTitle="打开Excel文件:文件">
      <comment id="comment7658599390911">注释:计算行数</comment>
      <node id="excel.getRowsCount3683750510147" type="func" title="行数" name="excel.getRowsCount" out="总行数" lineNum="5" displayTitle="行数:返回行数总行数">
        <param name="sheetName" type="string" text="表名" value=""/>
        <param name="column" type="string" text="列" value=""/>
        <param name="timeout" type="int" value="" text="超时"/>
        <param name="beforeDelay" type="int" value="" text="运行前等待"/>
        <param name="afterDelay" type="int" value="" text="运行后等待"/>
        <param name="errorPolicy" type="int" value="0" text="运行失败后"/>
      </node>
      <node id="log.print1633400319533" type="func" title="输出日志" name="log.info" out="" lineNum="6" displayTitle="输出日志:"总行数:"+总行数">
        <param name="message" type="string" text="日志" value=""总行数:"+总行数"/>
      </node>
      <comment id="comment1654681116565">备注:如果拆成 8 列就输入 4</comment>
      <node type="func" id="assign1645502873092" title="赋值" name="assign" out="拆分后各列行数" lineNum="8" displayTitle="赋值:拆分后各列行数=总行数/3">
        <expression>总行数/3</expression>
        <param name="timeout" type="int" text="超时" value=""/>
        <param name="beforeDelay" type="int" text="运行前等待" value=""/>
        <param name="afterDelay" type="int" text="运行后等待" value=""/>
        <param name="errorPolicy" type="int" text="运行失败后" value="0"/>
      </node>
      <node id="math.format1645684789821" type="func" title="数字格式转换" name="math.format" out="拆分后各列行数" lineNum="9" displayTitle="数字格式转换:数字拆分后各列行数,数字格式整数,返回文本拆分后各列行数">
        <param name="num" type="int" text="转换前数字" value="拆分后各列行数"/>
        <param name="type" type="int" text="转换格式" value="0"/>
        <param name="timeout" type="int" value="" text="超时"/>
        <param name="beforeDelay" type="int" value="" text="运行前等待"/>
        <param name="afterDelay" type="int" value="" text="运行后等待"/>
        <param name="errorPolicy" type="int" value="0" text="运行失败后"/>
      </node>
      <node type="func" id="assign1645503353806" title="赋值" name="assign" out="每次复制行数" lineNum="10" displayTitle="赋值:每次复制行数=拆分后各列行数-1">
        <expression>拆分后各列行数-1</expression>
        <param name="timeout" type="int" text="超时" value=""/>
        <param name="beforeDelay" type="int" text="运行前等待" value=""/>
        <param name="afterDelay" type="int" text="运行后等待" value=""/>
        <param name="errorPolicy" type="int" text="运行失败后" value="0"/>
      </node>
      <node id="log.print2060229618238" type="func" title="输出日志" name="log.info" out="" lineNum="11" displayTitle="输出日志:"每次复制行数:"+每次复制行数">
        <param name="message" type="string" text="日志" value=""每次复制行数:"+每次复制行数"/>
      </node>
      <node id="log.print8988539181788" type="func" title="输出日志" name="log.info" out="" lineNum="12" displayTitle="输出日志:"拆分后各列行数:"+拆分后各列行数">
        <param name="message" type="string" text="日志" value=""拆分后各列行数:"+拆分后各列行数"/>
      </node>
      <comment id="comment5830482162269">注释:复制粘贴表头</comment>
      <node id="excel.copyRangeContent5995672596518" type="func" title="Excel 复制" name="excel.copyRangeContent" out="" lineNum="14" displayTitle="Excel复制:复制区域,从"A1"到"B1"">
        <param name="sheetName" type="string" text="表名" value=""/>
        <param name="type" type="int" text="范围" value="2"/>
        <param name="startCell" type="string" text="起始单元格" value=""A1""/>
        <param name="endCell" type="string" text="结束单元格" value=""B1""/>
        <param name="timeout" type="int" value="" text="超时"/>
        <param name="beforeDelay" type="int" value="" text="运行前等待"/>
        <param name="afterDelay" type="int" value="" text="运行后等待"/>
        <param name="errorPolicy" type="int" value="0" text="运行失败后"/>
      </node>
      <node id="excel.pasteRangeContent1134041805823" type="func" title="Excel 粘贴" name="excel.pasteRangeContent" out="" lineNum="15" displayTitle="Excel粘贴:单元格"C1"">
        <param name="destCell" type="string" text="单元格" value=""C1""/>
        <param name="sheetName" type="string" text="表名" value=""/>
        <param name="timeout" type="int" value="" text="超时"/>
        <param name="beforeDelay" type="int" value="" text="运行前等待"/>
        <param name="afterDelay" type="int" value="" text="运行后等待"/>
        <param name="errorPolicy" type="int" value="0" text="运行失败后"/>
      </node>
      <node id="excel.pasteRangeContent9943228848759" type="func" title="Excel 粘贴" name="excel.pasteRangeContent" out="" lineNum="16" displayTitle="Excel粘贴:单元格"E1"">
        <param name="destCell" type="string" text="单元格" value=""E1""/>
        <param name="sheetName" type="string" text="表名" value=""/>
        <param name="timeout" type="int" value="" text="超时"/>
        <param name="beforeDelay" type="int" value="" text="运行前等待"/>
        <param name="afterDelay" type="int" value="" text="运行后等待"/>
        <param name="errorPolicy" type="int" value="0" text="运行失败后"/>
      </node>
      <comment id="comment9553838639312">注释:复制粘贴数据</comment>
      <node type="func" id="assign4872698685127" title="赋值" name="assign" out="第一次剪切开始行号" lineNum="19" displayTitle="赋值:第一次剪切开始行号=拆分后各列行数+2">
        <expression>拆分后各列行数+2</expression>
        <param name="timeout" type="int" text="超时" value=""/>
        <param name="beforeDelay" type="int" text="运行前等待" value=""/>
        <param name="afterDelay" type="int" text="运行后等待" value=""/>
        <param name="errorPolicy" type="int" text="运行失败后" value="0"/>
      </node>
      <node type="func" id="assign9178586789959" title="赋值" name="assign" out="第一次剪切结束行号" lineNum="20" displayTitle="赋值:第一次剪切结束行号=第一次剪切开始行号+每次复制行数">
        <expression>第一次剪切开始行号+每次复制行数</expression>
        <param name="timeout" type="int" text="超时" value=""/>
        <param name="beforeDelay" type="int" text="运行前等待" value=""/>
        <param name="afterDelay" type="int" text="运行后等待" value=""/>
        <param name="errorPolicy" type="int" text="运行失败后" value="0"/>
      </node>
      <node id="excel.copyRangeContent1402565312902" type="func" title="Excel 复制" name="excel.copyRangeContent" out="" lineNum="21" displayTitle="Excel复制:复制区域,从"A"+第一次剪切开始行号到"B"+第一次剪切结束行号">
        <param name="sheetName" type="string" text="表名" value=""/>
        <param name="type" type="int" text="范围" value="2"/>
        <param name="startCell" type="string" text="起始单元格" value=""A"+第一次剪切开始行号"/>
        <param name="endCell" type="string" text="结束单元格" value=""B"+第一次剪切结束行号"/>
        <param name="timeout" type="int" value="" text="超时"/>
        <param name="beforeDelay" type="int" value="" text="运行前等待"/>
        <param name="afterDelay" type="int" value="" text="运行后等待"/>
        <param name="errorPolicy" type="int" value="0" text="运行失败后"/>
      </node>
      <node id="excel.pasteRangeContent2427778283906" type="func" title="Excel 粘贴" name="excel.pasteRangeContent" out="" lineNum="22" displayTitle="Excel粘贴:单元格"C2"">
        <param name="destCell" type="string" text="单元格" value=""C2""/>
        <param name="sheetName" type="string" text="表名" value=""/>
        <param name="timeout" type="int" value="" text="超时"/>
        <param name="beforeDelay" type="int" value="" text="运行前等待"/>
        <param name="afterDelay" type="int" value="" text="运行后等待"/>
        <param name="errorPolicy" type="int" value="0" text="运行失败后"/>
      </node>
      <node id="delay1644919580367" type="func" title="等待" name="delay" out="" lineNum="23" displayTitle="等待:3秒">
        <param name="delay" type="int" text="等待秒数" value="3"/>
        <param name="timeout" type="int" value="" text="超时"/>
        <param name="beforeDelay" type="int" value="" text="运行前等待"/>
        <param name="afterDelay" type="int" value="" text="运行后等待"/>
        <param name="errorPolicy" type="int" value="0" text="运行失败后"/>
      </node>
      <node type="func" id="assign7359161588215" title="赋值" name="assign" out="第二次剪切开始行号" lineNum="24" displayTitle="赋值:第二次剪切开始行号=第一次剪切结束行号+1">
        <expression>第一次剪切结束行号+1</expression>
        <param name="timeout" type="int" text="超时" value=""/>
        <param name="beforeDelay" type="int" text="运行前等待" value=""/>
        <param name="afterDelay" type="int" text="运行后等待" value=""/>
        <param name="errorPolicy" type="int" text="运行失败后" value="0"/>
      </node>
      <node type="func" id="assign6850443934763" title="赋值" name="assign" out="第二次剪切结束行号" lineNum="25" displayTitle="赋值:第二次剪切结束行号=第二次剪切开始行号+每次复制行数">
        <expression>第二次剪切开始行号+每次复制行数</expression>
        <param name="timeout" type="int" text="超时" value=""/>
        <param name="beforeDelay" type="int" text="运行前等待" value=""/>
        <param name="afterDelay" type="int" text="运行后等待" value=""/>
        <param name="errorPolicy" type="int" text="运行失败后" value="0"/>
      </node>
      <node id="excel.copyRangeContent5531056372204" type="func" title="Excel 复制" name="excel.copyRangeContent" out="" lineNum="26" displayTitle="Excel复制:复制区域,从"A"+第二次剪切开始行号到"B"+第二次剪切结束行号">
        <param name="sheetName" type="string" text="表名" value=""/>
        <param name="type" type="int" text="范围" value="2"/>
        <param name="startCell" type="string" text="起始单元格" value=""A"+第二次剪切开始行号"/>
        <param name="endCell" type="string" text="结束单元格" value=""B"+第二次剪切结束行号"/>
        <param name="timeout" type="int" value="" text="超时"/>
        <param name="beforeDelay" type="int" value="" text="运行前等待"/>
        <param name="afterDelay" type="int" value="" text="运行后等待"/>
        <param name="errorPolicy" type="int" value="0" text="运行失败后"/>
      </node>
      <node id="excel.pasteRangeContent7061692612594" type="func" title="Excel 粘贴" name="excel.pasteRangeContent" out="" lineNum="27" displayTitle="Excel粘贴:单元格"E2"">
        <param name="destCell" type="string" text="单元格" value=""E2""/>
        <param name="sheetName" type="string" text="表名" value=""/>
        <param name="timeout" type="int" value="" text="超时"/>
        <param name="beforeDelay" type="int" value="" text="运行前等待"/>
        <param name="afterDelay" type="int" value="" text="运行后等待"/>
        <param name="errorPolicy" type="int" value="0" text="运行失败后"/>
      </node>
      <node id="delay1644919585473" type="func" title="等待" name="delay" out="" lineNum="28" displayTitle="等待:3秒">
        <param name="delay" type="int" text="等待秒数" value="3"/>
        <param name="timeout" type="int" value="" text="超时"/>
        <param name="beforeDelay" type="int" value="" text="运行前等待"/>
        <param name="afterDelay" type="int" value="" text="运行后等待"/>
        <param name="errorPolicy" type="int" value="0" text="运行失败后"/>
      </node>
      <comment id="comment2926258301094">注释:清除第一行和第二行内容</comment>
      <node id="excel.deleteSelectRange2379560676266" type="func" title="清除 Excel" name="excel.deleteSelectRange" out="" lineNum="34" displayTitle="清除Excel:清除区域,从"A"+第一次剪切开始行号到"B"+总行数的全部">
        <param name="startCell" type="string" text="起始单元格" value=""A"+第一次剪切开始行号"/>
        <param name="endCell" type="string" text="结束单元格" value=""B"+总行数"/>
        <param name="type" type="int" text="范围" value="2"/>
        <param name="sheetName" type="string" text="表名" value=""/>
        <param name="optFlag" type="string" text="清除" value="1"/>
        <param name="timeout" type="int" value="" text="超时"/>
        <param name="beforeDelay" type="int" value="" text="运行前等待"/>
        <param name="afterDelay" type="int" value="" text="运行后等待"/>
        <param name="errorPolicy" type="int" value="0" text="运行失败后"/>
      </node>
      <comment id="comment5338394134799">注释:处理列宽</comment>
      <node id="excel.setColumnWidth1645502592842" type="func" title="设置列宽" name="excel.setColumnWidth" out="" lineNum="36" displayTitle="设置列宽:范围:所有列,宽度根据内容自适应">
        <param name="sheetName" type="string" text="表名" value=""/>
        <param name="scope" type="int" text="范围" value="3"/>
        <param name="type" type="int" text="宽度" value="0"/>
        <param name="timeout" type="int" value="" text="超时"/>
        <param name="beforeDelay" type="int" value="" text="运行前等待"/>
        <param name="afterDelay" type="int" value="" text="运行后等待"/>
        <param name="errorPolicy" type="int" value="0" text="运行失败后"/>
      </node>
    </container>
  </rpa>

免费评分

参与人数 2吾爱币 +3 热心值 +1 收起 理由
陈家丶妖孽 + 1 刚刚注册,专业版1年有效期
38342175 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| lisaisacat 发表于 2022-6-9 11:09
RueDes 发表于 2022-6-9 10:55
把Excel复制到 word中  利用word的分栏功能  应该也可以解决,当然啦楼主的方法更具创造价格,我只会用笨 ...

条条大路通罗马~哈哈哈 只要能解决问题就是好方法
RueDes 发表于 2022-6-9 10:55
本帖最后由 RueDes 于 2022-6-9 10:57 编辑

把Excel复制到 word中  利用word的分栏功能  应该也可以解决,当然啦楼主的方法更具创造价格,我只会用笨方法
anbisi 发表于 2022-6-8 18:18
ffdn2002 发表于 2022-6-8 19:48
谢谢楼主,麻烦发下成品吧,急需
a147888123 发表于 2022-6-8 22:24
有没有RPA教程
竹轩 发表于 2022-6-9 08:18
看起来不错哦,RPA确实很“诱人”。多谢LZ分享
RoyPenn 发表于 2022-6-9 08:35
我想知道 这个rpa免费吗
szhanyutian 发表于 2022-6-9 08:40
谢谢分享,楼主辛苦了。RPA提供了一种解决问题的方法
38342175 发表于 2022-6-9 09:31
来个成品方便些
y4788888 发表于 2022-6-9 09:34
什么rpa软件
 楼主| lisaisacat 发表于 2022-6-9 10:38
anbisi 发表于 2022-6-8 18:18
谢谢楼主分享,有没有成品

上面发的压缩包链接就是成品啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:14

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表