MyXls导出Excel (适用于Winform/WebForm)
Excel文章我已经写了两篇,有时间的可以去看一看。今天再说一种实现导出Excel的第三方组件MyXls组件。
我引用百度百科对它的描述:
MyXls是一个操作Excel的开源类库,支持设置字体、列宽、行高(由BOSSMA实现)、合并单元格、边框、背景颜色、数据类型、自动换行、对齐方式等,通过众多项目的使用表现,
证明MyXls对于创建
简单格式的Excel文件十分快捷方便。 MyXLS是一个导出Excel的好工具,速度快,体积小,而且也不用担心使用Com生成Excel时资源释放的问题了
有机会可以去官方下载相关代码,我这里直接给出这个dll的下载地址
我还根据前两篇文章的实现功能,使用MyXls来实现一下。
如果没有看前两启篇文章的我再说一下实现功能:
(1)Excel行数的限制,office2003的行数为65536行。如果超过这个行数应该再来一个sheet
(2)导出数据慢的问题
(3)如果用微软的Excel插件,还必须在服务器安装office,用此插件就可以解决了。
代码实现开始:
(1)下载dll,在你的程序中添加引用,并用引用命名空间
using org.in2bits.MyXls;
using System.IO;
(2)创建Excel工单薄
XlsDocument xls = new XlsDocument();
Worksheet sheet = xls.Workbook.Worksheets.Add("新Sheet");
(3)添加内容到sheet中
sheet.Cells.Add(插入单元格的行,插入单元格的列, 插入的值);
例如:
sheet.Cells.Add(1,1, "我是第一行第一列的值");
它的Add方法有四个重载,我这里只讲本例中用到的方法。
(4)保存
//第一种保存方式:适用于Winform / WebForm string strFilePath = System.AppDomain.CurrentDomain.BaseDirectory; xls.FileName =sheetName; xls.Save(strFilePath); xls = null; //第二种保存方式适用于WebForm,可以选择保存路径 using (MemoryStream ms = new MemoryStream()) { xls.Save(ms); ms.Flush(); ms.Position = 0; xls = null; HttpResponse response = System.Web.HttpContext.Current.Response; response.Clear(); response.Charset = "UTF-8"; response.ContentType = "application/vnd-excel";//"application/vnd.ms-excel"; System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=" + xlsname)); //System.Web.HttpContext.Current.Response.WriteFile(fi.FullName); byte[] data = ms.ToArray(); System.Web.HttpContext.Current.Response.BinaryWrite(data); }
基本代码要点,解释完毕,我把完整代码贴出来,供大家参考:
/// <summary> /// 第三方插件MyXls导出Excel数据 /// </summary> /// <param name="dt">数据源</param> /// <param name="sheetName">sheet表单名称</param> /// <param name="xlsname">生成Excel的名称</param> /// <returns>返回是否成功信息</returns> public static string DataTableToExcel(System.Data.DataTable dt,string sheetName, string xlsname) { string msg = ""; XlsDocument xls = new XlsDocument(); try { //最大行限制 int MaxRowCount = 60000; int rowCount = dt.Rows.Count; int colCount = dt.Columns.Count; if (rowCount > 0 && rowCount <= MaxRowCount) { Worksheet sheet = xls.Workbook.Worksheets.Add(sheetName); for (int j = 0; j < colCount; j++) { sheet.Cells.Add(1, j + 1, dt.Columns[j].ColumnName.ToString()); } for (int j = 0; j < rowCount; j++) { for (int k = 0; k < colCount; k++) { sheet.Cells.Add(j + 2, k + 1, dt.Rows[j][k].ToString()); } } } else //超过sheet表单的就再创适sheet表单 { int sheetCount = 1; //sheet表单个数 if (rowCount % MaxRowCount == 0) { sheetCount = rowCount / MaxRowCount; } else { sheetCount = rowCount / MaxRowCount + 1; } int Flag = 1; for (var m = 0; m < sheetCount; m++) { //添加一个sheet表单 Worksheet sheet = xls.Workbook.Worksheets.Add("第" + (m + 1) + "页数据"); //如果不是最后一个表单的话 并且最后一个sheet表单数据不等于60000 if (Flag == sheetCount && (rowCount % MaxRowCount != 0)) { int newrowCount = rowCount - ((Flag - 1) * MaxRowCount); //最后一个sheet的数据 int RowIndex = 0; for (int j = 0; j < colCount; j++) { sheet.Cells.Add(1, j + 1, dt.Columns[j].ColumnName.ToString()); } int startIndex = (Flag - 1) * MaxRowCount; for (int n = startIndex; n < startIndex + newrowCount; n++) { for (int t = 0; t < colCount; t++) { sheet.Cells.Add(RowIndex + 2, t + 1, dt.Rows[n][t].ToString()); } RowIndex++; } } else { for (int j = 0; j < colCount; j++) { sheet.Cells.Add(1, j + 1, dt.Columns[j].ColumnName.ToString()); } int startIndex = (Flag - 1) * MaxRowCount; int rowIndex = 0; for (int n = startIndex; n < startIndex + MaxRowCount; n++) { for (int t = 0; t < colCount; t++) { sheet.Cells.Add(rowIndex + 2, t + 1, dt.Rows[n][t].ToString()); } rowIndex++; } } Flag++; } } #region 客户端保存 //第一种保存方式:适用于Winform / WebForm string strFilePath = System.AppDomain.CurrentDomain.BaseDirectory; xls.FileName =sheetName; xls.Save(strFilePath); xls = null; //第二种保存方式适用于WebForm,可以选择保存路径 //using (MemoryStream ms = new MemoryStream()) //{ // xls.Save(ms); // ms.Flush(); // ms.Position = 0; // xls = null; // HttpResponse response = System.Web.HttpContext.Current.Response; // response.Clear(); // response.Charset = "UTF-8"; // response.ContentType = "application/vnd-excel";//"application/vnd.ms-excel"; // System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=" + xlsname)); // //System.Web.HttpContext.Current.Response.WriteFile(fi.FullName); // byte[] data = ms.ToArray(); // System.Web.HttpContext.Current.Response.BinaryWrite(data); //} #endregion } catch { xls = null; GC.Collect(); return "出现异常"; } finally { xls = null; GC.Collect(); } return msg; }
转载地址:http://www.cnblogs.com/yxhblog/archive/2012/06/07/2539894.html