关于DateTable数据导出为Excel的方案

关于DateTable数据导出为Excel的方案

分享一个之前做的关于数据导出为Excel的方案,这里只给思路,代码就不贴了

去年一个项目有很多地方需要做数据导出的需求,当然前端的框架大部分是支持导出为excle的。但也有不少弊端。比如:数据量比较大的时候导出会非常缓慢,甚至将浏览器卡死。或者有些只支持导出当前页。而且因为需要做导出的地方较多,前端就需要改不少地方。思来想去,我决定用后端来实现,但具体如何实现着实让我苦恼了一番。最终实现的思路如下(公司项目是C#做的,这里以C#为例):

1、先做一个功能用来配置表头,因为接口是已存在的,不能动sql,所以就要想办法将原有的sql查询字段替换为中文,这样做主要是为导出的excle准备,毕竟导出字段人家看不懂。自己定义规则,需要那些字段,就将所有字段翻译为中文存起来。例如:
在这里插入图片描述

2、在需要做导出的查询接口里将当前查询的sql和条件保存下来,以c#为例,我是在查询接口里将当前查询的sql和条件按一定规则拼接后保存在Cookie里面,这里保存的时候需要再拼接上面提到的配置信息id。注意,你这里的sql查询字段必须和对应配置的一致。

3、前端在需要做导出的地方增加一个导出的按钮,点击触发一个接口,这个接口需要做两件事,一是获取当前Cookie中的信息保存到数据库中。二是清除当前Cookie信息,顺序别搞错了!

4、到这里小伙伴们大概知道我想怎么做了吧!那接下来就是需要一个程序去轮询我们3中保存的sql信息,以.net C#为例,我是单独做了一个服务放到服务器上去,这个服务就不停的去检测是否有未完成导出的工单(保存的sql信息,记得加状态字段)。检测到就去处理导出。

简单说一下导出的功能吧,程序检测到新的工单后,拿到这个工单里的sql和参数,组装成完整的sql并用该sql查询我们需要的数据。然后就是处理表头了,将我们保存的工单中对应的配置id拿到去查询表头配置表。这样就拿到了表头的信息,然后就是替换select和from的字段了,循环配置表头(因为前面约束了查询字段,所以这里sql的字段数量和配置的表头字段数量应该是一致的),在每个循环内sql字段前加入“ as 当前表头配置字段”,最终将sql再次拼接未完整的sql。此时你的sql应该查询出来的表头就是中文的了。

OK,那之后就是剩导出了。这里我用的是Aspose.Cells动态库的方法导出的。Aspose.Cells下载地址(http://files.cnblogs.com/files/cang12138/Aspose.Cells.zip)。里面有DataTable的导出功能,很方便。导出文件到服务器上后更新工单的下载地址字段就大功告成了!经测试50万数据大概12分钟就能导完,已经比较满意了。各位有好的方案可以分享一下,当然我的方案后面我没跟进项目就没完善了,实际上还有一个问题,就是我Cookie没有做区分,始终只用了一个来保存,所以不能满足打开了两个查询后需要导出前一个查询的需求。嗯 有待完善!

效果图:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jain_k

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值