注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Bioinformatics home

 
 
 

日志

 
 

asp.net excel 三  

2008-06-02 00:14:45|  分类: 编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

二. 对于复杂的EXCEL报表的生成处理,无非是纵向合并相同的数据行及嵌套纵向合并等一些操作,下面就几个具有针对性的报表作下说明.

            1.要生成相对复杂的EXCEL表,在从数据库取数据时,要注意先按照合理的要求排好序,有时候可能order by后面要跟好几个字段,而且这几个字段谁先谁后也要注意,因为这些会直接影响报表呈现的效果,比如你的EXCEL表要按月份统计国内外的项目,显示出来的时候要多个项目相同的人连续,那么排序就可能要这样order by 月份,项目类别,用户ID,项目ID(这是写好的视图,基于视图来检索的),这个排序的字段顺序就不能变了,变了的话就不太好生成想要的形式了,如下图:

asp.net excel 三 - xiaofeng1982 - Tiger-Leon 点击查看大图

这个也是动态画的,用了个简单的模板,模板就一个表头,没多大意义,除非表头很复杂而且在列表中不需要重画,考虑模板就比较好,向上面那个一月份国际的和其它月份的都是需要重画表头的。至于合并,如果不是嵌套的合并,我们可以在向模板循环写数据的时候直接控制,比如下面一个简单的写法:

 1  for (i = 0; i < table.Rows.Count; i++)

 2                             {

 3                                 bidName = table.Rows[index]["BIDNAME"].ToString();

 4                                 if (table.Rows[i]["BIDNAME"].ToString() == bidName)

 5                                 {

 6                                     projNum++;

 7                                     worksheet.Cells[5 + i, 2] = table.Rows[i]["PROJNO"];

 8                                     worksheet.Cells[5 + i, 3] = table.Rows[i]["PROJNAME"];

 9                                     worksheet.Cells[5 + i, 4] = table.Rows[i]["STAT_DATE"];

10                                     worksheet.Cells[5 + i, 5] = table.Rows[i]["PROJTYPE"];

11                                     worksheet.Cells[5 + i, 6] = table.Rows[i]["CONTENT"];

12                                     worksheet.Cells[5 + i, 7] = table.Rows[i]["OPENDT"];

13                                     worksheet.Cells[5 + i, 8] = table.Rows[i]["OPENADDRESS"];

14                                     worksheet.Cells[5 + i, 9] = table.Rows[i]["REV_DATE"];

15                                     worksheet.Cells[5 + i, 10] = table.Rows[i]["BID_UNIT"];

16                                     worksheet.Cells[5 + i, 11] = table.Rows[i]["AGT_AMOUNT"];

17                                     worksheet.Cells[5 + i, 12] = table.Rows[i]["CURRENCY"] + ":" + table.Rows[i]["BIDSER_AMOUNT"];

18                                     worksheet.Cells[5 + i, 13] = table.Rows[i]["SENDDATE"];

19                                     worksheet.Cells[5 + i, 14] = table.Rows[i]["CURRENCY"] + ":" + table.Rows[i]["BIDPRICE"];

20                                     worksheet.Cells[5 + i, 15] = table.Rows[i]["BOOKAMOUNT"];

21                                     worksheet.Cells[5 + i, 16] = table.Rows[i]["CURRENCY"] + ":" + table.Rows[i]["BAIL_AMOUNT"];

22                                     worksheet.Cells[5 + i, 17] = table.Rows[i]["USERNAME"];

23                                     worksheet.Cells[5 + i, 18] = table.Rows[i]["SECOND_USER"];

24                                     worksheet.Cells[5 + i, 19] = "";

25                                     worksheet.get_Range(worksheet.Cells[5 + i, 1], worksheet.Cells[5 + i, 19]).Borders.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);

26                                     continue;

27                                 }

28 

29                                 worksheet.get_Range(worksheet.Cells[5 + rowid, 1], worksheet.Cells[5 + i - 1, 1]).Merge(Missing.Value); //将第一列按投标单位合并

30                                 worksheet.get_Range(worksheet.Cells[5 + rowid, 1], worksheet.Cells[5 + rowid, 1]).Value2 = bidName + "(" + projNum.ToString() + "个项目)";//合并后的单元格内容

合并单元格的时候也要注意一个问题,就是合并的单元格必须是为空的,不然在执行合并时,会提示“合并后的单元格的值将丢失”,具体不这样提示的,大致是这个意思,一般我们合并都单元格相同的内容,在合并前我们先保存那个值,再清空后合并,上面的代码中把worksheet.Cell[5+rowid,1]这里系列的单元格的值空出来了,没写数据,而且最后合并了再写值,避免了去循环清空。

     2.嵌套的合并向上面那样做可能控制比较麻烦,而且思路可能很混乱,我们可以考虑先循环填充所有的数据,在循环出来要合并的列,比如像下面的这张表 asp.net excel 三 - xiaofeng1982 - Tiger-Leon 更多内容请看.NET移动与嵌入式技术.NET开发手册ASP.NET教程专题,或进入讨论组讨论。

  评论这张
 
阅读(503)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017