c# 导出数据到Excel模板-阿里云开发者社区

开发者社区> annehan> 正文

c# 导出数据到Excel模板

简介: 最近在做一个发邮件的功能,客户要求需要导出一个Excel附件,并给了附件的格式, eg: Last Name 姓 First Name 名 Chinese Characters汉字书写(仅大陆人填写)               实现方式有两种: 一、使用Microsoft.
+关注继续查看

最近在做一个发邮件的功能,客户要求需要导出一个Excel附件,并给了附件的格式,

eg:

Last Name 姓 First Name 名

Chinese Characters
汉字书写(仅大陆人填写)

     

 

 

 

 

实现方式有两种:

一、使用Microsoft.Office.Interop.Excel组件的方式

二、使用NPOI的方式

 

下面讲一下这两种方式的具体实现:

一、使用Microsoft.Office.Interop.Excel组件的方式

该方式需要引入Microsoft.Office.Interop.Excel;System.Reflection

实现代码:

 1 /// <summary>
 2 /// 生成附件(使用Microsoft.Office.Interop.Excel组件的方式)
 3 /// </summary>
 4 /// <param name="DT"></param>
 5 /// <returns></returns>
 6 public static void GenerateAttachment(DataTable DT)
 7 {
 8     try
 9     {
10         //需要添加 Microsoft.Office.Interop.Excel引用 
11         Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
12         if (app == null)//服务器上缺少Excel组件,需要安装Office软件
13         {
14             return;
15         }
16         app.Visible = false;
17         app.UserControl = true;
18         string strTempPath = Application.StartupPath + "\\EmailTemplate\\TE Enrollment Form.xls";
19         Microsoft.Office.Interop.Excel.Workbooks workbooks = app.Workbooks;
20         Microsoft.Office.Interop.Excel._Workbook workbook = workbooks.Add(strTempPath); //加载模板
21         Microsoft.Office.Interop.Excel.Sheets sheets = workbook.Sheets;
22         Microsoft.Office.Interop.Excel._Worksheet worksheet = (Microsoft.Office.Interop.Excel._Worksheet)sheets.get_Item(1); //第一个工作薄。
23         if (worksheet == null)//工作薄中没有工作表
24         {
25             return;
26         }
27 
28         //1、获取数据
29         int rowCount = DT.Rows.Count;
30         if (rowCount < 1)//没有取到数据
31         {
32             return;
33         }
34 
35         //2、写入数据,Excel索引从1开始
36         for (int i = 1; i <= rowCount; i++)
37         {
38             int row_ = 2 + i;  //Excel模板上表头占了1行
39             int dt_row = i - 1; //dataTable的行是从0开始的 
40             worksheet.Cells[row_, 1] = DT.Rows[dt_row]["Lastname_EN"].ToString();
41             worksheet.Cells[row_, 2] = DT.Rows[dt_row]["Firstname_EN"].ToString();
42             worksheet.Cells[row_, 3] = DT.Rows[dt_row]["namechinese"].ToString();
43         }
44         //调整Excel的样式。
45         Microsoft.Office.Interop.Excel.Range rg = worksheet.Cells.get_Range("A3", worksheet.Cells[rowCount + 2, 32]);
46         rg.Borders.LineStyle = 1; //单元格加边框
47         worksheet.Columns.AutoFit(); //自动调整列宽
48 
49         //隐藏某一行
50         //选中部分单元格,把选中的单元格所在的行的Hidden属性设为true
51         //worksheet.get_Range(app.Cells[2, 1], app.Cells[2, 32]).EntireRow.Hidden = true;
52 
53         //删除某一行
54         worksheet.get_Range(app.Cells[2, 1], app.Cells[2, 32]).EntireRow.Delete(Microsoft.Office.Interop.Excel.XlDirection.xlUp);
55         
56 
57         //3、保存生成的Excel文件
58         //Missing在System.Reflection命名空间下
59         string savePath = Application.StartupPath + "\\Temp\\TEEnrollmentForm\\TE Enrollment Form.xls";
60         workbook.SaveAs(savePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
61 
62         //4、按顺序释放资源
63         NAR(worksheet);
64         NAR(sheets);
65         NAR(workbook);
66         NAR(workbooks);
67         app.Quit();
68         NAR(app);
69     }
70     catch (Exception ex)
71     {
72         WriteLog(ex.ToString());
73     }
74 }
75 /// <summary>
76 /// 释放资源
77 /// </summary>
78 /// <param name="o"></param>
79 public static void NAR(object o)
80 {
81     try
82     {
83         System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
84     }
85     catch (Exception ex)
86     {
87         WriteLog(ex.ToString());
88     }
89     finally
90     {
91         o = null;
92     }
93 }
View Code

二、使用NPOI的方式

该方式需要引用NPOI.dll

实现代码:

 1 /// <summary>
 2 /// ExportExcel(使用NPOI的方式)
 3 /// </summary>
 4 /// <param name="DT"></param>
 5 public static void ExportExcel(DataTable DT)
 6 {
 7     try
 8     {
 9         HSSFWorkbook hssfworkbookDown;
10         string modelExlPath = Application.StartupPath + "\\EmailTemplate\\TE Enrollment Form.xls";
11         if (File.Exists(modelExlPath) == false)//模板不存在
12         {
13             return;
14         }
15         using (FileStream file = new FileStream(modelExlPath, FileMode.Open, FileAccess.Read))
16         {
17             hssfworkbookDown = new HSSFWorkbook(file);
18             file.Close();
19         }
20         if (DT.Rows.Count > 0)
21         {
22             WriterExcel(hssfworkbookDown, 0, DT);
23 
24             string filename = "TE Enrollment Form.xls";
25             string strFilePath = Application.StartupPath + "\\Temp\\TEEnrollmentForm";
26             if (Directory.Exists(strFilePath) == false)
27             {
28                 Directory.CreateDirectory(strFilePath);
29             }
30             strFilePath = strFilePath + "\\" + filename;
31             FileStream files = new FileStream(strFilePath, FileMode.Create);
32             hssfworkbookDown.Write(files);
33             files.Close();
34             if (File.Exists(strFilePath) == false)//附件生成失败
35             {
36                 return;
37             }
38         }
39     }
40     catch (Exception ex)
41     {
42         WriteLog(ex.ToString());
43     }
44 }
45 /// <summary>
46 /// WriterExcel
47 /// </summary>
48 /// <param name="hssfworkbookDown"></param>
49 /// <param name="sheetIndex"></param>
50 /// <param name="DT"></param>
51 public static void WriterExcel(HSSFWorkbook hssfworkbookDown, int sheetIndex, DataTable DT)
52 {
53     try
54     {
55         #region 设置单元格样式
56         //字体
57         HSSFFont fontS9 = (HSSFFont)hssfworkbookDown.CreateFont();
58         fontS9.FontName = "Arial";
59         fontS9.FontHeightInPoints = 10;
60         fontS9.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.NORMAL;
61         //表格
62         ICellStyle TableS9 = (ICellStyle)hssfworkbookDown.CreateCellStyle();
63         TableS9.BorderLeft = NPOI.SS.UserModel.BorderStyle.THIN;
64         TableS9.BorderTop = NPOI.SS.UserModel.BorderStyle.THIN;
65         TableS9.BorderBottom = NPOI.SS.UserModel.BorderStyle.THIN;
66         TableS9.BorderRight = NPOI.SS.UserModel.BorderStyle.THIN;
67         TableS9.WrapText = true;
68         TableS9.SetFont(fontS9);
69         #endregion
70 
71         HSSFSheet sheet = (HSSFSheet)hssfworkbookDown.GetSheetAt(sheetIndex);
72         hssfworkbookDown.SetSheetHidden(sheetIndex, false);
73         hssfworkbookDown.SetActiveSheet(sheetIndex);
74 
75         int n = 1;//因为模板有表头,所以从第2行开始写
76         for (int j = 0; j < DT.Rows.Count; j++)
77         {
78             HSSFRow dataRow = (HSSFRow)sheet.CreateRow(j + n);
79             string strDepID = DT.Rows[j]["relationship"].ToString().Trim();
80             dataRow.CreateCell(0);
81             dataRow.Cells[0].SetCellValue(strDepID == "" ? DT.Rows[j]["Lastname_EN"].ToString() : "");
82             dataRow.CreateCell(1);
83             dataRow.Cells[1].SetCellValue(strDepID == "" ? DT.Rows[j]["Firstname_EN"].ToString() : "");
84             dataRow.CreateCell(2);
85             dataRow.Cells[2].SetCellValue(strDepID == "" ? DT.Rows[j]["namechinese"].ToString() : "");
86 
87             for (int i = 0; i <= 2; i++)//循环列,添加样式
88             {
89                 dataRow.Cells[i].CellStyle = TableS9;
90             }
91         }
92         //设定第一行,第一列的单元格选中
93         sheet.SetActiveCell(0, 0);
94     }
95     catch (Exception ex)
96     {
97         WriteLog(ex.ToString());
98     }
99 }
View Code

 

最终效果展示:

 

如果您看了本篇博客,觉得对您有所收获,请点击右下角的 [推荐]

如果您想转载本博客,请注明出处

如果您对本文有意见或者建议,欢迎留言

感谢您的阅读,请关注我的后续博客

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
将数据从服务器端同步到手机上, 并且需要离线工作,Couchebase Mobile 也许是目前最好的解决方案:
将数据从服务器端同步到手机上, 并且需要离线工作,Couchebase Mobile 也许是目前最好的解决方案: 原文地址: https://www.infinum.co/the-capsized-eight/articles/server-client-syncing-for-mobile-a...
1369 0
ajax请求后台,返回json格式数据,模板!
添加一个用户的时候,需要找出公司下所有的部门,和相应部门下的角色,利用ajax请求,实现联动技术。将返回的json格式数据,添加到select标签下。           //加载出部门的信息            function loadGroup(){                            $.
929 0
OAF_文件系列10_实现OAF将数据资料导出Excel到本地JXL(案例)
20150729 Created By BaoXinjian 一、摘要 将页面上的信息通过调用JXL脚本,将资料导出为Excel 引用的一些包方法 1. 获取输出文件流 1.1. HttpServletResponse: 将文件写到客户端所引用的包 1.
1028 0
Java数据导出(写)Excel文件 解析
  在编程中经常需要使用到表格(报表)的处理主要以Excel表格为主。下面给出用java写入数据到excel表格方法:   1.添加jar文件     java导入导出Excel文件要引入jxl.jar包,最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。
876 0
WPF控件模板和数据模板
来自:http://www.th7.cn/Program/WPF/2011/12/21/51676.shtml ControlTemplate用于描述控件本身. 使用TemplateBinding来绑定控件自身的属性, 比如{TemplateBinding Background}   DataTemplate用于描述控件的Content.
423 0
poi读取excel模板,填充内容并导出,支持导出2007支持公式自动计算
/** * 版权所有(C) 2016 * @author www.xiongge.club * @date 2016-12-7 上午10:03:29 */ package xlsx; /** * @ClassName: CreateExcel * @Description: TODO() * @author www.xiongge.club *
2020 0
mysql导入导出数据
从文档中导入到数据库 load data local infile '/tmp/test.txt'  into table db.new  fields terminated by ':'                         //列的分割符  lines terminated by '\n';                      //行的分割符 load d
1089 0
在VBA中将不规则数据导出到Excel
在Access中将数据导出到Excel非常简单,我们只要将查询出的RecordSet用循环或者固定格子的方式写到Excel中即可。下面是一个小例子: Private Function F_Export() As Boolean Dim cnCurrent1 As ADODB.
641 0
+关注
annehan
一个95后 一个程序媛
48
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载
《2021云上架构与运维峰会演讲合集》
立即下载