SAP Build4-office 操作

1. 邮件操作

1.1 前期准备

商店中找到outlook的sdk,添加到build中
在这里插入图片描述
在process中添加outlook的SDK
在这里插入图片描述
在这里插入图片描述
电脑上装了outlook的邮箱并且已经登录
在这里插入图片描述
我用个人foxmail邮箱向outlook发了一封带附件的销售订单邮件,就以此作为例子
在这里插入图片描述

1.2 搜索邮件

搜索有两层,第一层是按邮箱属性搜索,第二层再按邮件属性搜索
第一层邮箱属性涉及的就是待搜索的邮箱账号、邮箱内的文件夹类型(Inbox,Draft,Junk)、邮箱内文件夹名
对搜索到的结果可以根据收信时间和邮件标题做升序或降序排序
在这里插入图片描述
第二层邮件属性搜索就可以根据邮件的特征进行搜索
在这里插入图片描述
邮件搜索标准datatype:https://help.sap.com/doc/e57d7b179db649e6b5f2d26d9894f9d9/Cloud/en-US/datatypes/emailSearchCriterion.html
在这里插入图片描述
这里就按包含Files of Sales Order的标题的邮件进行搜索了
若需遍历邮箱邮件则如下图所示
在这里插入图片描述

1.3 保存邮件附件

简单来说就是在原本遍历邮件的基础上,加上保存附件的操作
下载前最好根据index去动态创建文件夹以区分不同的邮件,常规操作是在指定的文件夹目录下,创建年月日文件夹,再创建索引文件夹,每次执行前将索引文件夹清空
在这里插入图片描述
保存附件时填入刚才创建的文件夹即可,可以根据文件后缀过滤所需的文件类型
在这里插入图片描述

1.4 读取邮件+保存附件(代码方式)

代码也并不复杂

// 打开outlook 进程
irpa_outlook.application.openOutlook();// 搜索参数
var ls_searchCriteria = {searchCriterionList : [ { element: "subject", operand: "contains", value: "Files of Sales Order" }],folderType: "olFolderInbox"
};// 搜索邮件
irpa_outlook.email.search( ls_searchCriteria );// 检查邮件是否存在,若存在则持续遍历
var lv_index = 0;
while( irpa_outlook.email.context.isContextCurrentEmailExist() ){// log 标题irpa_core.core.log( irpa_outlook.email.emailItem.properties.getSubject() );// 创建文件夹irpa_core.fs.folder.create( "C:\\Users\\41078\\Desktop\\" + "销售订单" + lv_index );// 保存邮件irpa_outlook.email.emailItem.saveAllAttachments( "C:\\Users\\41078\\Desktop\\" + "销售订单" + lv_index );// 转到下一封邮件irpa_outlook.email.context.getNext();lv_index += 1;}irpa_outlook.application.closeOutlook();

在这里插入图片描述

1.5 参考文档

irpa outlook sdk:
https://help.sap.com/doc/e57d7b179db649e6b5f2d26d9894f9d9/Cloud/en-US/SDKdocumentation.html
irpa中使用邮件:
https://developers.sap.com/tutorials/spa-extend-outlook-automation.html

2. Excel 操作

2.1 前期准备

在商店中找到excel的SDK,Add到Build中,但是一般excel的sdk是默认添加的
在这里插入图片描述
在process中添加excel的SDK
在这里插入图片描述
在这里插入图片描述
预先准备一个excel文档,存放在本地电脑上,作为待操作的excel数据源
在这里插入图片描述

2.2 创建data type

需要一个data type来存放从excel中读取到的数据
在这里插入图片描述
在这里插入图片描述
通过右上角的import excel file可以根据excel内容快速创建data type,结果如果type有异常的话还是需要手动微调一下
在这里插入图片描述

2.3 读取excel(传统方式)

传统方式和新方式区别不大,主要的点在读取excel数据至变量中时,新方法操作起来更简单,先从传统方式开始
主要步骤如下:打开excel进程,打开目标excel,激活目标工作簿,计算行列范围,读取行列范围,赋值给目标二维数组
在这里插入图片描述

2.3.1 初始化变量

为方便测试,创建结构ty_excel_config用于存储excel信息
在这里插入图片描述
在这里插入图片描述
同时创建结构为ty_data的lt_data用于存储excel数据
在这里插入图片描述

2.3.2 操作excel

依次打开excel进程,打开excel
在这里插入图片描述
激活待使用的sheet页,获取使用的行和列,并放入ls_excel_config中存储
在这里插入图片描述
在这里插入图片描述
根据计算得到的行列数,转换为excel的行列,并用get values(Cells)获取读取的范围
稍微要写一点点代码,用来将数字列转换成字母列
入参数字列,出参字母列

/* 十进制转二十六进制再转char */
var col10 = col_count;
var col26 = "";// 依次除以26,直到十进制除完
while(col10 != 0){col26 = String.fromCharCode( ( col10 % 26 ) + 64 ) + col26; col10 = Math.floor( col10 / 26 );
}return col26;

在这里插入图片描述

2.3.3 读取excel结果至二维数组

把二维数组当成sap中的内表就好了
通过get values(cells)获取范围内的excel数据,最后会返回一个object的二维数组
在这里插入图片描述

通过foreach遍历行,再通过add item将行中的各元素赋值给输出的结果
在这里插入图片描述
最后要关闭excel工作簿和进程
测试结果正常
在这里插入图片描述

2.4 读取excel(新方式)

新方式的区别就在2.3.3这一步上面,可以将此节的步骤替换为2.3.3,两者均可
将excel cloud link拖拽至原先foreach的位置
在这里插入图片描述
在这里插入图片描述
这种方式说实话sap还能再优化一下,前面的步骤都是为了定位正在使用的最后一个单元格,如果能把这个痛点解决那么使用此方法会更方便

2.5 读取excel(代码方式)

以上的两种方式对于完全无经验的开发者来说相对友好,但如果会js的话在看完sap的sdk之后个人感觉可以通过代码方式来完成上述工作,相对来说简单很多
process中引入了数据类型,按理来说应该在sdk中有对应的语法可以去使用数据类型,但是实际上无法在script中声明之前创建过的数据类型,语法是typescript的,在script中编写后编译器也能识别其中的元素,但是控制台检查却不通过
let ls_data: $.ty_data;

必须引入相关数据类型的变量,才可以通过$访问到数据类型,但是控制台报错不给用,所以也没啥用处
在这里插入图片描述
在这里插入图片描述

由于没法在script中直接声明要使用的变量,只能通过入参的方式来传递指定数据类型的变量
在这里插入图片描述
然后参考sdk的文档写代码就可以了

var ls_excel_config = is_excel_config;
var lt_data = it_data;
var ls_data = is_data;// 打开excel进程,不显示,不报警告
irpa_excel.application.newExcelInstance( false , false );// 打开workbook
irpa_excel.workbook.openExistingWorkbook( ls_excel_config.path );// 激活sheet
irpa_excel.worksheet.activateWorksheet( ls_excel_config.sheet );// 获取行列索引
ls_excel_config.row_count = irpa_excel.worksheet.range.getUsedRangeRow();
ls_excel_config.col_count = irpa_excel.worksheet.range.getUsedRangeColumn();// 列数字索引转字母索引
// 依次除以26,直到十进制除完
var lv_col_count_char = "";
var lv_col10 = ls_excel_config.col_count;
var lv_col26 = "";
while(lv_col10 != 0){lv_col26 = String.fromCharCode( ( lv_col10 % 26 ) + 64 ) + lv_col26; lv_col10 = Math.floor( lv_col10 / 26 );
}lv_col_count_char = lv_col26;// 获取range信息
var lt_object = irpa_excel.worksheet.getValues( "A2:" + lv_col_count_char + ls_excel_config.row_count );
irpa_core.core.log( lt_object );// any类型转换为数组,再遍历给数据类型ty_data
var la_object = [];
var la_el = [];
la_object = lt_object;
la_object.forEach( el => {la_el = el;ls_data.orderNumber = la_el[0];ls_data.orderAmount = la_el[1];ls_data.orderDate   = la_el[2];ls_data.shippingCountry = la_el[3];ls_data.expectedDeliveryDate = la_el[4];ls_data.orderStatus = la_el[5];irpa_core.list.addItem( lt_data, ls_data );
} );irpa_core.core.log( lt_data );// 关闭excel进程
irpa_excel.application.closeExcel( );return lt_data;

个人感觉用代码的方式处理对程序员更友好一些,也不会因为流程过于冗长而导致可读性变差,上述的代码块完整把之前的流程实现了,但实际的业务上可以分割成几个小的function script以实现模块化,视情况而定可能也需要混入一些活动(比如关于ui的操作,这部分靠活动更容易实现)

2.6 参考文档

irpa excel SDK:
https://help.sap.com/doc/b8b5c9bbac3846a0a57aedab3f412880/Cloud/en-US/SDKdocumentation.html
irpa core SDK:
https://help.sap.com/doc/77f2293985d7420aabecc0c8d0647e46/Cloud/en-US/SDKdocumentation.html
在irpa中使用微软产品:
https://developers.sap.com/group.spa-ms-office.html
https://developers.sap.com/tutorials/spa-create-excel-automation.html

3. Word操作

3.1 前期准备

使用word的自动化的场景比较少,如果要使用的话是一般是根据模板将数据插入到模板的指定位置,但是目前build的word包只支持根据bookmark插入文本,图片表格类的复杂数据完全不支持
先准备一份简单的word模板,如下图所示,使用bookmark标记待插入数据的指定位置
在这里插入图片描述

在store中添加word的sdk
在这里插入图片描述
在流程中添加word的依赖
在这里插入图片描述
在这里插入图片描述

3.2 插入文本

总体的流程如下,关于word的所有活动其实就截图这些,可以看到支持的操作并不多
先将模板copy为新文件,打开新文件,向各个bookmark处插入数据,保存并关闭word即可
在这里插入图片描述
主要用到的就是set bookmark value,根据bookmark的位置插入数据
在这里插入图片描述
还有一段在js中获取当前日期的函数代码

// 获取yyyy-MM-dd格式数据var date = new Date();
var seperator1 = "-";
var year = date.getFullYear();
var month = date.getMonth() + 1;
var strDate = date.getDate();
if (month >= 1 && month <= 9) month = "0" + month;if (strDate >= 0 && strDate <= 9) strDate = "0" + strDate;var currentdate = year + seperator1 + month + seperator1 + strDate;
return currentdate;

最后结果如下
在这里插入图片描述

4. 资源下载

上述流程可从百度网盘下载
链接:https://pan.baidu.com/s/18csw1TNAIYnIkL7mU7UuRA?pwd=SEEL
提取码:SEEL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉、目标检测、视频分析的过去和未来:目标检测从入门到精通 ------ YOLOv8 到 多模态大模型处理视觉基础任务

文章大纲 计算机视觉项目的关键步骤计算机视觉项目核心内容概述步骤1: 确定项目目标步骤2:数据收集和数据标注步骤3:数据增强和拆分数据集步骤4:模型训练步骤5:模型评估和模型微调步骤6:模型测试步骤7:模型部署常见问题目标检测入门什么是目标检测目标检测算法的分类一阶…

CSS实现图片裁剪居中(只截取剪裁图片中间部分,图片不变形)

1.第一种方式&#xff1a;&#xff08;直接给图片设置&#xff1a;object-fit:cover;&#xff09; .imgbox{width: 100%;height:200px;overflow: hidden;position: relative;img{width: 100%;height: 100%; //图片要设置高度display: block;position: absolute;left: 0;right…

基于Java+SpringMvc+Vue技术的在线学习交流平台的设计与实现---60页论文参考

博主介绍&#xff1a;硕士研究生&#xff0c;专注于Java技术领域开发与管理&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架构思想、较扎实的技术功底和资深的项目管理经…

AI+若依框架(低代码开发)

提前说明&#xff1a; 文章是实时更新&#xff0c;写了就会更。 文章是黑马视频的笔记&#xff0c;如果要自己学可以点及下面的链接&#xff1a; https://www.bilibili.com/video/BV1pf421B71v/一、若依介绍 1.版本介绍 若依为满足多样化的开发需求&#xff0c;提供了多个版本…

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(一)图标svgicon的使用

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、lowflow这里使用了tsx的动态图标&#xff0c;如下&#xff1a; import ./index.scss import type { CSSProperties, PropType } from vue import { computed, defineComponent, resolv…

MATLAB基础应用精讲-【数模应用】 岭回归(Ridge)(附MATLAB、python和R语言代码实现)

目录 前言 算法原理 数学模型 Ridge 回归的估计量 Ridge 回归与标准多元线性回归的比较 3. Ridge 参数的选择 算法步骤 SPSSPRO 1、作用 2、输入输出描述 3、案例示例 4、案例数据 5、案例操作 6、输出结果分析 7、注意事项 8、模型理论 SPSSAU 岭回归分析案…

支付宝沙箱对接(GO语言)

支付宝沙箱对接 1.1 官网1.2 秘钥生成&#xff08;系统默认&#xff09;1.3 秘钥生成&#xff08;软件生成&#xff09;1.4 golan 安装 SDK1.5 GoLand 代码1.6 前端代码 1.1 官网 沙箱官网: https://open.alipay.com/develop/sandbox/app 秘钥用具下载&#xff1a; https://ope…

并行处理百万个文件的解析和追加

处理和解析大量文件&#xff0c;尤其是百万级别的文件&#xff0c;是一个复杂且资源密集的任务。为实现高效并行处理&#xff0c;可以使用Python中的多种并行和并发编程工具&#xff0c;比如multiprocessing、concurrent.futures模块以及分布式计算框架如Dask和Apache Spark。这…

Mysql系列-Binlog主从同步

原文链接&#xff1a;https://zhuanlan.zhihu.com/p/669450627 一、主从同步概述 mysql主从同步&#xff0c;即MySQL Replication,可以实现将数据从一台数据库服务器同步到多台数据库服务器。MySQL数据库自带主 从同步功能&#xff0c;经过配置&#xff0c;可以实现基于库、表…

B端设计:任何不顾及用户体验的设计,都是在装样子,花架子

B端设计是指面向企业客户的设计&#xff0c;通常涉及产品、服务或系统的界面和功能设计。与C端设计不同&#xff0c;B端设计更注重实用性和专业性&#xff0c;因为它直接影响企业的效率和利益。 在B端设计中&#xff0c;用户体验同样至关重要。不顾及用户体验的设计只是空洞的表…

经典的layui框架,还有人用吗?令人惋惜。

自从layui官网宣布关闭之后&#xff0c;layui框架的用户飞速下滑&#xff0c;以至于到现在贝格前端工场承接的项目中&#xff0c;鲜有要求使用layui框架的&#xff0c;那么个框架还有人用吗&#xff1f; 一、layui没落是不是jquery惹的祸 layui的没落与jQuery无关。layui框架…

Hi3861 OpenHarmony嵌入式应用入门--UDP Server

本篇使用的是lwip编写udp服务端。需要提前准备好一个PARAM_HOTSPOT_SSID宏定义的热点&#xff0c;并且密码为PARAM_HOTSPOT_PSK。 修改网络参数 在Hi3861开发板上运行上述四个测试程序之前&#xff0c;需要根据你的无线路由、Linux系统IP修改 net_params.h文件的相关代码&…

起底:Three.js和Cesium.js,二者异同点,好比全科和专科.

Three.js和Cesium.js是两个常用的webGL引擎&#xff0c;很多小伙伴容易把它们搞混淆了&#xff0c;今天威斯数据来详细介绍一下&#xff0c;他们的起源、不同点和共同点&#xff0c;阅读后你就发现二者就像全科医院和专科医院的关系&#xff0c;很好识别。 一、二者的起源 Th…

性能测试相关理解---性能测试流程(二)

六、性能测试流程&#xff08;如何做性能测试&#xff1f;) 根据学习全栈测试博主的课程做的笔记 1、前期准备– 项目初期就开始&#xff0c;业务需求评审时尽量参与,对业务更深刻的认识&#xff08;确定哪些是核心业务、哪些可能存在并发请求、确定什么地方会出现瓶颈,方便后…

WebOffice在线编微软Offfice,并以二进制流的形式打开Word文档

在日常办公场景中&#xff0c;我们经常会遇到这种场景&#xff1a;我们的合同管理系统的各种Word,excel,ppt数据都是以二进制数组的形式存储在数据库中&#xff0c;如何从数据库中读取二进制数据&#xff0c;以二进制数据作为参数&#xff0c;然后加载到浏览器的Office窗口&…

【无标题】地平线2西之绝境/Horizon Forbidden West™ Complete Edition(更新:V1.3.57)

游戏介绍 与埃洛伊同行&#xff0c;在危险壮美的边疆之地揭开种种未知的神秘威胁。此完整版可完整享受广受好评的《地平线 西之绝境™》内容和额外内容&#xff0c;包括在主线游戏后展开的后续故事“炙炎海岸”。 重返《地平线》中遥远未来的后末日世界&#xff0c;探索远方的土…

Twitter群发消息API接口的功能?如何配置?

Twitter群发消息API接口怎么申请&#xff1f;如何使用API接口&#xff1f; 为了方便企业和开发者有效地与用户互动&#xff0c;Twitter提供了各种API接口&#xff0c;其中Twitter群发消息API接口尤为重要。AokSend将详细介绍Twitter群发消息API接口的功能及其应用场景。 Twit…

html+css+js贪吃蛇游戏

贪吃蛇游戏&#x1f579;四个按钮控制方向&#x1f3ae; 源代码在图片后面 点赞❤️关注&#x1f64f;收藏⭐️ 互粉必回&#x1f64f;&#x1f64f;&#x1f60d;&#x1f60d;&#x1f60d; 源代码&#x1f4df; <!DOCTYPE html> <html lang"en"&…

tomcat原理、结构、设计模式

1 what 一种web服务器&#xff0c;运行java servlet、jsp技术&#xff0c;能为java web提供运行环境并通过http协议处理客户端请求。即tomcat http服务器 servlet容器。同类产品有jetty Web应用&#xff1a;Web应用是指通过Web浏览器访问的应用程序&#xff0c;它使用Web技术…

平台稳定性里程碑 | Android 15 Beta 3 已发布

作者 / 产品管理副总裁、Android 开发者 Matthew McCullough 从近期发布的 Beta 3 开始&#xff0c;Android 15 达成了平台稳定性里程碑版本&#xff0c;这意味着开发者 API 和所有面向应用的行为都已是最终版本&#xff0c;您可以查阅它们并将其集成到您的应用中&#xff0c;并…