DataTable 导出到 Excel 类
底层类:
#region DataTable 导出到 Excel
/// <summary>
/// DataTable 导出到 Excel
/// </summary>
/// <param name="dt">数据表</param>
/// <param name="captions">要导出的列标题</param>
/// <param name="fieldNames">要导出的列名</param>
/// <param name="sheetName">工作簿名称</param>
/// <param name="isOpen">导出完成是否打开Excel,如果=false会杀死当前Excel进程</param>
/// <returns>错误信息,如果为空,说明用户取消导入</returns>
public static string DtToExcel(DataTable dt, string[] captions, string[] fieldNames, string sheetName, bool isOpen)
{
//返回的信息
string str = "";
//保存对话框
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "(*.xls,*.xlsx)|*.xls;*.xlsx";
//保存的文件名称
string fileName = "";
if (sfd.ShowDialog() != DialogResult.OK)
{
return "";
}
if (dt == null)
{
str = "表不能为空";
return str;
}
if (captions.Length != fieldNames.Length)
{
str = "列名数目和列标题数目不匹配";
return str;
}
foreach (string aa in fieldNames)
{
if (!dt.Columns.Contains(aa))
{
str = "表中不存在列名为 " + aa + " 的列";
return str;
}
}
//如果不是全部列都要导出,改变一下样式
DataView dv = new DataView(dt);
dt = dv.ToTable(false, fieldNames); //导出路径
fileName = sfd.FileName;
//定义Excel程序
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
//判断是否安装Excel
if (excel == null)
{
str = "无法创建Excel对象,可能您的计算机未安装Excel!";
return str;
}
//是否显示导出过程 ,建议关闭,否则在导出过程中鼠标点击Excel文件时会出错
excel.Visible = false;
//定义一个Excel文件
Microsoft.Office.Interop.Excel.Workbook wBook = excel.Workbooks.Add(System.Reflection.Missing.Value);
//定义工作表
Microsoft.Office.Interop.Excel.Worksheet wSheet = (Microsoft.Office.Interop.Excel.Worksheet)wBook.Worksheets[1];
Microsoft.Office.Interop.Excel.Range range;
//获取行数、列数
int rowCount = dt.Rows.Count;
int colCount = captions.Length; //设置表格名称
if (sheetName != null && sheetName.Length > 0)
{
wSheet.Name = sheetName;
}
else
{
wSheet.Name = dt.TableName;
} if (rowCount < 1)
{
str = "没有记录可以导出";
return str;
}
try
{
//写标题,标题居中
for (int j = 1; j < captions.Length + 1; j++)
{
excel.Cells[1, j] = captions[j - 1];
} //设置对齐方式
wSheet.Cells.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
//设置第一行高度,即标题栏
((Microsoft.Office.Interop.Excel.Range)wSheet.Rows["1:1", System.Type.Missing]).RowHeight = 20;
//设置数据行行高度
((Microsoft.Office.Interop.Excel.Range)wSheet.Rows["2:" + dt.Rows.Count + 1, System.Type.Missing]).RowHeight = 16;
//设置字体大小(10号字体)
wSheet.Range[wSheet.Cells[1, 1], wSheet.Cells[dt.Rows.Count + 1, dt.Columns.Count]].Font.Size = 10;
//设置单元格边框
Microsoft.Office.Interop.Excel.Range range1 = wSheet.Range[wSheet.Cells[1, 1], wSheet.Cells[dt.Rows.Count + 1, dt.Columns.Count]]; //往Excel写数据
for (int m = 0; m < rowCount; m++)
{
for (int n = 0; n < colCount; n++)
{
excel.Cells[m + 2, n + 1] = (object)dt.Rows[m][n] is DBNull ? "" : dt.Rows[m][n].ToString();
}
}
//保存工作表
wSheet.SaveAs(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
wBook.Close(Type.Missing, Type.Missing, Type.Missing); ////设置EXLCE最大化
//excel.WindowState = XlWindowState.xlMaximized; //提示信息
str = "导出成功! 共导出 " + rowCount + " 条数据";
return str;
}
catch (Exception ex)
{
str = "导出异常,请重试";
return str;
}
finally
{
if (isOpen)
{
//前台显示给用户
excel.Visible = true;
wSheet = null;
excel = null;
}
else
{
excel.Visible = false;
excel.Quit();
// excel = null;
//杀死Excel 进程
KillProcess(excel);
} GC.Collect();
} }
#endregion
调用(举例):
string str=Functionjsj.DtToExcel(dt, new string[] { "学号", "姓名", "年龄" },
new string[] { "Stu_Number", "Stu_Name", "Stu_Age" }, "学生信息",false);
if (str.Length > 0) {
MessageBox.Show(str, System.Windows.Forms.Application.ProductName);
return;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
DataTable 导出到 Excel 类的更多相关文章
- [转].net 使用NPOI或MyXls把DataTable导出到Excel
本文转自:http://www.cnblogs.com/yongfa365/archive/2010/05/10/NPOI-MyXls-DataTable-To-Excel-From-Excel.ht ...
- DevExpress GridControl GridView 导出到 Excel 类
说明: 1>GridView 导出到 Excel (如果分页,只导出当前页数据) 2>GridView 导出到 Excel 3>方法2可以参考DataTable 导出到 Excel ...
- DataTable导出到Excel
简单的导出到Excel中: 代码如下: using System; using System.Collections.Generic; using System.Data; using System. ...
- c# DataTable导出为excel
/// <summary> /// 将DataTable导出为Excel文件(.xls) /// </summary> /// <param name="dt& ...
- C# datatable 导出到Excel
datatable导出到Excel /// <summary> /// 将DataTable导出为Excel文件(.xls) /// </summary> /// <pa ...
- DataTable导出到Excel(.NET 4.0)
最近在论坛里又看到很多关于DataTable(DataSet)导入Excel的帖子,我也温故知新一下,用VS2010重新整理了一个Sample.这个问题简化一下就是内存数据到文件,也就是遍历赋值,只不 ...
- csv/json/list/datatable导出为excel的通用模块设计
导出excel的场景我一般都是一个List直接导出成一张sheet,用Npoi.Mapper库很方便,最近我经常是需要将接口返回的jsonarray转成一张excel表,比如从elasticsearc ...
- NPOI使用Datatable导出到Excel
首先要引用dll 下载地址:http://pan.baidu.com/s/1dFr2m 引入命名空间: using NPOI.HSSF.UserModel;using NPOI.SS.UserMode ...
- C# 将datatable导出成Excel
public void Result( ){try{StringBuilder sql = new StringBuilder();List<SqlParameter> parameter ...
随机推荐
- PHP mysql_real_escape_string() 函数
定义和用法 mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符. 下列字符受影响: \x00 \n \r \ ' " \x1a 如果成功, ...
- Ubuntu下使用ap-hotspot出现“Another process is already running"问题的解决方案
参考Problem with ap-hotspot 问题描述: This is the message displayed in my terminal screen when I typed sud ...
- Spring+MyBatis实践—登录和权限控制
1.实现用户登录功能: 通过session来实现用户登录功能.在用户登录时,将用户的相关信息放在HttpSession对象用,其中HttpSession对象可以通过HttpServletRequest ...
- HDU 1176 免费馅饼(DP)
点我看题目 题意 : 中文题.在直线上接馅饼,能接的最多是多少. 思路 :这个题其实以前做过.....你将这个接馅饼看成一个矩阵,也不能说是一个矩阵,反正就是一个行列俱全的形状,然后秒当行,坐标当列, ...
- 转一贴,今天实在写累了,也看累了--【Python异步非阻塞IO多路复用Select/Poll/Epoll使用】
下面这篇,原理理解了, 再结合 这一周来的心得体会,整个框架就差不多了... http://www.haiyun.me/archives/1056.html 有许多封装好的异步非阻塞IO多路复用框架, ...
- http://www.linuxidc.com/Linux/2015-02/114265.htm
http://www.linuxidc.com/Linux/2015-02/114265.htm
- SQLite入门与分析(七)---浅谈SQLite的虚拟机
写在前面:虚拟机技术在现在是一个非常热的技术,它的历史也很悠久.最早的虚拟机可追溯到IBM的VM/370,到上个世纪90年代,在计算机程序设计语言领域又出现一件革命性的事情——Java语言的出现,它与 ...
- ANDROID_MARS学习笔记_S01原始版_019_SERVICE之Transact
一.代码1.xml(1)activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/ ...
- 调试Android USB遇到的令人费解的问题
上周参照网上代码,做了USB的初步探测程序,工作正常 .今天从硬件部拿到了一段例程,原本打算参考它来完善自己的程序.但运行之后总是报错,逐步跟进错误,进而发现了一个匪疑所思的问题.调试一天也未发现原因 ...
- Linux下搭建BT服务器
P2P(Peer to Peer 即对等网络)就是在这种背景下提出的一种网络技术,P2P可以简单地定义为通过直接交换信息,共享计算机资源和服务,对等计算机兼有客户机和服务器的功能.在这种网络中所有的节 ...