C#开发Excel报表一

      最近做了很长时间的excel开发,虽说有些报表的要求很变态,但是成果与时间还是成反比,尤其是报表的显示太依赖与数据的结构,一旦系统中的数据结构不符合要求时,总是会导致程序出现错误。虽然程序最终通过了测试,但是在发布之后的第一天还是出现了诸多问题,总结下来有三类问题,一是类型转换时出现溢出的现象,二是执行sql语句时出现超时的情况,另外一个,我直到现在还在纳闷,即是单元格合并时由于合并的单元格原本的数据没有清空,从而在合并时出现 excel合并提示的问题(合并单元格在程序中大量出现,并且本人在合并单元格时已经对要合并的单元格的数据进行清空,赋值为“”,而不是null,据经理说问题就在要设置为null而不是“”,但是同样的程序,却在测试库中不出现合并提示,在正式库中却出现,让人百思不得其解)。好了,就不在找借口了,错了就是错了,只要避免不要下次还在这个地方出错就好。

     报表样例如下:

     

 

     先说说数据的大致结构,吧:数据表A中de字段如下:

id  

xmmc  --项目名称

sortcode --排序编码

parent_id --父级id

dwtype--单位类型,分为但单位和双单位

dwmc--单位名称

haschilderen --是否下级子节点

其中sortcode字段比较关键,如果为第一级节点,sortcode的长度为5位,例如:00001。该一级节点的下级节点,即第二级节点的长度为10,为0000100001。也就是说我们可以根据sortcode的长度来推断当前的项目名称在系统中处于第几层节点。

而在报表中我们需要实现的是现实最下层节点的数据,同时又要显示该层节点的所对应的所有的上级节点。

接下来描述一下整个报表看法中需要注意的事项:

a.首先是不确定表中有几层节点,并且节点的层数是不相同的。此外,同时处于上层节点的项目名称如果出现相邻两列或者两行的名称相同的情况时,需要进行合并,因此具体的报表的样式可能会出现下图这样的:

b .签字行。由于报表涉及到签字的问题,同时每页都需要显示签字信息,这样我们就需要判断每页大概显示多少条数据,然后再插入签字信息,注意出入签字信息时还需要考虑到样式问题。

c .在每次重新刷新excel表中的数据时还需要注意清除掉excel中的数据,excel恢复到最初的样式。不然当数据发生改变时,会出现程序上的问题,详细的问题会在及接下来的文章中描述。

现在基本就可以动手制作整个报表了。如何制作这张报表,思路如下。

首先我们需要两个数据集,一个是读取所有的最底层数据集的数据,将这些数据一次性写到excel中,接着,根据这些数据的行数来判断数据大概有几页,然后再插入签字行,完成以上工作后,就需要完成开始纵向合并根节点的项目名称,因为根节点的项目一般不会参与横向合并。合并好根节点的名称后,要判断下整个数据中的父级节点是否大于三层,如果是则需要插入父节点和根节点之间的所有的节点,这需要借助另外的数据集来实现。接着先纵向合并上层节点的相同的项目名称,然后横向合并相同的项目名称。这样基本样式就会成形

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值