一、使用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. HL7 2.6 解析(XML)

    用途:检验化验(LIS)实验室设备数据交换解析. using System; using System.Collections.Generic; using System.Text; using Sy ...

  2. javasisst & JAVA8

    今天在服务器上启动tomcat7的时候,提示如下异常: java.io.IOException: invalid constant type: 15 具体看是javasisst抛出来的. 系统运行环境 ...

  3. Impala简介PB级大数据实时查询分析引擎

    1.Impala简介 • Cloudera公司推出,提供对HDFS.Hbase数据的高性能.低延迟的交互式SQL查询功能. • 基于Hive使用内存计算,兼顾数据仓库.具有实时.批处理.多并发等优点 ...

  4. [洛谷P4568][JLOI2011]飞行路线

    题目大意:最短路,可以有$k$条边无费用 题解:分层图最短路,建成$k$层,层与层之间的边费用为$0$ 卡点:空间计算出错,建边写错 C++ Code: #include <cstdio> ...

  5. 安徽师大附中%你赛day7 T2 乘积 解题报告

    乘积 题目背景 \(\mathrm{Smart}\) 最近在潜心研究数学, 他发现了一类很有趣的数字, 叫做无平方因子数. 也就是这一类数字不能够被任意一个质数的平方整除, 比如\(6\).\(7\) ...

  6. JavaScript的lazyload延迟加载是如何实现的

    懒加载技术(简称lazyload)并不是新技术, 它是js程序员对网页性能优化的一种方案.lazyload的核心是按需加载.在大型网站中都有lazyload的身影,例如谷歌的图片搜索页,迅雷首页,淘宝 ...

  7. 洛谷P1546 最短网络 Agri-Net

    P1546 最短网络 Agri-Net 526通过 959提交 题目提供者JOHNKRAM 标签图论贪心USACO 难度普及/提高- 提交该题 讨论 题解 记录 最新讨论 50分C++代码,求解 请指 ...

  8. HDU4185:Oil Skimming(二分图最大匹配)

    Oil Skimming Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  9. Math.abs为Integer.Min_VALUE返回错误的值

      Math.abs为Integer.Min_VALUE返回错误的值 这段代码: System.out.println(Math.abs(Integer.MIN_VALUE)); 回报-2147483 ...

  10. docker compose,link,Odoo

    1.报错: /usr/bin/docker-current: Error response from daemon: driver failed programming external connec ...