gaoshoucheng 发表于 2018-12-1 18:49:42

活字格导入Excel数据(数万条数据的处理办法)

大家好,不知有没有人遇到过从Excel文件到系统的导入过程中,涉及批量数据处理或者数据量过大时造成前台页面假死或卡死,也许这篇帖子会是你的福音。
经过本人团队与活字格工程师胡耀、瑞瑞反复沟通,解决了当下我遇到的最大的难题。
需求背景:物流公司的订单管理系统   使用外联数据库 SQL SERVER 2008 R2 SP3   
需求内容:单个Excel处理量20000行,共计46列字段 ,根据数据库其他表的内容需要UPDATE对应字段做一些校验匹配
当前问题:前段导入Excel数据量大,在提交表格的过程中,大约需要1分钟前后(根据客户机的上行带宽不同时间略有不同),前台做了校验匹配,更是雪上加霜。
解决方案:
需要的工具或技能:
1:AccessDatabaseEngine.exe   SQL SERVER数据库链接Excel的一款官方接口文件(区分64位和32位   )
安装完毕后 打开SQL SERVER数据库   会出现一个新的访问接口 Microsoft.ACE.OLEDB.12.0 如果是 出现Microsoft.ACE.OLEDB.4.0   证明你下载的版本不对噢!

2:活字格前段页面调用存储过程   
新的解决方案会使用附件上传功能,配合一些前台代码的方式,截取文件名,通过参数形式调用后台存储过程进行数据查询和INSERT 插入工作 ,所以如果要使用该解决方案,需要会使用活字格调用存储过程
具体案例参照:https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=45262&highlight=%B4%E6%B4%A2%B9%FD%B3%CC
或者直接在论坛中搜索“存储过程”
3:上传文件并通过上传过程截取对应的文件名称显示到页面上
具体操作参照:
用途:为调用存储过程时给参数而使用
4:了解自己的上传文件路径去了哪里

设计器路径位于:打开资源文件夹后退两层
C:\ProgramData\Forguncy\it\3329\Designer\Upload
同理在发布到服务器后,服务器中也会存在一个这样的路径 具体的可以自己找一下Upload文件夹会在有附件后自己创建,如果未上传附件,则无法再Designer文件夹下看到 Upload




现在开始我的表演

创建一个存储过程,实际内容是在执行一个拼接的sql 语言 ,由于sql编辑器会自动校验sql语句的完整性,所以在存储过程中,我们通过一种文本拼接的方式,将几个参数拼接至一起,最终形成一段 inser into 语句+ SELECT * FROM EXCEL   
拼接完成后的打印结果
INSERT INTO O_DDJY_MX_01   --- 需要插入的订单表名称(DJBH,DJZTCODE,DJZTNAME,DDLXCODE,DDLXNAME,DDRQ,KHDDH,DDH,KEHMDCODE,KEHMDNAME,KEHSPCODE,KEHSPNAME,DDSL,SPGG,
SPDJ,SPJE,BZ,YWYDZ,YWYDH,YWY,QSPC,JZPC,sfzp)--- 表中所有字段的排列

SELECT 'DD181121018' as DJBH,'01'AS DJZTCODE,'订单创建'AS DJZTNAME,''AS DJLXCODE,''AS DJLXNAME, *   
---- * 代表Excel 的所有字段,前面的自定义字段为我个人需求
FROM
OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=C:\OTWB\bb38d78a-9b96-4dcd-b844-9a26519efa65_订单导入(1).xlsx;hdr=yes;imex=1',sheet1$)   --- 查询接口的路径和文件名拼接语句    注意:最后的sheet1$ 代表我只识别Excel中Sheet1 页签的数据,其他数据不识别。


存储过程拼接好了以后,可以进行一下查询测试,基本上会遇到各类问题,百度一下,瞬间解决。


原贴灵感来自:https://www.cnblogs.com/qingsong-do/p/3905567.html


做好存储过程前台需要增加一个JS调用存储过程按钮

然后发布应用。

经过本人实测,1万条数据大约需要3秒导入至数据库,连带展现前台页面,共计花费5秒钟时间。


本人有写的不详细的地方,欢迎各位格友回帖或者加QQ787774088讨论切磋,我会在空闲时间把不详细的地方补充上。


着实认为活字格比较强大,我可不是托,而且梁瑞和胡耀为了我这个事情,连续沟通了好多天。:hjyzw:






宋小猫 发表于 2019-4-12 16:49:28

进来看看 看不懂默默的离开了 等我有能力看懂的时候再来吧:L

Simon.hu 发表于 2019-4-12 17:11:37

宋小猫 发表于 2019-4-12 16:49
进来看看 看不懂默默的离开了 等我有能力看懂的时候再来吧

一个产品,必须有大家普通功能,晋级功能,高级功能
这样玩起来才有意思嘛~

Simon.hu 发表于 2018-12-3 09:07:30

这个SQL写的,我只能说我学习了

zhgl527 发表于 2018-12-26 11:40:42

本帖最后由 zhgl527 于 2018-12-26 11:42 编辑

@gaoshoucheng,如果多人同时上传excel操作会怎样,页面显示的数据能看到各自的么

Simon.hu 发表于 2018-12-26 12:24:02

zhgl527 发表于 2018-12-26 11:40
@gaoshoucheng,如果多人同时上传excel操作会怎样,页面显示的数据能看到各自的么

你可以直接在群里找他的QQ,昵称是:鬼推磨;P

gaoshoucheng 发表于 2019-1-2 18:54:10

zhgl527 发表于 2018-12-26 11:40
@gaoshoucheng,如果多人同时上传excel操作会怎样,页面显示的数据能看到各自的么

在每一个文件的页面有增加上传文件的一个唯一值 ,所以存储过程提取该文件时是不会重复处理的。

Simon.hu 发表于 2019-1-3 09:05:44

gaoshoucheng 发表于 2019-1-2 18:54
在每一个文件的页面有增加上传文件的一个唯一值 ,所以存储过程提取该文件时是不会重复处理的。

高老板,越来越讲究了!!!
:hjyzw:

zhgl527 发表于 2019-1-13 21:20:10

gaoshoucheng 发表于 2019-1-2 18:54
在每一个文件的页面有增加上传文件的一个唯一值 ,所以存储过程提取该文件时是不会重复处理的。

您好!高总,其实我希望通过存储过程,根据不同用户给出条件,将数据库多表查询,查询结果显示在活字格页面,怎么实现,之前用的是视图,效率挺低,请高总给个思路

Simon.hu 发表于 2019-1-13 22:01:22

zhgl527 发表于 2019-1-13 21:20
您好!高总,其实我希望通过存储过程,根据不同用户给出条件,将数据库多表查询,查询结果显示在活字格页 ...

这样的问题,最好您能在求助中心发一个帖子。

lwsammi 发表于 2019-4-12 13:50:02

zhgl527 发表于 2019-1-13 21:20
您好!高总,其实我希望通过存储过程,根据不同用户给出条件,将数据库多表查询,查询结果显示在活字格页 ...

请问你这个发帖子了么 地址是哪里
页: [1] 2
查看完整版本: 活字格导入Excel数据(数万条数据的处理办法)