解决思路:

1、找个可用的Aspose.Cells(有钱还是买个正版吧,谁开发个东西也不容易);

2、在.Net方案中引用此Cells;

3、写个函数ToExcel(传递一个DataTable),可以另写个SetCellStyle的函数专门给各列设置样式。

4、在按钮的Click事件中调用此ToExcel()即可。

注:想更详细了解的到Aspose网站去,那里有很多在线文档,够你看的了。也可以下载个Demo程序研究。

部分代码贴在这里,代码还有需要改进的地方,暂时这么用着,给自己以后方便查找,再者给真正接触此控件的同志们抛个砖头:

ExportToExcel()的:

  1. /// <summary>
  2. /// 利用Aspose.Cells对DataTable数据生成Excel文件
  3. /// </summary>
  4. /// <returns>是否成功</returns>
  5. /// <param name="response">包含存储路径,直接用Response即可</param>
  6. /// <param name="dt">数据体</param>
  7. /// <param name="FileName">文件名</param>
  8. /// <param name="SheetName">sheet名</param>
  9. /// <param name="Title">表头</param>
  10. /// <param name="ColTitle">列标题,字符串数组</param>
  11. /// <param name="ColName">列名,字符串数组</param>
  12. /// <param name="ColWidth">列宽,整数数组</param>
  13. /// <param name="ColStyle">列样式,整数数组,1=居中文本、2=特殊字体Georgia、3=居左文本、4=整数(x)、5=2位小数(x,xxx.xx)、6=日期(yyyy-M-d不带时间)、7=百分数(0.123=12.3%)</param>
  14. /// <param name="ColTitleRow">列标题的开始行号,有title的设为1即可</param>
  15. /// <param name="err">返回的错误信息</param>
  16. public bool ExportToExcel(System.Web.HttpResponse response,DataTable dt, string FileName, string SheetName, string Title,
  17. ArrayList ColTitle, ArrayList ColName, ArrayList ColWidth, ArrayList ColStyle, int ColTitleRow, ref string err)
  18. {
  19. //先检查各数组是否个数一致
  20. if (ColTitle.Count != ColName.Count || ColTitle.Count != ColWidth.Count || ColTitle.Count != ColStyle.Count)
  21. {
  22. err = "数据组个数不一致";
  23. return false;
  24. }
  25. try
  26. {
  27. Workbook workbook = new Workbook();
  28. //打开模版文件
  29. //          string path = System.Web.HttpContext.Current.Server.MapPath("~");
  30. //          path = path.Substring(0, path.LastIndexOf("//"));
  31. //          path += @"/designer/Workbooks/NumberFormatting.xls";
  32. //          workbook.Open(path);
  33. //打开sheet
  34. workbook.Worksheets.Clear();
  35. Worksheet worksheet = workbook.Worksheets.Add(SheetName);
  36. worksheet = workbook.Worksheets[0];
  37. Cells cells = worksheet.Cells;
  38. //cells.ClearContents(0,0,60,30);
  39. //加入样式
  40. ArrayList styles = new ArrayList();
  41. styles = SetCellStyle(workbook, ColStyle);
  42. //加入Title即表头,类似“xxx汇总表”,其占居所有列数
  43. Range w;//范围
  44. if(ColTitleRow>0)
  45. {
  46. //Put数据到某个cell中
  47. cells[0,0].PutValue(Title);
  48. //设置行高
  49. cells.SetRowHeight(0, 35);
  50. //合并单元格
  51. cells.Merge(0,0,1,(byte)ColName.Count);
  52. //CreateRange函数参数说明:cells.CreateRange(firstrow, firstcol, rownumber, colnumber)
  53. w=cells.CreateRange(0,0,1,(byte)ColName.Count);
  54. //设置该合并单元的Style
  55. //w.Style = (Aspose.Cells.Style)styles[ColStyle.Count];
  56. w.Style = workbook.Styles["SheetTitle"];
  57. }
  58. //给各列的标题行PutValue,类似“序号,类型,名称,价格,数量,合计”
  59. int currow = ColTitleRow;
  60. byte curcol = 0;
  61. foreach(string s in ColTitle)
  62. {
  63. cells[currow,curcol++].PutValue(s);
  64. cells.SetRowHeight(ColTitleRow, 25);
  65. }
  66. //设置列标题行的Style
  67. w=cells.CreateRange(currow,0,1,ColName.Count);
  68. w.Style = (Aspose.Cells.Style)styles[ColStyle.Count+1];
  69. //上面这行也可以写成
  70. //w.Style = workbook.Styles["ColTitle"];//ColTitle在函数SetCellStyle中设置了
  71. currow++;
  72. //将数据体按顺序插入各cell
  73. for(int i=0; i<dt.Rows.Count; i++)
  74. {
  75. curcol = 0;
  76. for(int j=0; j<ColName.Count; j++)
  77. {
  78. object val = dt.Rows[i][ColName[j].ToString()].ToString().Trim();
  79. switch (int.Parse(ColStyle[j].ToString()))
  80. {
  81. case 4://整数
  82. if (val.ToString().Length>0)
  83. val = Int32.Parse(val.ToString());
  84. else
  85. val = "";
  86. break;
  87. case 5://2位小数
  88. if (val.ToString().Length>0)
  89. val = Decimal.Parse(val.ToString());
  90. else
  91. val = "";
  92. break;
  93. case 6://日期
  94. if (val.ToString().Length>0)
  95. val = DateTime.Parse(val.ToString());
  96. else
  97. val = "";
  98. break;
  99. case 7://百分数,1=100%
  100. if (val.ToString().Length>0)
  101. val = Decimal.Parse(val.ToString());
  102. else
  103. val = "";
  104. break;
  105. default:
  106. break;
  107. }//end switch
  108. cells[currow,curcol++].PutValue(val);
  109. }//end for j
  110. currow ++;
  111. } //end for i
  112. curcol = 0;
  113. //设置数据体Style
  114. for(int i=0; i<dt.Columns.Count; i++)
  115. {
  116. w = cells.CreateRange(ColTitleRow+1, i, dt.Rows.Count, 1);
  117. w.Style = (Aspose.Cells.Style)styles[i];
  118. }
  119. //w=cells.CreateRange(ColTitleRow+1,col,currow,ColName.Count);
  120. //w.Style=excel.Styles["Data"];
  121. //设置各列宽度
  122. foreach(int s in ColWidth)
  123. cells.SetColumnWidth(curcol++, s);
  124. /*
  125. //********可参考的格式设置*******************************************************
  126. //Set number format with built-in index
  127. for (int i = 0; i < 37; i ++)
  128. {
  129. cells[i, 1].PutValue(1234.5);
  130. //int Number = cells[i, 0].IntValue;
  131. //Set the display number format
  132. cells[i, 1].Style.Number = i;
  133. }
  134. //Set number format with custom format string
  135. for (int i = 1; i < 4; i ++)
  136. {
  137. cells[i, 3].PutValue(1234.5);
  138. //Set the display custom number format
  139. cells[i, 3].Style.Custom = cells[i, 2].StringValue;
  140. }
  141. //********可参考的格式设置*******************************************************
  142. */
  143. //workbook.Save(FileName, FileFormatType.Default, SaveType.OpenInExcel, System.Web.HttpContext.Current.Response);
  144. workbook.Save(FileName, FileFormatType.Default, SaveType.OpenInExcel, response);
  145. return true;
  146. }
  147. catch (Exception ex)
  148. {
  149. err = ex.Message;
  150. return false;
  151. }
  152. }//end ExportToExcel()
  153. #endregion

样式设置SetStyle()的:

  1. #region SetCellStyle()设置格式,如果需要增加新的格式,请在case后面增加,不要修改前面的
  2. public ArrayList SetCellStyle(Workbook workbook, ArrayList styleindex)
  3. {
  4. //通用设置样式的
  5. ArrayList CellStyle = new ArrayList(styleindex.Count + 2);
  6. Aspose.Cells.Style style = null;
  7. for (int i=0; i<styleindex.Count; i++)
  8. {
  9. int index = workbook.Styles.Add();
  10. style = workbook.Styles[index];
  11. style.Name = "Custom_Style" + ((int)(i + 1)).ToString();
  12. style.ForegroundColor = Color.White;
  13. style.HorizontalAlignment = TextAlignmentType.Center;
  14. style.VerticalAlignment = TextAlignmentType.Center;
  15. style.Font.Name = "宋体";
  16. style.Font.Size = 10;
  17. style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
  18. style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
  19. style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
  20. style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
  21. switch((int)styleindex[i])
  22. {
  23. case 1://居中文本
  24. style.HorizontalAlignment = TextAlignmentType.Center;
  25. style.VerticalAlignment = TextAlignmentType.Center;
  26. break;
  27. case 2://特殊字体Georgia
  28. style.Font.Name = "Georgia";
  29. break;
  30. case 3://文本列
  31. style.HorizontalAlignment = TextAlignmentType.Left;
  32. break;
  33. case 4://整数列 1 Decimal 0
  34. style.HorizontalAlignment = TextAlignmentType.Center;
  35. style.Number = 1;
  36. break;
  37. case 5://2位小数 39={Currency #,##0.00;-#,##0.00}   40={#,##0.00;[Red]-#,##0.00}
  38. style.HorizontalAlignment = TextAlignmentType.Right;
  39. style.Number = 40;
  40. break;
  41. case 6://日期列 14 Date yyyy-m-d
  42. style.HorizontalAlignment = TextAlignmentType.Center;
  43. style.Number = 14;//这个格式不是太好,还需要调整
  44. break;
  45. case 7://百分比% 10 Percentage 0.00%
  46. style.HorizontalAlignment = TextAlignmentType.Center;
  47. style.Number = 10;
  48. break;
  49. default:
  50. break;
  51. }//end switch
  52. CellStyle.Add(style);
  53. }
  54. //特别增加一个用于表头的style.Name = "SheetTitle";
  55. int sindex = workbook.Styles.Add();
  56. style = workbook.Styles[sindex];
  57. style.Name = "SheetTitle";
  58. style.Font.Size = 14;
  59. style.Font.IsBold = true;
  60. style.Font.Name = "楷体_GB2312";
  61. style.HorizontalAlignment = TextAlignmentType.Center;
  62. style.VerticalAlignment = TextAlignmentType.Center;
  63. style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
  64. style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
  65. style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
  66. style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
  67. CellStyle.Add(style);
  68. //特别增加一个用于列标题的style.Name = "ColTitle";
  69. sindex = workbook.Styles.Add();
  70. style = workbook.Styles[sindex];
  71. style.Name = "ColTitle";
  72. style.Font.Size = 12;
  73. style.Font.IsBold = true;
  74. style.Font.Name = "宋体";
  75. style.HorizontalAlignment = TextAlignmentType.Center;
  76. style.VerticalAlignment = TextAlignmentType.Center;
  77. style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
  78. style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
  79. style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
  80. style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
  81. CellStyle.Add(style);
  82. //返回样式数组
  83. return CellStyle;
  84. }//end SetCellStyle
  85. #endregion

Asp.Net中应用Aspose.Cells输出报表到Excel 及样式设置的更多相关文章

  1. aspose.cells根据模板导出excel

    又隔十多天没写博客了,最近都在忙项目的事情,公司人事变动也比较大,手头上就又多了一个项目.最近做用aspose.cells根据模板导出excel报价单的功能,顺便把相关的核心记下来,先上模板和导出的效 ...

  2. C# -- 使用Aspose.Cells创建和读取Excel文件

    使用Aspose.Cells创建和读取Excel文件 1. 创建Excel Aspose.Cells.License li = new Aspose.Cells.License(); li.SetLi ...

  3. 在ASP.NET MVC中利用Aspose.cells 将查询出的数据导出为excel,并在浏览器中下载。

    正题前的唠叨 本人是才出来工作不久的小白菜一颗,技术很一般,总是会有遇到一些很简单的问题却不知道怎么做,这些问题可能是之前解决过的.发现这个问题,想着提升一下自己的技术水平,将一些学的新的'好'东西记 ...

  4. C# WinForm使用Aspose.Cells.dll 导出导入Excel/Doc 完整实例教程

    1.添加引用: Aspose.Cells.dll(我们就叫工具包吧,可以从网上下载.关于它的操作我在“Aspose.Cells操作说明 中文版 下载 Aspose C# 导出Excel 实例”一文中的 ...

  5. 用Aspose.Cells控件读取Excel

    Aspose是一个很强大的控件,可以用来操作word,excel,ppt等文件,用这个控件来导入.导出数据非常方便.其中Aspose.Cells就是用来操作Excel的,功能有很多.我所用的是最基本的 ...

  6. java利用Aspose.cells.jar将本地excel文档转化成pdf(完美破解版 无水印 无中文乱码)

    下载aspose-cells-8.5.2.jar包 http://pan.baidu.com/s/1kUBzsQ7 JAVA代码 package webViewer; import java.io.* ...

  7. 使用Aspose.Cells利用模板导出Excel(C#)

    前言 随着互联网的流行,web项目逐渐占据主流.我相信大部分人开发项目的过程中都写过上传以及导出Excel和Word的功能,本文仅讨论导出Excel.C#中有很多第三方组件支持导出Excel,比如:N ...

  8. 基于 Aspose.Cells与XML导入excel 数据----操作类封装

    前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...

  9. 使用Aspose.Cells 根据模板生成excel里面的 line chart

    目的: 1.根据模板里面的excel数据信息,动态创建line chart 2.linechart 的样式改为灰色 3.以流的形式写到客户端,不管客户端是否装excel,都可以导出到到客户端 4.使用 ...

随机推荐

  1. yxcms后台验证码不显示?怎么取消yxcms后台验证码

    嗨,大家好,我是YXCMS的小M老湿,(其实还是习惯大家叫我猪猪吧!)今天又要分享一则yxcms的使用技巧,当然也是yxcms用户在使用过程中很容易出现的小白问题,当然还是同样,yxcms的大神级别的 ...

  2. Apache Kafka – KIP 32,33 Time Index

    32, 33都是和时间相关的, KIP-32 - Add timestamps to Kafka message 引入版本,0.10.0.0 需要给kafka的message加上时间戳,这样更方便一些 ...

  3. angular前端开发环境

    1.代码编辑工具 webstorm 2.断点调试工具 chrome插件Batarang 3.版本管理工具 git(仅仅是命令行工具) git小乌龟--tortoisegit(图形化工具) 首先在git ...

  4. GDB调试32位汇编堆栈分析

    GDB调试32位汇编堆栈分析 测试源代码 #include <stdio.h> int g(int x){ return x+5; } int f(int x){ return g(x)+ ...

  5. avalon的表单验证

    表单验证 avalon内置了强大的表单验证功能,它需要结合ms-duplex, ms-validate, ms-rules这个三个指令一起使用. ms-duplex负责监控每个表单元素的输入. ms- ...

  6. LeetCode Power of Four

    原题链接在这里:https://leetcode.com/problems/power-of-four/ 题目: Given an integer (signed 32 bits), write a ...

  7. 监控redis python脚本

    #!/bin/env python #-*- coding:utf- -*- import json import time import socket import os import re imp ...

  8. docker 使用非加密registry

    配置docker成为服务,自启动 sudo systemctl enable docker.service 启动服务 sudo systemctl start docker docker默认要求我们使 ...

  9. css3(border-radius)边框圆角详解

    传统的圆角生成方案,必须使用多张图片作为背景图案.CSS3的出现,使得我们再也不必浪费时间去制作这些图片了,只需要border-radius属性,支持浏览器IE 9.Opera 10.5.Safari ...

  10. C# 提供两种切割圆形图片的方式

    效果: private void Form1_Load(object sender, EventArgs e) { string file =System.IO.Path.Combine(Enviro ...