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 ...
随机推荐
- js格式化数字 金额按千位逗号分隔
// 返回数字 function removeFormatMoney(s) { return parseFloat(s.replace(/[^\d\.-]/g, "")); } / ...
- 聊聊 Statsd 和 Collectd 那点事!
StatsD 是由 Etsy 开发并发布的汇总和总结应用指标的一个简单的守护进程,近些年来发展迅速,已经变成了一个用于收集应用性能指标的统一的协议. 关于 Statsd 的使用已经有很多文章介绍过,所 ...
- EasyUI 关于IE使用window组件上传文件
有时候IE会对使用window组件上传文件(第二次)不生效,解决方案是: 将该window每次打开的时候,使用: $('#adUploadWindow').window('refresh', 'pan ...
- codeforces Winner
/* * Winner.cpp * * Created on: 2013-10-13 * Author: wangzhu */ /** * 先找出所有选手的分数和中最大的分数和,之后在所有选手的分数和 ...
- spring+mybatis 框架搭建
注意<!-- 中间的字要保持与左右留出一个空格,否则会报错说出现两杠线 --> 1.导入jar包 aopalliance-1.0.jarasm-3.3.1.jarcglib-2.2.2.j ...
- ANDROID_MARS学习笔记_S01原始版_005_RadioGroup\CheckBox\Toast
一.代码 1.xml(1)radio.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa ...
- CPU Benchmarks
http://www.cpubenchmark.net/high_end_cpus.html 非常清楚~~~
- .net析构函数对垃圾回收的影响简析
这里说析构函数,其实并不准确,应该叫Finalize函数,Finalize函数形式上和c++的析构函数很像 ,都是(~ClassName)的形式,但是功能上完全不一样.析构函数编译成il语言后会变成一 ...
- poj3280Cheapest Palindrome(记忆化)
链接 真的1A了.. 一开始想复杂了 想着补全再删 没想好 后来想到递归 大的回文串是由小的推过来的 一直递归下去 对于当前的i,j可以选择保留或者删除 选个最小的 #include <iost ...
- Ubuntu Builder —— 一个制作自己的发行版的工具
Ubuntu Builder 是一个使用起来很简单的用来构建基于 Ubunut 的自己的发行版的工具. 你可以下载最新的 Ubuntu Builder 的 DEB 安装包.下载和安装请前往:http: ...