0530-3433334

网站建设 APP开发 小程序

知识

分享你我感悟

您当前位置>首页 >> 知识 >> 软件开发

Excel、Word、浏览器、数据库等软件自动化操作

发表时间:2023-09-19 11:01:19

文章来源:炫佑科技

浏览次数:176

菏泽炫佑科技

Excel、Word、浏览器、数据库等软件自动化操作

5 软件自动化

在RPA流程中,我们经常需要自动化Excel、Word等办公软件,或者浏览器等常用软件。 当然这些软件都是有界面的,界面元素也是可以获得的。 理论上来说,学习完本章后,你可以将这些软件操作自动化,但这样做会比较麻烦。 因此,UiBot专门将Excel、Word、浏览器、数据库等软件的自动化操作封装成特殊的命令。 通过这些命令进行操作将比在界面上模拟更加高效、便捷。 例如,虽然我们可以通过界面模拟来模拟真人操作,打开、读写Excel文档,但这非常麻烦。 然而,通过Excel自动化命令,只需一两个命令就可以完成。

在使用UiBot自动化这些软件操作之前,您的计算机需要安装相应的软件。 对于Excel和Word自动化,需要安装2007或更高版本,或者WPS 2016或更高版本; 对于浏览器自动化,您需要安装(IE)或浏览器。

本章假设读者对浏览器、Word、Excel、数据库等软件及相关知识有初步的了解,并且*好在工作中使用过这些软件。 如果你还缺乏了解,市面上有大量的书籍可以参考,本文不再介绍。

5.1 Excel 自动化

Excel是办公软件的重要组成部分。 它具有强大的计算、分析和图表功能。 它也是*常用和流行的电子表格处理软件之一。 自动化Excel是RPA流程中经常遇到的场景。

在自动化Excel之前,我们首先澄清几个概念:工作簿和工作表。 工作簿是处理和存储数据的文件。 一个Excel文件对应一个工作簿。 Excel软件的标题栏上显示当前工作簿的名称。 工作表是指工作簿中的表格。 默认情况下,每个工作簿包含三个工作表,分别称为 、 和 。 当然,您也可以删除或添加工作表。 也就是说,工作簿和工作表是一对多的关系。

Excel 工作簿和工作表

Excel 中的工作表是包含许多单元格的二维表格。 可以使用行号和列号来确定单元格的具体位置。 行号通常用数字序列表示,如 1,2,3,4... ;列号通常用字母序列表示,如 A,B,C,D... 这样,您可以使用列号+行号来表示单元格。 例如,单元格 B3 指的是第 3 行和第 2 列交叉处的单元格。

Excel 行和列

使用UiBot自动化操作Excel表格时,首先需要打开工作簿。 工作表或单元格上的所有后续操作都在已打开的工作簿上执行。 另外,Excel表格的自动化操作完成后,需要关闭打开的工作簿。

让我们尝试使用 UiBot 打开工作簿。 在UiBot的命令列表中,选择“软件自动化”并展开,然后选择“Excel”并打开。 **个是“打开 Excel”命令。 使用此命令打开 Excel 工作簿。

该命令有五个属性,如下图所示。 我们首先看一下“文件路径”属性。 这里需要指定Excel工作簿文件的路径。 文件可以是xls、xlsx、xlsm等格式。 前面说过,这个路径可以是绝对路径,也可以切换到专业模式,使用@res“模拟数据.xlsx”这样的格式来引用相对路径下的文件,相对于所在文件夹您的进程位于。 ,一个名为 res 的文件夹。 请注意,如果使用绝对路径,建议切换到普通模式,点击右侧的文件夹图标按钮直接选择文件,这样更简单,也不易出错。 否则,如果切换到专业模式,则需要以字符串的格式编写。 不仅需要用引号来表明这是一个字符串,还需要将路径中的\符号写成\\。

打开 Excel 工作簿

如果我们指定的工作簿文件存在,那么进程运行时就会操作这个文件。 如果该文件不存在,则进程运行时会自动创建一个空白的Excel工作簿文件,并操作新创建的文件。

下一个属性是“”,它是一个布尔属性,其值只能是“True”或“False”。 当选择“是”时,该命令将打开Excel软件并显示工作簿。 否则,您仍然可以正常读取或修改该工作簿文件的内容,而无需显示Excel软件界面。

另外两个属性指定要打开的 Excel 工作簿的密码。 如果没有密码,则将其保存为空。

上面的“ to”属性中,必须填写一个变量名,这个变量指的是我们打开的Excel工作簿,我们称之为“工作簿对象”。 以后对工作簿进行各种读取、修改操作时,仍然需要将这个变量填入相应命令的“工作簿对象”属性中,表明该操作是针对这个工作簿的。 例如,当我们打开上图中的工作簿时,“输出到”变量为,需要填写其“工作簿对象”属性,以供后续Excel操作命令使用。

让我们尝试读取该工作簿工作表中单元格 A1 的内容。 插入“读取单元格”命令,可以看到该命令的属性如下图:

读取单元格

上面提到,这里的“工作簿对象”属性应该和“打开Excel命令”的“输出到”属性相同,所以我们需要填写它,以表明我们正在从我们的工作簿中读取单元格内容。刚刚开业。 。

另外,我们需要指定“”和“cell”属性来告诉UiBot要读取哪个工作表中的哪个单元格。 指定“工作表”和“单元格”也有两种方法:一种是遵循Excel的约定,使用“”和“A1”分别指代名为“”和“A1”的工作表。 细胞。

还有第二种方法,即使用整数来引用工作表。 UiBot 中的编号通常从 0 开始,因此整数 0 代表**个工作表,整数 1 代表第二个工作表,依此类推,无论工作表的实际名称如何。 也可以用方括号内的两个整数,如[x,y](其实是一个数组,如果你不明白数组的概念,暂时不用关心这个细节)来引用到细胞。 其中,x和y都是从1开始编号的整数(这里从1开始编号是为了适应Excel的习惯)Excel、Word、浏览器、数据库等软件自动化操作,x代表行,y代表列。 例如,[1, 1]实际上是单元格“A1”,[1, 2]实际上是单元格“B1”。

使用字符串来引用工作表和单元格,符合Excel的一般习惯,也更容易让业务人员理解。 使用整数来引用工作表和单元格。 您可以将整数保存在变量中,并根据业务逻辑的需要随时更改它们。 例如,可以用[x,y]来引用单元格,其中x和y可以是变量名,随着循环依次递增,这样就可以依次读出多个单元格,显然更加灵活。 具体使用的形式可以根据实际需要选择。

还需要在“ to”属性中填写一个变量名,表示将读取到的单元格内容输出到这个变量中。 如果单元格的内容是数值,则变量的值也将是数值; 如果单元格的内容是字符串,那么变量的值自然也是字符串。

在工作中,我们经常需要读取Excel工作簿多个单元格中的数据。 如果我们使用 UiBot 一次读取一个单元格,既低效又麻烦。 事实上,UiBot已经考虑到了读取一个区域的需要,并提供了“读取区域”命令,可以一次读取一个矩形范围内的所有单元格的内容。 我们尝试插入一个“读取区域”命令,其属性如下图所示。

阅读区

从上图可以看出,“读取区域”命令有两个与“读取单元格”命令完全相同的属性,即“工作簿对象”和“工作表”。 这两个属性表示需要读取哪个工作簿中哪个工作表的内容。

“area”属性也是字符串的形式(需要添加双引号来表明这是一个字符串)。 也是按照Excel的习惯填写的。 这里填写“A1:B2”,表示读数是从左上角A1开始的。 右下角单元格到B2单元格,共2行2列,4条数据。

当然,除了使用字符串之外,还可以使用“二维数组”来引用要读取的区域。 比如“A2:B6”可以写成[[2,1],[6,2]],这里的几个整数可以写成变量。 这样的话,可以根据业务逻辑改变读取范围,灵活性比较好。 当然,如果你还不了解二维数组,可以暂时忽略这种引用方式,直接使用字符串来引用。

“ to”属性中填写一个变量名,读取的内容将输出到该变量中。 例如,对于下图所示的表格,我们要求UiBot读取“A1:F2”区域,并在“读取区域”命令后面添加一条“输出调试信息”命令,打印出该变量的值。

需要读取的Excel表格内容

从输出信息可以看出,“Read Area”命令输出的是一个二维数组。 上例中,输出结果为:[[“刘备”,“关羽”,“张飞”,“赵云””,“马超”,“黄忠”],[“20K”,“ 18K”、“15K”、“12K”、“10K”、“10K”]]

不熟悉编程概念的读者可能不明白什么是“数组”和“二维数组”。 这些概念稍后将详细解释。 现在我们只需要知道:使用Excel的“读取区域”命令,可以读取Excel表格某个区域的所有数据,并将其放入变量中。

既然可以读,那么也可以写。 UiBot提供了一系列Excel写入命令来修改工作簿的内容。 我们尝试将上述工作簿的工作表中A7单元格的内容写为“张三”。 在“打开 Excel”命令之后插入“写入单元格”命令。 您可以看到该命令的属性,如下所示:

写入单元格

其中,“工作簿对象”、“工作表”、“单元格”三个属性与“读取单元格”命令含义相同,表示该命令操作的是哪个“工作簿对象”的哪个“工作表”。 哪个“细胞”。

“data”属性填充将写入单元格的数据。 如果在正常模式下填写此属性,它将以文本格式写入 Excel 单元格。 如果切换到高级模式,您还可以填写值、字符串、变量或表达式。

Excel写入命令还有一个非常重要的属性,叫做“立即保存”。 如果该属性选择“是”,那么写入操作将立即保存,就像我们手动修改Excel文件内容后立即按“Ctrl+S”保存一样; 如果该属性选择“否”,则写入操作将立即保存。 除非单独调用“保存Excel”命令或在“关闭Excel”命令的“立即保存”属性中选择“是”,否则操作不会立即保存。 两种方法效果相同,都可以保存Excel的修改内容。

其他Excel写入命令的使用方法与“写入单元格”命令类似,此处不再赘述。 需要注意的是,每个写命令的“数据”属性必须与该写命令的写入范围一致,这样才能保证数据能够正确写入。 也就是说,在写入单元格时,“data”属性应该是单元格的数据; 写入一行时,“data”属性应该是一行单元格(一维数组)的数据,并且数组的长度应该与单元格的长度相同。 工作表数据的列数相等; 写入一个区域时,“data”属性应该是若干行和列的单元格(二维数组)的数据。 如果不一致,很容易报错或者写入Excel的数据不一致。 UiBot还提供了“创建多维数组”命令,可以快速创建一维、二维甚至更高维的数组进行写入。

Excel操作完成后,建议使用UiBot的“关闭Excel工作簿”功能关闭当前操作的Excel工作簿。 否则,即使UiBot进程结束,Excel仍然会打开,并且会消耗系统资源。 尤其是当我们在打开Excel工作簿时选择“不可见”时,虽然Excel界面被隐藏了,但它仍然处于打开状态,不仅消耗系统资源,而且很难被察觉。

5.2 文字自动化

与Excel类似,Word也是办公软件的重要组成部分。 Word格式的文档几乎是办公文档的事实上的标准,在RPA流程中经常会遇到自动化Word。

与Excel类似,使用UiBot自动操作Word文档时,首先需要打开Word文档,后续对文档内容的所有操作都是在已经打开的文档上进行的。 当您完成 Word 文档的处理后,您仍然需要关闭打开的文档。

让我们尝试使用 UiBot 打开 Word 文档。 在UiBot的命令列表中,选择“软件自动化”并展开,然后选择“Word”并打开。 **个是“打开文档”命令。 使用此命令打开 Word 文档。

该命令有五个属性,如下图所示。 我们首先看一下“文件路径”属性。 这里需要指定Word文件的路径。 文件可以是doc、docx等格式。 其他注意事项与上一节“打开Excel”命令的“文件路径”属性一致。 这里我们打开res目录下的仿真数据.docx文件。

打开Word文档

接下来是“访问时的密码”和“编辑时的密码”两个属性。 有时候,出于隐私原因,我们的文档不希望别人能够打开,或者打开后无法修改,所以我们给Word文档设置了密码。 密码有两个:一个叫“访问密码”,输入正确的访问密码就可以打开这个文档;另一个叫“访问密码”。 一个叫“编辑密码”,输入正确的编辑密码就可以修改这个文档。 这里的两个属性“访问期间的密码”和“编辑期间的密码”用于自动访问受密码保护的Word文档。 如果正在操作的Word文档没有设置密码,则这两个属性可以留空。

“是否可见”属性与“打开Excel”的“是否可见”属性含义相同,表示自动化Word文档操作时是否显示Word软件界面。

还有*后一个“输出到”属性,与“打开Excel”的“输出到”属性含义类似。 此处必须填写变量名称。 这个变量指的是我们打开的Word文档,后面我们会对文档进行各种操作。 在进行读取或修改操作时,仍然需要将该变量填充到相应命令的“文档对象”属性中,表明该操作是针对这个打开的文档的。 例如,当我们打开上图中的文档时,“输出到”变量为,需要填写其“文档对象”属性,以供后续的Word操作命令使用。

接下来我们来阅读一下这个Word文档的内容。 在“打开文档”命令之后,插入“读取文档”命令。 该命令的属性如下图所示:

阅读Word文档

如上所述,“文档对象”属性与“打开文档”的“输出到”属性一致,都表明我们正在从刚刚打开的文档中读取内容。

“ to”属性填写变量名sRet,表示将读取的内容输出到变量sRet中。 我们添加另一个“输出调试信息”命令来显示 sRet 的内容。 运行后可以看到如下结果:

读取Word文档的输出

我们打开原文档进行对比。 我们可以看到原始Word文档包括文字、表格和图片,并且文字带有格式信息。 “读取文档”命令会读出文档中的所有文本内容,但暂时不支持。 读取文本格式、表格状态和图片。

原始Word文档

“读取文档”命令对整个文档进行操作。 类似的命令还有“重写文档”、“保存文档”、“文档另存为”、“关闭文档”、“获取文档路径”等。这些命令都是针对整个文档的操作。 如果需要对文档进行更细粒度的操作,就需要涉及到Word中的一个重要概念:焦点。 所谓焦点是指当前选中的区域,在Word中通常是高亮显示的; 如果没有选中区域,则当前光标所在位置为焦点。 即:“焦点”=“选定”或“光标”。 Word 中的大多数操作都集中在焦点上。 例如,如果要更改一段文字的字体,必须先选择文字,然后才能修改文字的大小、颜色、样式等; 在Word中插入文字、图片等时,也需要先移动光标。 移动到插入点。

我们来看看如何在UiBot中设置和切换焦点。 插入“设置光标位置”命令,将光标焦点设置到指定位置。 这个命令有三个属性:“ ”属性,也就是上面提到的文档对象; “移动次数”属性需要与可选属性中的“移动方式”属性配合使用,指的是光标的“移动方式”。 “移动多少次”,“移动方式”属性有“字符”、“行”和“段落”三个选项,分别代表光标向右移动一个字符、向下移动一行和向下移动一个段落。 这里,“移动模式”设置为“行”,“移动计数”设置为2,表示焦点设置为初始焦点向下移动两行,即第三行。 需要注意的是,移动次数不能为负数,即光标不能向左或向上移动。

设定焦点

我们插入另一个“选择行”命令自动化软件开发,它可以选择特定的行。 该命令具有三个属性:“ ”属性就是上面提到的文档对象; “起始线”属性和“结束线”属性限制所选范围。 这里“起始行”设置为1。“结束行”设置为2,表示选择第1行到第2行,共2行。

选择行

但在实际应用中,单独使用“设置光标位置”命令和“选择行”命令来设置光标焦点效果并不好。 为什么是这样? 原来,虽然Word是一款所见即所得的可视化图文混合软件,但Word中也存在一些看不见的格式标记。 这些格式表示都会或多或少地影响Word文档中的“字符”、“线条”和“字符”。 “段落”的计算导致焦点定位不准确的问题。 那么如何解决这个问题呢? 这里教大家一个技巧:首先,我们在Word文档中需要插入或编辑的地方设置一个特殊的标记,比如插入姓名字段,设置为; 然后,使用“查找文本后设置光标位置”命令,这个命令有两个关键属性,一个是“文本内容”属性,填写前面的即可,另一个是相对位置属性,选择“选择文本” ”,这样就可以找到该标记并选择该标记的内容; *后,使用“写入文本”命令将所选内容替换为所需内容。 我们可以在Word文档中多设置几个这样的特殊标记,然后反复使用“搜索文本然后设置光标位置”命令来达到填充Word文档的目的。

继续上面的内容,将光标移动到指定位置或者选择指定内容后,可以进行具体的编辑操作,包括插入内容、读取内容、删除内容、格式化内容、剪切/复制/粘贴等,我们这里以“设置文本大小”命令为例。 在“选择行”命令之后,插入“设置文本大小”命令。 这个命令有两个属性:“ ”属性,也就是上面提到的文档对象; “字体大小”属性指定所选文本的字体大小。 这里,“字体大小”设置为9,表示所选文本的字体大小。 字体大小统一设置为9。

设置文字大小

5.3 邮件客户端自动化

在日常工作中,我们经常需要发送或接收电子邮件。 让 RPA 流程自动发送或接收电子邮件是一个非常常见的需求。 为了自动收发电子邮件,通常有两种方法:一种是直接通过SMTP/POP3/IMAP等电子邮件协议来实现,另一种是通过电子邮件客户端来实现。 前者不需要在计算机上安装任何客户端软件,但配置比较繁琐。 后者需要依赖电子邮件客户端软件,但相对简单。 本章首先介绍后者,即依赖邮件客户端的方法。 UiBot 支持两种常见的电子邮件客户端:和 IBM Notes。

它是微软主要的电子邮件传输和协作客户端产品,也是该软件套件的组件之一。 下图是撰写新邮件的界面:

使用UiBot自动操作客户端,可以直接使用“发送邮件”、“获取邮件列表”、“回复邮件”、“下载附件”等命令。 这和用户平时在客户端操作邮件的习惯基本一致。 填写发送邮件的人、收件人、标题、正文、附件等信息就够了。 只是在填写“发件人邮箱”和“邮箱地址”属性时,必须提前绑定邮箱地址(支持绑定多个邮箱地址)。

例如,将“发送电子邮件”命令插入 UiBot 并适当设置该命令的属性。 这些设置与您手动发送邮件时填写的内容几乎相同,而且非常简单。

发电子邮件

如果您想接收电子邮件,可以插入“获取邮件列表”命令并适当设置该命令的属性。 您可以使用一个命令接收多封电子邮件。 “电子邮件数量”属性指定您需要接收的电子邮件数量。 如果为0,则表示接受邮箱中的所有邮件。

接收邮件

此外,它还支持频率相对较低的电子邮件操作,例如“移动电子邮件”和“删除电子邮件”命令。 需要说明的是,目前的自动化命令主要适配2010、2013、2016、2019版本。

同样,UiBot 还支持 IBM Notes 电子邮件客户端上的自动化操作。 对于发送邮件、回复邮件、获取邮件、下载附件等操作,您也可以直接使用“发送邮件”、“回复邮件”、“获取邮件列表”、“下载”。 只需几个“附件”命令即可实现此目的; 前提条件是一样的,都需要提前绑定发件人的电子邮件地址,但区别在于配置属性:IBM Notes不需要填写发件人的电子邮件地址,但有“密码模式”,全部自动化必须为所有命令配置密码,包括“移动邮件”和“删除邮件”命令。 下图以“发送邮件”为例。 其他命令也类似,不再赘述。

使用 IBM Notes 发送电子邮件

UiBot自动操作IBM Notes时,对IBM Notes版本也有一定的要求。 目前主要适配9.0.1和11.1中文版本。 IBM Notes的版本号可以在以下界面中找到。

IBM 笔记 9.0

5.4 浏览器自动化

浏览器自动化是软件自动化的重要组成部分。 从特定网站抓取数据并自动运行基于Web的业务系统需要基于浏览器的自动化操作。

首先,我们需要打开浏览器。 该功能是通过“启动新浏览器”命令来实现的。 当然,如果此时电脑已经打开了浏览器,我们也可以直接使用这个打开的浏览器进行后续操作。 这时只需要一个“绑定浏览器”命令,其效果与“启动新浏览器”命令是一样的。

启动新浏览器

“启动新浏览器”命令的属性如下: “浏览器类型”属性指定要启动的浏览器。 UiBot目前支持IE浏览器、浏览器、UiBot浏览器等多种类型的浏览器。 其中,UiBot浏览器自带UiBot 5.0版本,无需额外安装。 这里,我们选择“UiBot”,即UiBot自带的浏览器。 与其他三种浏览器相比,UiBot浏览器具有以下优点:首先,无需安装任何浏览器扩展即可选择目标元素(UiBot和发生,例如被杀毒软件拦截等); 其次,UiBot浏览器可以在跨域网页中选择目标元素(使用其他浏览器登录网易、QQ等邮箱时找不到用户名和密码输入框); 第三,UiBot浏览器可以直接调用访问页面中的方法。 基于以上优点,我们推荐优先使用UiBot浏览器。 当然,也有一些特殊的网站,只能使用特定的浏览器才能正确打开和操作。 例如国内的一些银行网站、某些政府网站等只能使用IE浏览器才能正确打开和操作。 此时,“浏览器类型”属性只能选择“IE浏览器”。

“打开链接”属性指示当浏览器打开时打开哪个URL。 这里填写的是“”,表示打开浏览器时,会同时打开百度网站。 当然,您也可以暂时将其留空,稍后使用“打开网页”命令打开单独的 URL。

“超时时间”属性是指如果出现异常情况,比如找不到浏览器,或者打不开指定的链接,UiBot会反复尝试,直到超过指定的时间,即“超时时间”。

有两个也常用的可选属性:一个是“浏览器路径”属性。 有时,我们在同一台计算机上安装了两个不同版本的浏览器软件。 这时,我们可以通过指定“浏览器路径”属性来打开特定版本的浏览器。 如果不指定该属性,系统将在浏览器默认安装目录中搜索并启动浏览器软件; 另一个是“浏览器参数”属性。 我们知道浏览器实际上非常强大。 系统除了能够默认启动之外,还可以通过自定义启动参数来启动个性化的浏览器,包括默认打开某些网页、显示模式(全屏等)、启用或禁用某些功能等各个浏览器具体可以配置的启动参数请参考相应的文档。

启动浏览器后,您可以对浏览器以及浏览器中显示的网页进行一系列操作。 我们可以浏览网页、在网页上输入文字、点击网页上的链接和按钮等。例如,打开百度网站后,我们可以在百度首页的输入框中输入“UiBot”,然后点击“百度”点击“按钮即可获得“UiBot”在百度的搜索结果。 这些操作可以通过上一章的“定向命令”来完成。 还可以通过“数据处理”命令对搜索结果进行处理,完成数据抓取、数据分析等功能。 这些功能将在后续教程《数据处理》中详细讲解,这里不再赘述。

5.5 数据库自动化

信息系统中*重要的是数据。 现在,几乎所有的信息系统都将数据存储在数据库中。 除了使用客户端访问数据库外,有时还需要直接访问和操作数据库。 因此,对数据库的自动化操作已经成为RPA不可或缺的一部分。 The so- to using the user name and to log in to the and using SQL to the on the of data .For basic of SQL, refer to SQL on the

Let's take a look at how to the . First, you need to to the . In the "" of " ", and a " " , which will a to the .

The " " has three : the " Type" the type of . UiBot five types: MySQL, SQL, and so on. The " " some key when a . This is long and not easy to , but it doesn't . Click the "Paper and Pen" on the right, and a will pop up " More of "", as shown in the below:

数据库配置

"Host" and "port" refer to the IP and port of the . "192.168.0.1" and "3306" are in here, that the can be the "192.168.0.1:3306"; "user "" and "" refer to the user name and for the ; "" to the name of the we are to; "" to the set of the , which the "utf8". The of the is . For the of the above , you can ask the of the you want to .

Of , the of each type of may not be the same. For , the does not have the "" , only the "sid" , but its is . The is quite from the other three : MySQL and SQL are , but file-based . , the " " only has a sub- of "", which the file being . 小路。 For the , the " " is from MySQL, but only for , and other are not yet.

to other , you can fill in a name in the " to" . This will save the . We fill it in here, and all will be on the .

After the , you can next the . UiBot two : one is to query data, to the two " SQL query" and " full SQL query"; the other is to the , table and data in the table, to " SQL " " and " SQL in " two .

Let's first take a look at the " SQL Query" . This can a SQL query and the first of the query. a " a SQL query" . You can see that this has three : one is the " " , which is in with the just ; the other is the "SQL " , which is in with For the query to be , " * from " is in here, which means all the data in the query table and the first is ; the third is the " to" , and a iRet is in here, which means As for the of the SQL , we judge the SQL was by the value of iRet.

a SQL query

, to use the "Close " to close the .这条命令的唯一属性——“数据库对象”属性,填入数据库对象,即可关闭数据库连接。

关闭连接

炫佑科技专注互联网开发小程序开发-app开发-软件开发-网站制作等

相关案例查看更多