WinForm使用Aspose.cells利用模板导出Excel
2016-07-21 09:46
891 查看
Aspose是一个处理文件格式的组件,可对Words、Excel等工具进行操作,实现代码数据导出。在这里我介绍以及提供Aspose对Excel(Aspose.Cells)导出的工具类。
1.首先介绍Aspose.Cells的基础知识:
A.Excel模板变量的定义(详细可在官网查看详细:http://www.aspose.com/docs/display/cellsnet/Using+Smart+Markers#UsingSmartMarkers-skip):
(1)普通变量格式:&=$name
(2)datatable导出格式(会自动添加多行):&=dtname.columnnae.(注:在column可添加别的标识,numeric:转化为数字,如果你在Excel中写好了公式计算,最好加上否则结果会计算错,noadd:导出的时候不添加新行,只是把数据放到Excel表格中,也就是说样式都是模板的样式,未添加时,样式则为Excel普通样式,skip:n 跳过n行,一般可以与分组结合起来使用,标识不同的分组,group:normal,分组,有多种样式,normal为普通样式,merge,repeat为另外两种样式,还有其他ascending,horizontal,shift ,copystyle等,由于没用到所以不是很了解,不满足你的需求,可以到官网查看)
(3)等
(4)这里是模板的例子:
B.直接上工具类代码(代码以及插件dll可在这里Aspose.Cells工具类下载,密码:zre7):
1.首先介绍Aspose.Cells的基础知识:
A.Excel模板变量的定义(详细可在官网查看详细:http://www.aspose.com/docs/display/cellsnet/Using+Smart+Markers#UsingSmartMarkers-skip):
(1)普通变量格式:&=$name
(2)datatable导出格式(会自动添加多行):&=dtname.columnnae.(注:在column可添加别的标识,numeric:转化为数字,如果你在Excel中写好了公式计算,最好加上否则结果会计算错,noadd:导出的时候不添加新行,只是把数据放到Excel表格中,也就是说样式都是模板的样式,未添加时,样式则为Excel普通样式,skip:n 跳过n行,一般可以与分组结合起来使用,标识不同的分组,group:normal,分组,有多种样式,normal为普通样式,merge,repeat为另外两种样式,还有其他ascending,horizontal,shift ,copystyle等,由于没用到所以不是很了解,不满足你的需求,可以到官网查看)
(3)等
(4)这里是模板的例子:
B.直接上工具类代码(代码以及插件dll可在这里Aspose.Cells工具类下载,密码:zre7):
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Windows.Forms; using Aspose.Cells; namespace TestNamespace { public class TemplateExcelHelper { #region 根据Excel模板导出 string DataTable Dictionary<String,Object> /* * templatePath 模板路径(一般在bin/debug目录下) * dtSource 数据源(datatable数据源,表名必须与模板中的对象对应) * dictSource 附加信息 */ public static void TemplateExportExcel(string templatePath, DataTable dtSource, Dictionary<String,Object> dictSource) { SaveFileDialog sf = new SaveFileDialog(); sf.Filter = "Excel files (*.xls)|*.xls"; string path = System.IO.Path.Combine(Application.StartupPath, templatePath); WorkbookDesigner designer = new WorkbookDesigner(); try { designer.Open(path); } catch (Exception ex) { if (sf.ShowDialog() == DialogResult.OK) { try { ExcelHelper.ExportExcel(dtSource, sf.FileName);//找不到制定模板时,按标准导出导出模板 MessageBox.Show("保存成功", "提示"); } catch (Exception ex2) { MessageBox.Show(ex2.Message, "异常"); } } return; } //设置数据源 designer.SetDataSource(dtSource); if (dictSource != null && dictSource.Count > 0) { foreach (var keyValuePair in dictSource) { designer.SetDataSource(keyValuePair.Key, keyValuePair.Value); } } designer.Process(); if (sf.ShowDialog() == DialogResult.OK) { try { string saveFile = System.IO.Path.Combine(Application.StartupPath, sf.FileName); designer.Save(saveFile); MessageBox.Show("导出成功", "提示"); } catch (Exception ex) { MessageBox.Show(ex.Message, "异常"); } } } #endregion #region 根据Excel模板 bd7f 导出 string DataGridView Dictionary<String,Object> /* * templatePath 模板路径(一般在bin/debug目录下) * datagridView 数据源(Datatable或DatagridView数据源信息) * dictSource 附加信息 */ public static void TemplateExportExcel(string templatePath, DataGridView datagridView,string tablename, Dictionary<String, Object> dictSource)
{ TemplateExportExcel(templatePath, GetDgvToTable(datagridView,tablename), dictSource); } #endregion #region datagridview数据源转化为datatable public static DataTable GetDgvToTable(DataGridView dgv,string tablename) { DataTable dt = new DataTable(); for (int count = 0; count < dgv.Columns.Count; count++) { DataColumn dc = new DataColumn(dgv.Columns[count].Name.ToString()); dt.Columns.Add(dc); } for (int count = 0; count < dgv.Rows.Count; count++) { DataRow dr = dt.NewRow(); for (int countsub = 0; countsub < dgv.Columns.Count; countsub++) { dr[countsub] = Convert.ToString(dgv.Rows[count].Cells[countsub].Value); } dt.Rows.Add(dr); } dt.TableName = tablename; return dt; } #endregion /// <summary> /// 导出Excel,拓展 /// </summary> /// <param name="templatePath">模板路径</param> /// <param name="ds">数据集</param> /// <param name="dictSource">附加信息数据源,添加fileNames导出多个文件</param> /// <param name="isDivsion">是否将附加信息分割,true:导出多个Excel,false:只导出一个Excel</param> #region public static void TemplateExportExcel(string templatePath, DataSet ds,Dictionary<String, Object> dictSource,bool isDivsion,string tableName)
{ SaveFileDialog sf = new SaveFileDialog(); sf.Filter = "Excel files (*.xls)|*.xls"; string path = System.IO.Path.Combine(Application.StartupPath, templatePath); WorkbookDesigner designer = new WorkbookDesigner(); //获取保存多个文件时的后缀 string[] fileNameSuffix = null; if (isDivsion) { if (dictSource.ContainsKey("fileNames"))//存在文件名属性集合时 { fileNameSuffix = (string[])dictSource["fileNames"]; } else { //不存在时,自定义文件名 fileNameSuffix = new string[ds.Tables.Count]; for (int i = 0; i < fileNameSuffix.Length; i++) { fileNameSuffix[i] = "_" + i; } } } try { designer.Open(path); } catch (Exception ex) { if (sf.ShowDialog() == DialogResult.OK) { try { ///导出一个Excel,默认为第一个表格 if (!isDivsion) { ExcelHelper.ExportExcel(ds.Tables[0], sf.FileName); MessageBox.Show("导出成功", "提示"); } else { for (int i = 0; i < ds.Tables.Count;i++ ) { ExcelHelper.ExportExcel(ds.Tables[i], sf.FileName.Insert(sf.FileName.LastIndexOf("."), fileNameSuffix[i])); } MessageBox.Show("导出成功","提示"); } } catch (Exception ex2) { MessageBox.Show(ex2.Message, "异常"); } } return; } if (sf.ShowDialog() == DialogResult.OK) { try { if (!isDivsion) { if (ds != null) { designer.SetDataSource(ds); } designer.Process(); string saveFile = System.IO.Path.Combine(Application.StartupPath, sf.FileName); designer.Save(saveFile); MessageBox.Show("导出成功", "提示"); } else { if (ds != null) { for (int i = 0; i < ds.Tables.Count; i++) { DataTable table = ds.Tables[i].Copy(); table.TableName = tableName; string saveFile = System.IO.Path.Combine(Application.StartupPath,sf.FileName.Insert(sf.FileName.LastIndexOf("."),fileNameSuffix[i]));
TempleExportExcelNormal(templatePath, table, dictSource, saveFile); } } MessageBox.Show("导出成功", "提示"); } } catch (Exception ex) { MessageBox.Show(ex.Message, "异常"); } } } #endregion } }
相关文章推荐
- ASP.NET MVC5验证系列之服务端验证
- ASP.NET MVC5验证系列之客户端验证
- ASP.NET MVC 在控制器中接收视图表单POST过来的数据方法
- ubuntu16.4下用jexus部署asp.net core rtm
- ASP.NET MVC5验证系列之客户端验证
- ASP.NET MVC5验证系列之服务端验证
- ASP.NET MVC分页和排序功能实现
- ASP.NET MVC下拉框联动实例解析
- ASP.NET MVC5验证系列之Fluent Validation
- 吉特仓库管理系统- 可恶行径我该怎么维权--51aspx.com 侵权,希望博客园不要删除此文章
- ASP.NET Core开发-MVC 使用dotnet 命令创建Controller和View
- asp.net FileUpload 控件上传文件 以二进制的形式存入数据库并将图片显示出来
- hjr-ASP.NET:公司WEB架设
- EF 查询数据
- ASP.NET中如何获取上传图片的宽和高
- Asp.net MVC 版本简史
- ASP.Net MVC(4) 之js css引用与压缩
- ASP.Net MVC(3) 之Razor视图引擎的基础语法
- ASP.Net MVC(2) 之目录结构
- ASP.Net MVC(1) 之走进MVC