WinForm使用Aspose.cells利用模板导出Excel

君飞 2017/12/3 23:24:37 UI 次阅读
 Aspose是一个处理文件格式的组件,可对Words、Excel等工具进行操作,实现代码数据导出。在这里我介绍以及提供Aspose对Excel(Aspose.Cells)导出的工具类}

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):

[csharp] view plain copy
 print?
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Data;  
  6. using System.Windows.Forms;  
  7. using Aspose.Cells;  
  8.   
  9.   
  10. namespace TestNamespace  
  11. {  
  12.     public class TemplateExcelHelper  
  13.     {  
  14.         #region 根据Excel模板导出 string DataTable Dictionary<String,Object>  
  15.         /* 
  16.          * templatePath 模板路径(一般在bin/debug目录下) 
  17.          * dtSource 数据源(datatable数据源,表名必须与模板中的对象对应) 
  18.          * dictSource 附加信息  
  19.          */  
  20.         public static void TemplateExportExcel(string templatePath, DataTable dtSource, Dictionary<String,Object> dictSource)  
  21.         {  
  22.             SaveFileDialog sf = new SaveFileDialog();  
  23.             sf.Filter = "Excel files (*.xls)|*.xls";  
  24.             string path = System.IO.Path.Combine(Application.StartupPath, templatePath);  
  25.             WorkbookDesigner designer = new WorkbookDesigner();  
  26.             try  
  27.             {  
  28.                 designer.Open(path);  
  29.             }  
  30.             catch (Exception ex)  
  31.             {  
  32.                 if (sf.ShowDialog() == DialogResult.OK)  
  33.                 {  
  34.                     try  
  35.                     {  
  36.                         ExcelHelper.ExportExcel(dtSource, sf.FileName);//找不到制定模板时,按标准导出导出模板  
  37.                         MessageBox.Show("保存成功""提示");  
  38.                     }  
  39.                     catch (Exception ex2)  
  40.                     {  
  41.                         MessageBox.Show(ex2.Message, "异常");  
  42.                     }  
  43.                 }  
  44.                 return;  
  45.             }  
  46. //设置数据源  
  47.             designer.SetDataSource(dtSource);  
  48.             if (dictSource != null && dictSource.Count > 0) {  
  49.                 foreach (var keyValuePair in dictSource) {  
  50.                     designer.SetDataSource(keyValuePair.Key, keyValuePair.Value);  
  51.                 }  
  52.             }  
  53.             designer.Process();  
  54.             if (sf.ShowDialog() == DialogResult.OK)  
  55.             {  
  56.                 try  
  57.                 {  
  58.                     string saveFile = System.IO.Path.Combine(Application.StartupPath, sf.FileName);  
  59.                     designer.Save(saveFile);  
  60.                     MessageBox.Show("导出成功""提示");  
  61.                 }  
  62.                 catch (Exception ex)  
  63.                 {  
  64.                     MessageBox.Show(ex.Message, "异常");  
  65.                 }  
  66.             }  
  67.         }  
  68.         #endregion  
  69.  
  70.  
  71.         #region 根据Excel模板导出 string DataGridView Dictionary<String,Object>  
  72.         /* 
  73.          * templatePath 模板路径(一般在bin/debug目录下) 
  74.          * datagridView 数据源(Datatable或DatagridView数据源信息) 
  75.          * dictSource 附加信息  
  76.          */  
  77.         public static void TemplateExportExcel(string templatePath, DataGridView datagridView,string tablename, Dictionary<String, Object> dictSource)  
[csharp] view plain copy
 print?
  1. {  
  2.     TemplateExportExcel(templatePath, GetDgvToTable(datagridView,tablename), dictSource);  
  3. }  
  4. #endregion  
  5.  
  6.  
  7. #region datagridview数据源转化为datatable  
  8. public static DataTable GetDgvToTable(DataGridView dgv,string tablename)  
  9. {  
  10.     DataTable dt = new DataTable();  
  11.     for (int count = 0; count < dgv.Columns.Count; count++)  
  12.     {  
  13.         DataColumn dc = new DataColumn(dgv.Columns[count].Name.ToString());  
  14.         dt.Columns.Add(dc);  
  15.     }  
  16.     for (int count = 0; count < dgv.Rows.Count; count++)  
  17.     {  
  18.         DataRow dr = dt.NewRow();  
  19.         for (int countsub = 0; countsub < dgv.Columns.Count; countsub++)  
  20.         {  
  21.             dr[countsub] = Convert.ToString(dgv.Rows[count].Cells[countsub].Value);  
  22.         }  
  23.         dt.Rows.Add(dr);  
  24.     }  
  25.     dt.TableName = tablename;  
  26.     return dt;  
  27. }  
  28. #endregion  
  29.   
  30.   
  31. /// <summary>  
  32. /// 导出Excel,拓展  
  33. /// </summary>  
  34. /// <param name="templatePath">模板路径</param>  
  35. /// <param name="ds">数据集</param>  
  36. /// <param name="dictSource">附加信息数据源,添加fileNames导出多个文件</param>  
  37. /// <param name="isDivsion">是否将附加信息分割,true:导出多个Excel,false:只导出一个Excel</param>  
  38. #region   
  39. public static void TemplateExportExcel(string templatePath, DataSet ds,Dictionary<String, Object> dictSource,bool isDivsion,string tableName)  
[csharp] view plain copy
 print?
  1. {  
  2.     SaveFileDialog sf = new SaveFileDialog();  
  3.     sf.Filter = "Excel files (*.xls)|*.xls";  
  4.     string path = System.IO.Path.Combine(Application.StartupPath, templatePath);  
  5.     WorkbookDesigner designer = new WorkbookDesigner();  
  6.       
  7.     //获取保存多个文件时的后缀  
  8.     string[] fileNameSuffix = null;  
  9.     if (isDivsion)  
  10.     {  
  11.         if (dictSource.ContainsKey("fileNames"))//存在文件名属性集合时  
  12.         {  
  13.             fileNameSuffix = (string[])dictSource["fileNames"];  
  14.         }  
  15.         else  
  16.         { //不存在时,自定义文件名  
  17.             fileNameSuffix = new string[ds.Tables.Count];  
  18.             for (int i = 0; i < fileNameSuffix.Length; i++)  
  19.             {  
  20.                 fileNameSuffix[i] = "_" + i;  
  21.             }  
  22.         }  
  23.     }  
  24.     try  
  25.     {  
  26.         designer.Open(path);  
  27.     }  
  28.     catch (Exception ex)  
  29.     {  
  30.         if (sf.ShowDialog() == DialogResult.OK)  
  31.         {  
  32.             try  
  33.             {  
  34.                 ///导出一个Excel,默认为第一个表格  
  35.                 if (!isDivsion)  
  36.                 {  
  37.                     ExcelHelper.ExportExcel(ds.Tables[0], sf.FileName);  
  38.                     MessageBox.Show("导出成功""提示");  
  39.                 }  
  40.                 else {  
  41.                     for (int i = 0; i < ds.Tables.Count;i++ )  
  42.                     {  
  43.                         ExcelHelper.ExportExcel(ds.Tables[i], sf.FileName.Insert(sf.FileName.LastIndexOf("."), fileNameSuffix[i]));  
  44.                     }  
  45.                     MessageBox.Show("导出成功","提示");  
  46.                 }  
  47.             }  
  48.             catch (Exception ex2)  
  49.             {  
  50.                 MessageBox.Show(ex2.Message, "异常");  
  51.             }  
  52.         }  
  53.         return;  
  54.     }  
  55.     if (sf.ShowDialog() == DialogResult.OK)  
  56.     {  
  57.         try  
  58.         {  
  59.             if (!isDivsion)  
  60.             {  
  61.                 if (ds != null)  
  62.                 {  
  63.                     designer.SetDataSource(ds);  
  64.                 }  
  65.                 designer.Process();   
  66.                 string saveFile = System.IO.Path.Combine(Application.StartupPath, sf.FileName);  
  67.                 designer.Save(saveFile);  
  68.                 MessageBox.Show("导出成功""提示");  
  69.             }  
  70.             else {  
  71.                 if (ds != null)  
  72.                 {  
  73.                     for (int i = 0; i < ds.Tables.Count; i++)  
  74.                     {  
  75.                         DataTable table = ds.Tables[i].Copy();  
  76.                         table.TableName = tableName;  
  77.                         string saveFile = System.IO.Path.Combine(Application.StartupPath,sf.FileName.Insert(sf.FileName.LastIndexOf("."),fileNameSuffix[i]));  
[csharp] view plain copy
 print?
  1.                                 TempleExportExcelNormal(templatePath, table, dictSource, saveFile);  
  2.                             }  
  3.                         }  
  4.                         MessageBox.Show("导出成功""提示");  
  5.                     }  
  6.                 }  
  7.                 catch (Exception ex)  
  8.                 {  
  9.                     MessageBox.Show(ex.Message, "异常");  
  10.                 }  
  11.             }  
  12.         }  
  13.         #endregion  
  14.     }  
  15. }  

 

0
Copyright © 2007-2016 kinfar.net studio,All Rights Reserved.