一、使用Microsoft.Office.Interop.Excel.DLL

  需要安装Office

  代码如下:


 2         public static bool ExportExcel(System.Data.DataTable dt, string path)
 3         {
 4             bool succeed = false;
 5             if (dt != null)
 6             {
 7                 Microsoft.Office.Interop.Excel.Application xlApp = null;
 8                 try
 9                 {
10                     xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
11                 }
12                 catch (Exception ex)
13                 {
14                     throw ex;
15                 }
16 
17                 if (xlApp != null)
18                 {
19                     try
20                     {
21                         Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
22                         object oMissing = System.Reflection.Missing.Value;
23                         Microsoft.Office.Interop.Excel.Worksheet xlSheet = null;
24 
25                         xlSheet = (Worksheet)xlBook.Worksheets[1];
26                         xlSheet.Name = dt.TableName;
27 
28                         int rowIndex = 1;
29                         int colIndex = 1;
30                         int colCount = dt.Columns.Count;
31                         int rowCount = dt.Rows.Count;
32 
33                         //列名的处理
34                         for (int i = 0; i < colCount; i++)
35                         {
36                             xlSheet.Cells[rowIndex, colIndex] = dt.Columns[i].ColumnName;
37                             colIndex++;
38                         }
39                         //列名加粗显示
40                         xlSheet.get_Range(xlSheet.Cells[rowIndex, 1], xlSheet.Cells[rowIndex, colCount]).Font.Bold = true;
41                         xlSheet.get_Range(xlSheet.Cells[rowIndex, 1], xlSheet.Cells[rowCount + 1, colCount]).Font.Name = "Arial";
42                         xlSheet.get_Range(xlSheet.Cells[rowIndex, 1], xlSheet.Cells[rowCount + 1, colCount]).Font.Size = "10";
43                         rowIndex++;
44 
45                         for (int i = 0; i < rowCount; i++)
46                         {
47                             colIndex = 1;
48                             for (int j = 0; j < colCount; j++)
49                             {
50                                 xlSheet.Cells[rowIndex, colIndex] = dt.Rows[i][j].ToString();
51                                 colIndex++;
52                             }
53                             rowIndex++;
54                         }
55                         xlSheet.Cells.EntireColumn.AutoFit();
56 
57                         xlApp.DisplayAlerts = false;
58                         path = Path.GetFullPath(path);
59                         xlBook.SaveCopyAs(path);
60                         xlBook.Close(false, null, null);
61                         xlApp.Workbooks.Close();
62                         Marshal.ReleaseComObject(xlSheet);
63                         Marshal.ReleaseComObject(xlBook);
64                         xlBook = null;
65                         succeed = true;
66                     }
67                     catch (Exception ex)
68                     {
69                         succeed = false;
70                     }
71                     finally
72                     {
73                         xlApp.Quit();
74                         Marshal.ReleaseComObject(xlApp);
75                         int generation = System.GC.GetGeneration(xlApp);
76                         xlApp = null;
77                         System.GC.Collect(generation);
78                     }
79                 }
80             }
81             return succeed;
82         }

二、使用Aspose.Cells.dll

Aspose.Cells 是 Aspose公司推出的导出Excel的控件,不依赖Office,商业软件,网上有破解 (下载见附件)。

代码如下:


 1         public static bool ExportExcelWithAspose(System.Data.DataTable dt, string path)
 2         {
 3             bool succeed = false;
 4             if (dt != null)
 5             {
 6                 try
 7                 {
 8                     Aspose.Cells.License li = new Aspose.Cells.License();
 9                     string lic = Resources.License;
10                     Stream s = new MemoryStream(ASCIIEncoding.Default.GetBytes(lic));
11                     li.SetLicense(s);
12 
13                     Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook();
14                     Aspose.Cells.Worksheet cellSheet = workbook.Worksheets[0];
15 
16                     cellSheet.Name = dt.TableName;
17 
18                     int rowIndex = 0;
19                     int colIndex = 0;
20                     int colCount = dt.Columns.Count;
21                     int rowCount = dt.Rows.Count;
22 
23                     //列名的处理
24                     for (int i = 0; i < colCount; i++)
25                     {
26                         cellSheet.Cells[rowIndex, colIndex].PutValue(dt.Columns[i].ColumnName);
27                         cellSheet.Cells[rowIndex, colIndex].Style.Font.IsBold = true;
28                         cellSheet.Cells[rowIndex, colIndex].Style.Font.Name = "宋体";
29                         colIndex++;
30                     }
31 
32                     Aspose.Cells.Style style = workbook.Styles[workbook.Styles.Add()];
33                     style.Font.Name = "Arial";
34                     style.Font.Size = 10;
35                     Aspose.Cells.StyleFlag styleFlag = new Aspose.Cells.StyleFlag();
36                     cellSheet.Cells.ApplyStyle(style, styleFlag);
37 
38                     rowIndex++;
39 
40                     for (int i = 0; i < rowCount; i++)
41                     {
42                         colIndex = 0;
43                         for (int j = 0; j < colCount; j++)
44                         {
45                             cellSheet.Cells[rowIndex, colIndex].PutValue(dt.Rows[i][j].ToString());
46                             colIndex++;
47                         }
48                         rowIndex++;
49                     }
50                     cellSheet.AutoFitColumns();
51 
52                     path = Path.GetFullPath(path);
53                     workbook.Save(path);
54                     succeed = true;
55                 }
56                 catch (Exception ex)
57                 {
58                     succeed = false;
59                 }
60             }
61 
62             return succeed;
63         }

三、 使用XML导出Excel

不依赖Office和其他第三方控件,需要事先准备一个模版。新建一个Excel文档,另存为XML 表格格式,将另存为的文件的扩展名改为xls,作为导出的模版。导出Excel时,用XMLDocment先打开模版,然后对模版进行增加修改操作,操作方法就是一般的XML操作方法。因为导出的文件扩展名是xls,与XML的文件格式不符,所以用Excel打开时会弹出提示。

代码如下:


  1         public static bool ExportExcelWithXML(System.Data.DataTable dt, string path)
  2         {
  3             bool succeed = false;
  4             if (dt == null)
  5             {
  6                 // 导出为XML格式的Excel文件,需要事先准备好XML格式的Excel文件作为模版
  7                 try
  8                 {
  9                     XmlDocument doc = new XmlDocument();
 10                     doc.Load(System.Windows.Forms.Application.StartupPath + @"\XLS\ExportXML.xls");
 11                     XmlNode root = doc.DocumentElement;
 12                     XmlNodeList xnlist = root.ChildNodes;
 13                     XmlElement sheet = null;
 14                     XmlElement documentPro = null;
 15                     XmlElement styles = null;
 16                     foreach (XmlNode xn in xnlist)
 17                     {
 18                         XmlElement xe = (XmlElement)xn;
 19                         if (xe.Name == "DocumentProperties")
 20                         {
 21                             documentPro = xe;
 22                         }
 23                         else if (xe.Name == "Worksheet")
 24                         {
 25                             sheet = xe;
 26                         }
 27                         else if (xe.Name == "Styles")
 28                         {
 29                             styles = xe;
 30                         }
 31                     }
 32 
 33                     if (documentPro == null || sheet == null || styles == null)
 34                     {
 35                         return false;
 36                     }
 37 
 38                     // 写入Sheet名
 39                     sheet.SetAttribute("Name", ssNameSpace, dt.TableName);
 40 
 41                     // 添加Style
 42                     XmlElement styleColumnName = doc.CreateElement("Style", ssNameSpace);
 43                     styleColumnName.SetAttribute("ID", ssNameSpace, "s16");
 44                     XmlElement fontColumnName = doc.CreateElement("Font", ssNameSpace);
 45                     fontColumnName.SetAttribute("FontName", ssNameSpace, "Arial");
 46                     fontColumnName.SetAttribute("Family", xNameSpace, "Swiss");
 47                     fontColumnName.SetAttribute("Color", ssNameSpace, "#000000");
 48                     fontColumnName.SetAttribute("Bold", ssNameSpace, "1");
 49                     styleColumnName.AppendChild(fontColumnName);
 50                     styles.AppendChild(styleColumnName);
 51 
 52                     XmlElement styleRow = doc.CreateElement("Style", ssNameSpace);
 53                     styleRow.SetAttribute("ID", ssNameSpace, "s17");
 54                     XmlElement fontRow = doc.CreateElement("Font", ssNameSpace);
 55                     fontRow.SetAttribute("FontName", ssNameSpace, "Arial");
 56                     fontRow.SetAttribute("Family", xNameSpace, "Swiss");
 57                     fontRow.SetAttribute("Color", ssNameSpace, "#000000");
 58                     styleRow.AppendChild(fontRow);
 59                     styles.AppendChild(styleRow);
 60 
 61                     // 写入表格内容
 62                     XmlNode table = sheet.FirstChild;
 63 
 64                     // 写入行列个数
 65                     ((XmlElement)table).SetAttribute("ExpandedColumnCount", ssNameSpace, dt.Columns.Count.ToString());
 66                     ((XmlElement)table).SetAttribute("ExpandedRowCount", ssNameSpace, (dt.Rows.Count + 2).ToString());
 67 
 68                     // 添加列宽
 69                     for (int i = 0; i < dt.Columns.Count; i++)
 70                     {
 71                         XmlElement column = doc.CreateElement("Column", ssNameSpace);
 72                         column.SetAttribute("Width", ssNameSpace, "100");
 73                         column.SetAttribute("AutoFitWidth", ssNameSpace, "1");
 74                         table.AppendChild(column);
 75                     }
 76 
 77                     // 添加列名
 78                     XmlElement columnName = doc.CreateElement("Row", ssNameSpace);
 79                     for (int i = 0; i < dt.Columns.Count; i++)
 80                     {
 81                         XmlElement columnCell = doc.CreateElement("Cell", ssNameSpace);
 82                         columnCell.SetAttribute("StyleID", ssNameSpace, "s16");
 83 
 84                         XmlElement data = doc.CreateElement("ss:Data", ssNameSpace);
 85                         data.SetAttribute("Type", ssNameSpace, "String");
 86                         data.InnerText = dt.Columns[i].ToString();
 87 
 88                         columnCell.AppendChild(data);
 89                         columnName.AppendChild(columnCell);
 90                     }
 91                     table.AppendChild(columnName);
 92 
 93                     // 添加行
 94                     for (int i = 0; i < dt.Rows.Count; i++)
 95                     {
 96                         XmlElement row = doc.CreateElement("Row", ssNameSpace);
 97                         for (int j = 0; j < dt.Columns.Count; j++)
 98                         {
 99                             XmlElement cell = doc.CreateElement("Cell", ssNameSpace);
100                             cell.SetAttribute("StyleID", ssNameSpace, "s17");
101 
102                             XmlElement data = doc.CreateElement("Data", ssNameSpace);
103                             data.SetAttribute("Type", ssNameSpace, "String");
104                             data.InnerText = dt.Rows[i][j].ToString();
105 
106                             cell.AppendChild(data);
107                             row.AppendChild(cell);
108                         }
109                         table.AppendChild(row);
110                     }
111 
112                     DateTime now = DateTime.Now;
113                     string timeString = string.Format("{0}T{1}Z", now.ToShortDateString(), now.ToLongTimeString());
114                     XmlNodeList docProNodeList = documentPro.ChildNodes;
115                     foreach (XmlNode xn in docProNodeList)
116                     {
117                         if (xn.Name == "Author" || xn.Name == "LastAuthor")
118                         {
119                             // 写入作者和修改者
120                             xn.InnerText = Environment.UserName;
121                         }
122                         else if (xn.Name == "Created" || xn.Name == "LastSaved")
123                         {
124                             // 写入创建时间和修改时间
125                             xn.InnerText = timeString;
126                         }
127                         else if (xn.Name == "Company")
128                         {
129                             // 写入公司名
130                             xn.InnerText = System.Windows.Forms.Application.CompanyName;
131                         }
132                     }
133 
134                     doc.Save(path);
135                     succeed = true;
136                 }
137                 catch (Exception e)
138                 {
139                     succeed = false;
140                 }
141             }
142 
143             return succeed;
144         }

将datatable导出为excel的三种方式(转)的更多相关文章

  1. c# 导出excel的三种方式

    第一种:流导出 SaveFileDialog exe = new SaveFileDialog(); exe.Filter = "Execl files (*.xls)|*.xls" ...

  2. POI导出excel的三种方式

    原文链接:https://www.cnblogs.com/zhaoblog/p/7661245.html poi导出excel最常用的是第一种方式HSSFWorkbook,不过这种方式数据量大的话会产 ...

  3. 导出excel的三种方式

    第一种是Response输出,这种方式输出的文件不符合标准的excel格式,在打开的时候会有提示,而且不好控制内容.第一种是Response输出,这种方式输出的文件不符合标准的excel格式,在打开的 ...

  4. C# - VS2019 DataGridView导出到Excel的三种方法

    //原文出处:http://www.yongfa365.com/Item/DataGridViewToExcel.html 1 #region DataGridView数据显示到Excel /// & ...

  5. C#读取Excel的三种方式以及比较

    (1)OleDB方式 优点:将Excel直接当做数据源处理,通过SQL直接读取内容,读取速度较快. 缺点:读取数据方式不够灵活,无法直接读取某一个单元格,只有将整个Sheet页读取出来后(结果为Dat ...

  6. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  7. C#将DataTable数据导出到EXCEL的两种方法

    1.在非服务器控件的页面导出数据,需要借助一张temp空页面post回后台的数据. 前台:window.location.href = "../Temp.aspx"; 后台: tr ...

  8. [转].net 使用NPOI或MyXls把DataTable导出到Excel

    本文转自:http://www.cnblogs.com/yongfa365/archive/2010/05/10/NPOI-MyXls-DataTable-To-Excel-From-Excel.ht ...

  9. delphi 导出到excel的7种方法

    本文来自 爱好者8888 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/kpc2000/article/details/17066823?utm_source=cop ...

随机推荐

  1. 写一篇Hook Driver.

    关于Hook,有一本书讲的比较清楚,最近刚刚看完,<Rootkits: Subverting the Windows Kernel> http://www.amazon.com/Rootk ...

  2. BZOJ4105 THUSC2015平方运算(线段树)

    注意到模数被给出且非常小,做法肯定要依赖于一些与此相关的性质.找题解打表可以发现循环节长度的lcm不超过60. 考虑怎么用线段树维护循环.对线段树上每个点维护这段区间的循环节.在循环中的位置,如果未进 ...

  3. P2161 [SHOI2009]会场预约

    题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...

  4. 如何实现加载DOM时执行js代码

    有一些功能需求,需要在DOM载入时马上执行一些函数,但又不愿意仅为了这一个需求而引入整个JQuery库,于是就把jQuery的方法提取出来,单独使用了. 大家可以使用windows.onload事件, ...

  5. fresco的使用教程

    1.加载依赖 api 'org.xutils:xutils:3.5.0' 2.创建一个myapplication public class MyApplication extends Applicat ...

  6. inflate

    LayoutInflater是用 来找res/layout/下的xml布局文件,并且实例化 https://www.cnblogs.com/savagemorgan/p/3865831.html

  7. socket编程 ------ BSD socket API

    伯克利套接字(Berkeley sockets),也称为BSD Socket.伯克利套接字的应用编程接口(API)是采用C语言的进程间通信的库,经常用在计算机网络间的通信. BSD Socket的应用 ...

  8. 关于JAVA正则匹配空白字符的问题(全角空格与半角空格)

    今天遇到一个字符串,怎么匹配空格都不成功!!! 我把空格复制到test.properties文件 显示“\u3000” ,这是什么? 这是全角空格!!! 查了一下    \s    不支持全角 1.& ...

  9. es6+最佳入门实践(7)

    7.set和map数据结构 7.1.什么是set? Set就是集合,集合是由一组无序且唯一的项组成,在es6中新增了set这种数据结构,有点类似于数组,但是它的元素是唯一的,没有重复 let st = ...

  10. (转)C/S 与 B/S 区别

    感谢:http://www.cnblogs.com/xiaoshuai/archive/2010/05/25/1743741.html C/S结构,即Client/Server(客户机/服务器)结构, ...