C#将DataTable数据导出到EXCEL的两种方法
1、在非服务器控件的页面导出数据,需要借助一张temp空页面post回后台的数据。
前台:window.location.href = "../Temp.aspx";
后台: try{
dtSource = Session["MyDataTable"] //假设数据在Session中
if (dtSource == null || dtSource.Rows.Count == 0)
{
return;
}
DataGrid dg = new DataGrid();
dg.DataSource = dtSource;
dg.DataBind();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Charset = "UTF-8";//GB2312
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";//text/csv
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
System.IO.StringWriter oSW = new System.IO.StringWriter();
HtmlTextWriter oHW = new HtmlTextWriter(oSW);
dg.RenderControl(oHW);
HttpContext.Current.Response.Write(oSW.ToString());
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Close();
}catch(e){
log.Error(e);
Response.Redirect("原页面.aspx");
}
2、通过引用 Microsoft.Office.Interop.Excel.dll 和 Microsoft.CSharp.dll,不推荐,服务器需要安装Office才行
/// <summary>
/// 该方法需要引用Microsoft.Office.Interop.Excel.dll 和 Microsoft.CSharp.dll
/// 将数据由DataTable导出到Excel
/// </summary>
/// <param name="dataTable"></param>
/// <param name="fileName"></param>
/// <param name="filePath"></param>
private string exportDataTableToExcel(DataTable dataTable, string fileName, string filePath)
{
Microsoft.Office.Interop.Excel.Application excel;
Microsoft.Office.Interop.Excel._Workbook workBook;
Microsoft.Office.Interop.Excel._Worksheet workSheet;
object misValue = System.Reflection.Missing.Value;
excel = new Microsoft.Office.Interop.Excel.Application();
workBook = excel.Workbooks.Add(misValue);
workSheet = (Microsoft.Office.Interop.Excel._Worksheet)workBook.ActiveSheet;
int rowIndex = 1;
int colIndex = 0;
//取得标题
foreach (DataColumn col in dataTable.Columns)
{
colIndex++;
excel.Cells[1, colIndex] = col.ColumnName;
}
//取得表格中的数据
foreach (DataRow row in dataTable.Rows)
{
rowIndex++;
colIndex = 0;
foreach (DataColumn col in dataTable.Columns)
{
colIndex++;
excel.Cells[rowIndex, colIndex] =
row[col.ColumnName].ToString().Trim();
//设置表格内容居中对齐
//workSheet.get_Range(excel.Cells[rowIndex, colIndex],
// excel.Cells[rowIndex, colIndex]).HorizontalAlignment =
// Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;
}
}
excel.Visible = true;
string saveFile = filePath + fileName + ".xls";
if (File.Exists(saveFile))
{
File.Delete(saveFile);//嘿嘿,这样不好,偷偷把原来的删掉了,暂时这样写,项目中不可以
}
workBook.SaveAs(saveFile, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue,
misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,
misValue, misValue, misValue, misValue, misValue);
dataTable = null;
workBook.Close(true, misValue, misValue);
excel.Quit();
PublicMethod.Kill(excel);//调用kill当前excel进程
releaseObject(workSheet);
releaseObject(workBook);
releaseObject(excel);
if (!File.Exists(saveFile))
{
return null;
}
return saveFile;
}
/// <summary>
/// 释放COM组件对象
/// </summary>
/// <param name="obj"></param>
private static void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch
{
obj = null;
}
finally
{
GC.Collect();
}
}
/// <summary>
/// 关闭进程的内部类
/// </summary>
public class PublicMethod
{
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
public static void Kill(Microsoft.Office.Interop.Excel.Application excel)
{
//如果外层没有try catch方法这个地方需要抛异常。
IntPtr t = new IntPtr(excel.Hwnd);
int k = 0;
GetWindowThreadProcessId(t, out k);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
p.Kill();
}
}
C#将DataTable数据导出到EXCEL的两种方法的更多相关文章
- table导出到excel的两种方法
1. 用table2excel 的js文件,这种方法没有IE兼容性 需要在文件中导入 <script type="text/javascript" src="< ...
- 用easyui从servlet传递json数据到前端页面的两种方法
用easyui从servlet传递json数据到前端页面的两种方法 两种方法获取的数据在servlet层传递的方法相同,下面为Servlet中代码,以查询表中所有信息为例. //重写doGet方法 p ...
- DataTable数据导出到Excel,并发送到客户端进行下载
本代码实现思路是:页面显示和导出分开,导出的数据和用于页面显示的是同一查询数据方式,所以也是同样的数据,只是在导出数据时从数据库重新捞了一次数据.此导出数据方式会先将数据保存到Excel中,然后将创建 ...
- delphi 导出到excel的7种方法
本文来自 爱好者8888 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/kpc2000/article/details/17066823?utm_source=cop ...
- C# - VS2019 DataGridView导出到Excel的三种方法
//原文出处:http://www.yongfa365.com/Item/DataGridViewToExcel.html 1 #region DataGridView数据显示到Excel /// & ...
- AE 将地图导出为图片的两种方法
在ArcGIS的开发中,我们经常需要将当前地图打印(或是转出)到图片文件中.将Map或Layout中的图象转出有两种方法,一种为通过IActiveView的OutPut函数,另外一种是通过IExpor ...
- C# CLosedXML四句代码搞定DataTable数据导出到Excel
最近用到DataTable导出到Excel,网上看了一下,都不怎么好使,逛了下GitHub一下完美解决了 用到的.net库CLosedXML,这个库用于读取,处理和写入Excel 2007+(.xls ...
- Mysql查询结果导出为Excel的几种方法
本文地址:http://www.cnblogs.com/qiaoyihang/p/6398673.html 具体原文找不到了,此篇是借鉴门户的一篇文章 方法一:查询语句直接输出语法格式: Exampl ...
- Oracle导出DMP文件的两种方法
本文转载自:http://www.cnblogs.com/o-andy-o/archive/2013/06/05/3118611.html 导出: 方法一:利用PL/SQL Developer工具 ...
随机推荐
- spring新心得
一直觉得spring是最厉害的框架,说说最近从依葫芦画瓢到现在慢慢摸索他的思想的过程 以前什么都不懂,在xml上抄网上的东西,到大概知道是什么运作的 三种配装方式 1,<spring实战> ...
- Linux 自定义总线类型
#include <linux/module.h> #include <linux/init.h> #include <linux/device.h> // 按照 ...
- Jmeter 录制浏览器https请求
Jmeter录制脚本时,跟http脚本录制主要区别是,https录制需要添加安全证书. 一Jmeter代理服务器及证书配置. 1.打开Jmeter,右键测试计划添加线程组,右键工作台→非测试元件→ht ...
- java数组复制的简单方法(一)
总结:主要是用a数组的长度等于b数组,然后a数组赋值给b数组,我不能想到这个办法,我还是不理解数组中length属性的含义 这里数组并没有正真复制过来,而是一个引用 package com.a; // ...
- 生成器+列表生成式,生成器可以节省内存,随时调取函数运行,以及实现多线程运行函数,__next__()和.send(参数)的区别,a,b=b,a+b其实是元祖的用法,出现异常状态用try...except StopIteration来处理
列表生成式:是代码更简洁. 也可以是函数,比如func(i) 生成器:generator 列表生成式,是中括号,改成小括号,就是生成器: 如果你用列表生成式,生成一亿个数据:这里会卡好久,会生成一亿个 ...
- 获取access_token错误 40164
没有添加IP白名单
- LT3756/LT3756-1/LT3756-2 - 100VIN、100VOUT LED 控制器
LT3756/LT3756-1/LT3756-2 - 100VIN.100VOUT LED 控制器 特点 3000:1 True Color PWMTM调光 宽输入电压范围:6V至 100V 输出电压 ...
- zabbix短信监控
[ ] zabbix-短信报警(参考http://hanyun.blog.51cto.com/1060170/1604918 ) [ ] zabbix-电话报警(参考http://dl528888.b ...
- Python Twisted系列教程11:改进诗歌下载服务器
作者:dave@http://krondo.com/your-poetry-is-served/ 译者:杨晓伟(采用意译) 你可以从这里从头阅读这个系列. 诗歌下载服务器 到目前为止,我们已经学习了大 ...
- day-7心得
面向对象高级语法部分 经典类vs新式类 把下面代码用python2 和python3都执行一下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...