ASP.NET报表问题的解决方法(附源码)
创始人
2024-04-22 19:50:46
0

做ASP.NET项目都会碰到ASP.NET报表问题,中国式报表的繁琐让我很是反感,可没法子啊,客户有需求!自然而然想用DCOM直接操作EXCEL,马马虎虎算是成了,虽说安全性不好,资源浪费严重,毕竟在局域网中使用,凑合吧。

不过总是讨厌在服务端那个没有结束的EXCEL进程……一定要把敌人杀死!google了一把,原来当今中外都有这个ASP.NET报表问题。解决方案也有,Windows XP下搞定,但我在WINDOWS 2003下搞了整整一天也没杀死,得,真想自个杀了。后来有人推荐了个控件ASPOSE解决ASP.NET报表问题,这玩意强,服务端都不用装EXCEL,效果不错!想偷懒的用这玩意,一个字——爽! 

  1. private string subTotal(int row ,int num)  
  2.         {   
  3.             string r = (row+1).ToString();  
  4.          if( num == 0)//  
  5.          {  
  6.              return "=C"+r+"+F"+r+"-I"+r;  
  7.          }  
  8.         else 
  9.             return "=E"+r+"+H"+r+"-K"+r;  
  10.               
  11.         }  
  12.         private string sumTotal(string scol,int firstrow,int num){  
  13.  
  14.         string r = num.ToString();  
  15.             string fr = firstrow.ToString();  
  16.             return "=Sum("+scol+fr+":"+scol+r+")";  
  17.  
  18.         }  
  19.         private void CreateExcelWorkbook(DataRow[] rows)  
  20.         {  
  21.             string strCurrentDir = Server.MapPath("..") + "\\TempReports\\";  
  22.             string licenseFile = MapPath("..") + "\\XML\\Aspose.Excel.lic";               
  23.             Excel excel = new Excel(licenseFile, this);  
  24.         ;  
  25.             string designerFile = strCurrentDir+"cangku2.xls";  
  26.                         excel.Open(designerFile);  
  27.             Worksheet sheet = excel.Worksheets["Sheet1"];  
  28.             sheet.Name = "wuzi";  
  29.             Cells cells = sheet.Cells;  
  30.             int styleIndex;  
  31.               
  32.             styleIndex = excel.Styles.Add();  
  33.             Aspose.Excel.Style stylecell = excel.Styles[styleIndex];  
  34.             stylecell.Borders[BorderType.LeftBorder].LineStyle=CellBorderType.Thin;  
  35.             stylecell.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;  
  36.             stylecell.Borders[BorderType.RightBorder].LineStyle=CellBorderType.Thin;  
  37.             stylecell.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;  
  38.             int iRow =4;  
  39.             foreach(DataRow row in rows)  
  40.             {  
  41.             cells[iRow,0].PutValue(row[0].ToString());  
  42.             cells[iRow,1].PutValue(row[1].ToString());  
  43.             cells[iRow,2].PutValue(row[2]);  
  44.             cells[iRow,3].PutValue( row[3]);  
  45.             cells[iRow,4].PutValue(row[4]);  
  46.             cells[iRow,5].PutValue(row[5]);  
  47.             cells[iRow,6].PutValue(row[3]);  
  48.             cells[iRow,7].PutValue(row[6]);  
  49.             cells[iRow,8].PutValue(row[7]);  
  50.             cells[iRow,9].PutValue(row[3]);  
  51.             cells[iRow,10].PutValue(row[8]);  
  52.             cells[iRow,11].Formula=subTotal(iRow,0);  
  53.             cells[iRow,12].PutValue(row[3]);  
  54.             cells[iRow,13].Formula=subTotal(iRow,1);  
  55.             iRow++;  
  56.                 }  
  57.             string zj="总计";  
  58.                 cells[iRow,3].PutValue(zj);  
  59.                  cells[iRow,6].PutValue(zj);  
  60.                  cells[iRow,9].PutValue(zj);  
  61.                cells[iRow,12].PutValue(zj);  
  62.                 cells[iRow,4].Formula=sumTotal("E",5,iRow);  
  63.                 cells[iRow,7].Formula=sumTotal("H",5,iRow);  
  64.                 cells[iRow,10].Formula=sumTotal("K",5,iRow);  
  65.                 cells[iRow,13].Formula=sumTotal("N",5,iRow);  
  66.                 cells[1,8].PutValue(cpStartDate.SelectedDate.ToShortDateString());  
  67.                 cells[1,12].PutValue(cpEndDate.SelectedDate.ToShortDateString());  
  68.             Range range = cells.CreateRange(4,0,iRow-4+1,14);  
  69.                 range.Style = stylecell;  
  70.             for(int i = 0; i < excel.Worksheets.Count ; i ++)  
  71.             {  
  72.                 sheet = excel.Worksheets[i];  
  73.                 if(sheet.Name != "wuzi")  
  74.                 {  
  75.              excel.Worksheets.RemoveAt(i);  
  76.                     i --;  
  77.                 }  
  78.  
  79.             }  
  80.                 /*Response.Clear();  
  81.           Response.Buffer= true;  
  82.           Response.Charset="GB2312";  
  83.  
  84.         this.Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");*/ 
  85.               
  86.         excel.Save(HttpUtility.UrlEncode("物资进出库汇总.xls",Encoding.UTF8), SaveType.OpenInBrowser,FileFormatType.Default,this.Response);  
  87. }  

【编辑推荐】

  1. 浅谈ASP.NET报表控件
  2. ASP.NET环境下的Shell函数
  3. 在ASP.NET中向数据库批量插入数据
  4. ASP.NET用Post方式向网页发送数据
  5. ASP.NET 2.0部署WEB应用程序浅析
  6. ASP.NET中的HttpWorkerRequest对像

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...