c# 删除了generic.xmal文件_第二课 如何切割大文件(Excel)

    各位同胞,首先感谢大家的关注,因为这是我更新下去的动力,笔芯。

    那么,这节课我们来说说如何用云扩RPA来切割有很多行数据的Excel文件,比如在实际项目中我们拿到一个有50000多行数据的Excel文件,而文件太大一方面导致RPA在读写时会严重影响速度,(当然影响速度并不是RPA本身的问题,我们可以尝试用手动打开一个有这么多行数据的Excel文件,速度也会很慢。)另外一方面有些网页只支持一次性处理5000多条数据,举例:企查查批量查询企业信息时明确写着一次处理5000条数据,那么在这种情况下,切割文件是必须要做的事,也因此,这成为我们本节课要讲的内容的一个重要理由(该内容为一个实际业务的一部分)。

    接下来,我们就看看具体操作。

准备工作

    1)准备开发流程的电脑,请打开云扩学院链接查看云扩RPA编辑器运行的硬件&软件要求(https://academy.encoo.com/zh-cn/wiki/Studio/HarewareAndSoftwareRequirements.md?uuid=1bb922bd-c25d-4921-9241-f13ee45d295f)

    2)打开云扩官网(https://www.encoo.com/)下载编辑器并安装。

本次课程介绍:

    1)流程名称:数据切割机器人,该机器人可以把有很多行数据的Excel文件依据用户自定义的数据行数来切割为多个文件,方便后续流程的操作。

原文件如下图所示,请看文件大小,内含51360行数据:

71e9d4271abb2e5676374f1f9a5dc320.png

流程运行后文件切割为很多小文件:

dac96e49c0b234ae3dffd1a6a76a88b4.png

    2)流程开发设计如下:

8758995cac791a5716b998a76fbb5ab3.png

大家也可以想想还有什么其他方法来切割,重点是流程设计要合理,能使机器人处理数据时尽量节省时间,这也是大部分用户所关注的点。

    3)流程开发步骤:

    打开云扩编辑器,选择“项目”,并点击“新建项目”进行创建项目。

2ec5fa8c6e983efd83503098c4bc4a98.png

a. “打开Excel文件、获取末行号,末列号”部分

打开MainFlow窗口,拖入Office Excel中的“打开/新建”组件,设置原文件路径参数/变量:

45339bfa876dead165b530c71e36becd.png

拖入“获取末行号”并设置相应属性:

f1def47e3eda5a866f0dfef33d59fd6c.png

以相同方式处理“获取末列号”:

379a4bd9571dcca54908332a7c6009b1.png

因为获取的末列号为数字,我们需要转换为Excel对应的列号字母,如列号1对应A列,我们可以用"执行C#代码"控件来转换,写一小段代码:

422dd69162c1033122ffb57e53965bc9.png

附上代码段:

 StringBuilder letter = new StringBuilder();do {
        --num;int mod = num % 26; // 取余
        letter.Append((char) (mod + 'A')); // 组装字符串
        num = (num - mod) / 26; // 计算剩下值
    } while (num > 0);char[] arr = letter.ToString().ToCharArray();
Array.Reverse(arr);
line = new String(arr);
Console.WriteLine(line);

b. “更改原文件名”部分

拖入“赋值”组件定义“新文件路径”,为方便后续循环操作,我们将原文件名称后面添加文件序号,以此来区别新增文件。

e1633b9cb07ada8361318d048eeca1f1.png

附上将来会有用的C#获取文件路径、文件名、文件后缀等方法

string filePath = "C:\\1.txt";

string str = "获取文件的全路径:" + Path.GetFullPath(filePath); 

str = "获取文件所在的目录:" + Path.GetDirectoryName(filePath); 

Console.WriteLine(str);

str = "获取文件的名称含有后缀:" + Path.GetFileName(filePath); 

str = "获取文件的名称没有后缀:" + Path.GetFileNameWithoutExtension(filePath); 

str = "获取路径的后缀扩展名称:" + Path.GetExtension(filePath); 

str = "获取路径的根目录:" + Path.GetPathRoot(filePath); 

拖入“复制/移动文件” 控件并设置对应变量

0eb3719a7c150956ef2cc41f2139d915.png

c.“根据自定义数据行数换算循环次数” 部分

拖入“循环操作(While)”控件,并输入循环条件。(循环次数换算思路:如果原文件数据最大行数为65,我们希望切割为每个文件含有10行数据的小文件,那么需要循环6次,加上原来的1个文件,总共切割为7个小文件(65/10 = 6余5),用C#即为向上进位取整,用方法Math.Ceiling)

8ea5a559c923ad89c50ee884da1e2c03.png

d.从前一个文件中读取需要分割的部分

c9fc552c4effe83ac4e7dd34ab09d94a.png

6ba035aafbd5f271b5819158f8dcecad.png

e.“新建文件并粘贴数据”部分

新建文件之前首先需要更改新文件路径,之前定义的文件名中加了文件序号,那么现在可以通过递增文件序号来给新文件命名。

用“赋值”控件来操作,如下图所示:

17d6e07eaf4a2bf445473ecd8ffd8595.png

用“打开/新建”控件新建文件:

4d8328dc7f0ea548466da61f3c9a6a14.png

用“写入区域”控件写入上步操作中读取的列头与数据:

c5e398880a91ba610f1ea6ebb9d32d2a.png

同样方法写入数据:

6ffbe2f4e2268aa50f20d4b9d32bcce8.png

f.从前一个文件中删除5000行以外的数据

这部分我们用“执行宏”控件来完成,当然,也可以用Office Excel中的“删除数据”来操作。只是在项目中有很多同学可能会用到执行宏,那么顺便讲讲“执行宏”控件该怎么使用。

首先,要记得,我们在上步操作“打开/新建”控件操作中勾选“启用宏”属性,如下图所示:

5583d51e07d55c0a2be45b59b950cd90.png

手动打开Excel,并录制删除数据的宏,根据需要定义变量:

拖入“执行宏”组件

0e589a7e7e421917b72cdadbdd3508ef.png

至此,整个流程已开发完毕,可进行运行与调试。祝顺利!

若有问题,欢迎留言提问,若有更为简洁的开发思路,请直接砸向我吧,一起学习、一起进步!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值