Asp.Net中应用Aspose.Cells输出报表到Excel 及样式设置
解决思路:
1、找个可用的Aspose.Cells(有钱还是买个正版吧,谁开发个东西也不容易);
2、在.Net方案中引用此Cells;
3、写个函数ToExcel(传递一个DataTable),可以另写个SetCellStyle的函数专门给各列设置样式。
4、在按钮的Click事件中调用此ToExcel()即可。
注:想更详细了解的到Aspose网站去,那里有很多在线文档,够你看的了。也可以下载个Demo程序研究。
部分代码贴在这里,代码还有需要改进的地方,暂时这么用着,给自己以后方便查找,再者给真正接触此控件的同志们抛个砖头:
ExportToExcel()的:
- /// <summary>
- /// 利用Aspose.Cells对DataTable数据生成Excel文件
- /// </summary>
- /// <returns>是否成功</returns>
- /// <param name="response">包含存储路径,直接用Response即可</param>
- /// <param name="dt">数据体</param>
- /// <param name="FileName">文件名</param>
- /// <param name="SheetName">sheet名</param>
- /// <param name="Title">表头</param>
- /// <param name="ColTitle">列标题,字符串数组</param>
- /// <param name="ColName">列名,字符串数组</param>
- /// <param name="ColWidth">列宽,整数数组</param>
- /// <param name="ColStyle">列样式,整数数组,1=居中文本、2=特殊字体Georgia、3=居左文本、4=整数(x)、5=2位小数(x,xxx.xx)、6=日期(yyyy-M-d不带时间)、7=百分数(0.123=12.3%)</param>
- /// <param name="ColTitleRow">列标题的开始行号,有title的设为1即可</param>
- /// <param name="err">返回的错误信息</param>
- public bool ExportToExcel(System.Web.HttpResponse response,DataTable dt, string FileName, string SheetName, string Title,
- ArrayList ColTitle, ArrayList ColName, ArrayList ColWidth, ArrayList ColStyle, int ColTitleRow, ref string err)
- {
- //先检查各数组是否个数一致
- if (ColTitle.Count != ColName.Count || ColTitle.Count != ColWidth.Count || ColTitle.Count != ColStyle.Count)
- {
- err = "数据组个数不一致";
- return false;
- }
- try
- {
- Workbook workbook = new Workbook();
- //打开模版文件
- // string path = System.Web.HttpContext.Current.Server.MapPath("~");
- // path = path.Substring(0, path.LastIndexOf("//"));
- // path += @"/designer/Workbooks/NumberFormatting.xls";
- // workbook.Open(path);
- //打开sheet
- workbook.Worksheets.Clear();
- Worksheet worksheet = workbook.Worksheets.Add(SheetName);
- worksheet = workbook.Worksheets[0];
- Cells cells = worksheet.Cells;
- //cells.ClearContents(0,0,60,30);
- //加入样式
- ArrayList styles = new ArrayList();
- styles = SetCellStyle(workbook, ColStyle);
- //加入Title即表头,类似“xxx汇总表”,其占居所有列数
- Range w;//范围
- if(ColTitleRow>0)
- {
- //Put数据到某个cell中
- cells[0,0].PutValue(Title);
- //设置行高
- cells.SetRowHeight(0, 35);
- //合并单元格
- cells.Merge(0,0,1,(byte)ColName.Count);
- //CreateRange函数参数说明:cells.CreateRange(firstrow, firstcol, rownumber, colnumber)
- w=cells.CreateRange(0,0,1,(byte)ColName.Count);
- //设置该合并单元的Style
- //w.Style = (Aspose.Cells.Style)styles[ColStyle.Count];
- w.Style = workbook.Styles["SheetTitle"];
- }
- //给各列的标题行PutValue,类似“序号,类型,名称,价格,数量,合计”
- int currow = ColTitleRow;
- byte curcol = 0;
- foreach(string s in ColTitle)
- {
- cells[currow,curcol++].PutValue(s);
- cells.SetRowHeight(ColTitleRow, 25);
- }
- //设置列标题行的Style
- w=cells.CreateRange(currow,0,1,ColName.Count);
- w.Style = (Aspose.Cells.Style)styles[ColStyle.Count+1];
- //上面这行也可以写成
- //w.Style = workbook.Styles["ColTitle"];//ColTitle在函数SetCellStyle中设置了
- currow++;
- //将数据体按顺序插入各cell
- for(int i=0; i<dt.Rows.Count; i++)
- {
- curcol = 0;
- for(int j=0; j<ColName.Count; j++)
- {
- object val = dt.Rows[i][ColName[j].ToString()].ToString().Trim();
- switch (int.Parse(ColStyle[j].ToString()))
- {
- case 4://整数
- if (val.ToString().Length>0)
- val = Int32.Parse(val.ToString());
- else
- val = "";
- break;
- case 5://2位小数
- if (val.ToString().Length>0)
- val = Decimal.Parse(val.ToString());
- else
- val = "";
- break;
- case 6://日期
- if (val.ToString().Length>0)
- val = DateTime.Parse(val.ToString());
- else
- val = "";
- break;
- case 7://百分数,1=100%
- if (val.ToString().Length>0)
- val = Decimal.Parse(val.ToString());
- else
- val = "";
- break;
- default:
- break;
- }//end switch
- cells[currow,curcol++].PutValue(val);
- }//end for j
- currow ++;
- } //end for i
- curcol = 0;
- //设置数据体Style
- for(int i=0; i<dt.Columns.Count; i++)
- {
- w = cells.CreateRange(ColTitleRow+1, i, dt.Rows.Count, 1);
- w.Style = (Aspose.Cells.Style)styles[i];
- }
- //w=cells.CreateRange(ColTitleRow+1,col,currow,ColName.Count);
- //w.Style=excel.Styles["Data"];
- //设置各列宽度
- foreach(int s in ColWidth)
- cells.SetColumnWidth(curcol++, s);
- /*
- //********可参考的格式设置*******************************************************
- //Set number format with built-in index
- for (int i = 0; i < 37; i ++)
- {
- cells[i, 1].PutValue(1234.5);
- //int Number = cells[i, 0].IntValue;
- //Set the display number format
- cells[i, 1].Style.Number = i;
- }
- //Set number format with custom format string
- for (int i = 1; i < 4; i ++)
- {
- cells[i, 3].PutValue(1234.5);
- //Set the display custom number format
- cells[i, 3].Style.Custom = cells[i, 2].StringValue;
- }
- //********可参考的格式设置*******************************************************
- */
- //workbook.Save(FileName, FileFormatType.Default, SaveType.OpenInExcel, System.Web.HttpContext.Current.Response);
- workbook.Save(FileName, FileFormatType.Default, SaveType.OpenInExcel, response);
- return true;
- }
- catch (Exception ex)
- {
- err = ex.Message;
- return false;
- }
- }//end ExportToExcel()
- #endregion
样式设置SetStyle()的:
- #region SetCellStyle()设置格式,如果需要增加新的格式,请在case后面增加,不要修改前面的
- public ArrayList SetCellStyle(Workbook workbook, ArrayList styleindex)
- {
- //通用设置样式的
- ArrayList CellStyle = new ArrayList(styleindex.Count + 2);
- Aspose.Cells.Style style = null;
- for (int i=0; i<styleindex.Count; i++)
- {
- int index = workbook.Styles.Add();
- style = workbook.Styles[index];
- style.Name = "Custom_Style" + ((int)(i + 1)).ToString();
- style.ForegroundColor = Color.White;
- style.HorizontalAlignment = TextAlignmentType.Center;
- style.VerticalAlignment = TextAlignmentType.Center;
- style.Font.Name = "宋体";
- style.Font.Size = 10;
- style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
- style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
- style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
- style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
- switch((int)styleindex[i])
- {
- case 1://居中文本
- style.HorizontalAlignment = TextAlignmentType.Center;
- style.VerticalAlignment = TextAlignmentType.Center;
- break;
- case 2://特殊字体Georgia
- style.Font.Name = "Georgia";
- break;
- case 3://文本列
- style.HorizontalAlignment = TextAlignmentType.Left;
- break;
- case 4://整数列 1 Decimal 0
- style.HorizontalAlignment = TextAlignmentType.Center;
- style.Number = 1;
- break;
- case 5://2位小数 39={Currency #,##0.00;-#,##0.00} 40={#,##0.00;[Red]-#,##0.00}
- style.HorizontalAlignment = TextAlignmentType.Right;
- style.Number = 40;
- break;
- case 6://日期列 14 Date yyyy-m-d
- style.HorizontalAlignment = TextAlignmentType.Center;
- style.Number = 14;//这个格式不是太好,还需要调整
- break;
- case 7://百分比% 10 Percentage 0.00%
- style.HorizontalAlignment = TextAlignmentType.Center;
- style.Number = 10;
- break;
- default:
- break;
- }//end switch
- CellStyle.Add(style);
- }
- //特别增加一个用于表头的style.Name = "SheetTitle";
- int sindex = workbook.Styles.Add();
- style = workbook.Styles[sindex];
- style.Name = "SheetTitle";
- style.Font.Size = 14;
- style.Font.IsBold = true;
- style.Font.Name = "楷体_GB2312";
- style.HorizontalAlignment = TextAlignmentType.Center;
- style.VerticalAlignment = TextAlignmentType.Center;
- style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
- style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
- style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
- style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
- CellStyle.Add(style);
- //特别增加一个用于列标题的style.Name = "ColTitle";
- sindex = workbook.Styles.Add();
- style = workbook.Styles[sindex];
- style.Name = "ColTitle";
- style.Font.Size = 12;
- style.Font.IsBold = true;
- style.Font.Name = "宋体";
- style.HorizontalAlignment = TextAlignmentType.Center;
- style.VerticalAlignment = TextAlignmentType.Center;
- style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
- style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
- style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
- style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
- CellStyle.Add(style);
- //返回样式数组
- return CellStyle;
- }//end SetCellStyle
- #endregion
Asp.Net中应用Aspose.Cells输出报表到Excel 及样式设置的更多相关文章
- aspose.cells根据模板导出excel
又隔十多天没写博客了,最近都在忙项目的事情,公司人事变动也比较大,手头上就又多了一个项目.最近做用aspose.cells根据模板导出excel报价单的功能,顺便把相关的核心记下来,先上模板和导出的效 ...
- C# -- 使用Aspose.Cells创建和读取Excel文件
使用Aspose.Cells创建和读取Excel文件 1. 创建Excel Aspose.Cells.License li = new Aspose.Cells.License(); li.SetLi ...
- 在ASP.NET MVC中利用Aspose.cells 将查询出的数据导出为excel,并在浏览器中下载。
正题前的唠叨 本人是才出来工作不久的小白菜一颗,技术很一般,总是会有遇到一些很简单的问题却不知道怎么做,这些问题可能是之前解决过的.发现这个问题,想着提升一下自己的技术水平,将一些学的新的'好'东西记 ...
- C# WinForm使用Aspose.Cells.dll 导出导入Excel/Doc 完整实例教程
1.添加引用: Aspose.Cells.dll(我们就叫工具包吧,可以从网上下载.关于它的操作我在“Aspose.Cells操作说明 中文版 下载 Aspose C# 导出Excel 实例”一文中的 ...
- 用Aspose.Cells控件读取Excel
Aspose是一个很强大的控件,可以用来操作word,excel,ppt等文件,用这个控件来导入.导出数据非常方便.其中Aspose.Cells就是用来操作Excel的,功能有很多.我所用的是最基本的 ...
- java利用Aspose.cells.jar将本地excel文档转化成pdf(完美破解版 无水印 无中文乱码)
下载aspose-cells-8.5.2.jar包 http://pan.baidu.com/s/1kUBzsQ7 JAVA代码 package webViewer; import java.io.* ...
- 使用Aspose.Cells利用模板导出Excel(C#)
前言 随着互联网的流行,web项目逐渐占据主流.我相信大部分人开发项目的过程中都写过上传以及导出Excel和Word的功能,本文仅讨论导出Excel.C#中有很多第三方组件支持导出Excel,比如:N ...
- 基于 Aspose.Cells与XML导入excel 数据----操作类封装
前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...
- 使用Aspose.Cells 根据模板生成excel里面的 line chart
目的: 1.根据模板里面的excel数据信息,动态创建line chart 2.linechart 的样式改为灰色 3.以流的形式写到客户端,不管客户端是否装excel,都可以导出到到客户端 4.使用 ...
随机推荐
- 手机端布局rem 与vm的使用
手机端原来的时候,在项目中使用js判断出html的字体,然后根据rem设置字体,但是js本着少用的原则,考虑用vm,vh等(顺带说一句,vm vh是网页可视区域宽度 高度 即浏览器宽度减去约16px) ...
- swift-重写方法和属性、禁止重写
/*子类可以为继承来的实例方法,类方法,实例属性,或下标提供自己定制的实现.我们把这种行为叫重写. 如果要重写某个特性,你需要在重写定义的前面加上 关键字.这么做,你就表明了你是想提供一个重写 版本, ...
- 20145220&20145209&20145309信息安全系统设计基础实验报告(3)
20145220&20145209&20145309信息安全系统设计基础实验报告(3) 实验报告链接: http://www.cnblogs.com/zym0728/p/6132243 ...
- How to only capute sub-matched character by grep
File content: <a href="ceph-0.80.9-82.1.x86_64.rpm"><img src="/icons/rpm.gif ...
- js 图片加载完后的处理事件
//图片加载完成后再显示页面 document.getElementById('icon').onload=function(){ document.getElementById('wrap').st ...
- 视觉机器学习笔记------CNN学习
卷积神经网络是第一个被成功训练的多层神经网络结构,具有较强的容错.自学习及并行处理能力. 一.基本原理 1.CNN算法思想 卷积神经网络可以看作为前馈网络的特例,主要在网络结构上对前馈网络进行简化和改 ...
- Liunx面试题
答案待定 1.请用shell查询file1 里面空行的所在行号2.编写ShellScript查询file1 以abc 结尾的行3.打印出file1 文件第1 到第3 行4.如何将本地80 端口的请求转 ...
- docker在centos7下的一些坑
在centos的docker上安装mysql提示chown mod /var/lib/mysql permission denied,通过下面的方法1解决. 在centos上挂载数据卷,在容器内部访问 ...
- ceph network introduce
网络结构 Ceph 使用以太网连接内部各存储节点以及连接 client 和集群.Ceph 推荐使用两个网络: 前端(北向)网络( a public (front-side) network):连接客户 ...
- 可爱的Python_课后习题_CDay−5 Python 初体验和原始需求
计算今年是否是闰年.判断闰年条件,满足年份模400 为0,或者模4 为0 但模100不为0. def is_learp_year(year): """判断年份是否为润年& ...