Web C# 导出Excel 方法总结
方法1:微软推荐服务器需安装Excel型
依赖:
软件:Office Excel 2007-2013
引用:Microsoft Office 14.0 Object Library
1.1 数据准备
//Excel文件名称
string ExcelName = System.DateTime.Now.ToString("yyMMdd") + "退款结算单.xlsx"; /// <summary>
/// 批量退款
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button1_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet(); DataTable dt1 = new DataTable();
dt1.Columns.Add("批次号");
dt1.Columns.Add("总金额(元)");
dt1.Columns.Add("总笔数"); DataRow row1 = dt1.NewRow(); row1 = dt1.NewRow();
row1["批次号"] = "";
row1["总金额(元)"] = "0.03";
row1["总笔数"] = "";
dt1.Rows.Add(row1); ds.Tables.Add(dt1); DataTable dt2 = new DataTable();
dt2.Columns.Add("商户订单号");
dt2.Columns.Add("支付宝交易号");
dt2.Columns.Add("退款金额");
dt2.Columns.Add("退款备注"); DataRow row2 = dt2.NewRow(); row2 = dt2.NewRow();
row2["商户订单号"] = "D150418092109-40";
row2["支付宝交易号"] = "";
row2["退款金额"] = "0.02";
row2["退款备注"] = "导入excel测试";
dt2.Rows.Add(row2); ds.Tables.Add(dt2); doExport(ds, Server.MapPath(ExcelName));
}
1.2 数据写入
private Microsoft.Office.Interop.Excel.Application _Excel = null;
/// <summary>
/// 将 DataSet 数据写入 _Excel
/// </summary>
/// <param name="ds"></param>
/// <param name="strExcelFileName"></param>
private void doExport(DataSet ds, string strExcelFileName)
{
int rowIndex = ;//当前行数
int colIndex = ;//当前列数
_Excel = new Microsoft.Office.Interop.Excel.Application();
_Excel.Application.Workbooks.Add(true);
for (int i = ; i < ds.Tables.Count; i++)
{
DataTable table = ds.Tables[i];
colIndex = ;//列初始化
// 列标题
foreach (DataColumn col in table.Columns)
{
colIndex++;
_Excel.Cells[rowIndex, colIndex] = col.ColumnName;
}
// 内容
foreach (DataRow row in table.Rows)
{
rowIndex++;
colIndex = ;
foreach (DataColumn col in table.Columns)
{
colIndex++;
_Excel.Cells[rowIndex, colIndex] = "'" + row[col.ColumnName].ToString();
}
}
rowIndex++;//行+1 防止table又多个情况
}
_Excel.Visible = false;
// 保存文件
SaveToDisk(strExcelFileName);
_Excel.Quit();
_Excel = null;
}
1.3 数据导出
/// <summary>
/// 导出方法
/// </summary>
/// <param name="path">路径</param>
private void SaveToDisk(string path)
{
if (!string.IsNullOrEmpty(path))
{
System.IO.FileInfo info = new FileInfo(path);
if (!info.Exists)
{
_Excel.ActiveWorkbook.SaveCopyAs(path); /*
微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite
下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。
代码如下:
*/
Response.ContentType = "text/xml";
Response.AddHeader("Content-Disposition", "attachment;filename=" + ExcelName);
string filename = Server.MapPath(ExcelName);
Response.TransmitFile(filename);
}
else
{
info.Delete();
_Excel.DisplayAlerts = false;
_Excel.AlertBeforeOverwriting = false;
_Excel.ActiveWorkbook.SaveCopyAs(path);
}
}
}
方法2:第三方组件NPOI(2.0版本后受到微软支持)
依赖:
NPOI.dll
NPOI.OOXML.dll
NPOI.OpenXml4Net.dll
NPOI.OpenXmlFormats.dll
NPOI下载地址 - http://npoi.codeplex.com/releases
2.1 简单例子:
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel; //创建全新的Workbook
IWorkbook workbook = new XSSFWorkbook(); //创建Sheet
workbook.CreateSheet("Sheet1"); //写入一个简单日期 并设置格式
ISheet sheet = hssfworkbook.CreateSheet("Sheet1");
ICell cell = sheet.CreateRow().CreateCell();
cell.SetCellValue(new DateTime(,,));
//set date format
ICellStyle cellStyle = hssfworkbook.CreateCellStyle();
IDataFormat format = hssfworkbook.CreateDataFormat();
cellStyle.DataFormat = format.GetFormat("yyyy年m月d日");
cell.CellStyle=cellStyle; //保存Workbook
FileStream sw = File.Create("test.xlsx");
workbook.Write(sw);
sw.Close();
这样就好了。
2.2 复杂例子(包含下载功能)
/// <summary>
/// 导出Excel
/// </summary>
/// <param name="ExcelName">文件名称</param>
public void NPOIExcel(DataSet ds, string ExcelName)
{
int row_index = 0;
//创建全新的Workbook
IWorkbook workbook = new XSSFWorkbook(); //创建Sheet
workbook.CreateSheet("Sheet1"); //根据Sheet名字获得Sheet对象
ISheet sheet = workbook.GetSheet("Sheet1");
IRow row; row = sheet.CreateRow(row_index);
for (int i = 0; i < ds.Tables.Count; i++)
{
//写入标题
for (int j = 0; j < ds.Tables[i].Columns.Count; j++)
{
row.CreateCell(j).SetCellValue(ds.Tables[i].Columns[j].Caption.ToString()); }
row = sheet.CreateRow(++row_index); //写入数据
foreach (DataRow r in ds.Tables[i].Select())
{
for (int j = 0; j < ds.Tables[i].Columns.Count; j++)
{
row.CreateCell(j).SetCellValue(r[j].ToString());
} row = sheet.CreateRow(++row_index);
} } //保存Workbook方式一: 以文件形式保存到服务器中(每次导出都会生成一个文件,慎重使用)
FileStream sw = File.Create(Server.MapPath("file/" +ExcelName));
workbook.Write(sw);
sw.Close(); //保存Workbook方式二: 保存到内存流中
var stream = new MemoryStream();
workbook.Write(stream); //文件下载
Response.Clear();
Response.Charset = "utf-8";
Response.Buffer = true;
this.EnableViewState = false;
Response.ContentEncoding = System.Text.Encoding.UTF8; Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename="+ExcelName); string filename =Server.MapPath("file/" + ExcelName);//通过服务器文件下载
Response.WriteFile(filename);
Response.BinaryWrite(StreamToBytes(stream));//通过内存流下载,StreamToBytes为Stream转byte[] 方法 可查看我其他随笔有
Response.Flush(); Response.Close();
Response.End();
}
Web C# 导出Excel 方法总结的更多相关文章
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- C# Datatable导出Excel方法
C# 导出Excel方法 先引用下System.IO;System.data; 具体函数如下: public static bool ExportCSV(DataTable dt, string f ...
- 64位系统web项目导出excel问题分析及解决方法汇总
最近在web项目中做了一个导出Excel功能.在导出的时候报错:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败. 一 ...
- .NET导入导出Excel方法总结
最近,应项目的需求,需要实现Excel的导入导出功能,对于Web架构的Excel导入导出功能,比较传统的实现方式是: 1)导入Excel:将Excel文件上传到服务器的某一文件夹下,然后在服务端完成E ...
- c# 导入导出excel方法封装
在很多项目中,都会使用到文件的上传下载等,为了方便,封装了一个帮助类,每次直接拿过来使用就可以了,下面是封装的类和使用方法. using Common.AttributeHelper; using N ...
- asp.netDataTable导出excel方法(2)
上一篇文章提到看到同事导出excel的新方法,感觉比上一篇简单得多,所以想贴上来,与大家分享. 在后台拼数据,都是用的htmltable标签的写法: string line = "text- ...
- 公共POI导出Excel方法--java
最早开始的时候做过一些数据Excel导出的功能,但是到后期每一次导出都需要写一些差不多类似的代码,稍微研究了一下写了个公共的导出方法. 这里用的是POI,然后写成了一个公共类,传入设置好格式的数据,就 ...
- PHP导入导出Excel方法
看到这篇文章的时候,很是惊讶原作者的耐心,虽然我们在平时用的也 有一些,但没有作者列出来的全,写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xm ...
- c#基础学习(0629)之导出Excel方法
给予NPOI插件的方法,所以首先要下载NPOI插件:vs项目中点击“项目”==>“管理NoGet程序包”==>搜索“NPOI”然后下载==>using引入Controller代码: ...
随机推荐
- MongoDB在win7下安装配置
1.在MongoDB官网下载最新版本,并且安装 2.解压后在MongoDB文件目录下创建data文件夹和log文件夹,并且在log文件夹中新建mongodb.log文件 3.新建一个配置文件mongo ...
- MySQL Left Join,Right Join
魂屁,东西发这里了关于Left Join,Right Join的 在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如果内容有错误或有疑问, ...
- Activiti工作流学习-----基于5.19.0版本(1)
该版本的Activiti运行须知: 1.JDK 6+,Eclipse最好是Kepler以上版本. 2.试验功能都有EXPERIMENTAL标注,被标注的部分不应该视为稳定的. 有兴趣的同学可以去了解下 ...
- Caffe--solver.prototxt配置文件 参数设置及含义
####参数设置################### 1. ####训练样本### 总共:121368个batch_szie:256将所有样本处理完一次(称为一代,即epoch)需要:121368/ ...
- EFI主板和GPT分区表安装系统以及转换GPT分区表的方法
现在硬盘越来越大,而原来的MBR分区方式,超过2T的硬盘就会识别不全,只有使用GPT的方式才可以,但是GPT如果用原来的BIOS是无法引导装系统了,不过如果你的主板支持EFI,那么可以用GPT+EFI ...
- Qt creator 常用的快捷健
Qt creator 常用的快捷健 F1 查看帮助F2 跳转到函数定义(和Ctrl+鼠标左键一样的效果)Shift+F2 声明和定义之间切换F4 头文件 ...
- 关于Android的一些理解
Activity中写回调函数 View的回调函数-------->事件回调 Activity层--------------->生命周期回调函数.事件回调函数 Window层 Layout是 ...
- vsftpd允许root用户登录
Linux下安装vsftpd之后,默认的配置是 匿名用户可以登录,匿名帐户有两个: 用户名:anonymous 密码:空 用户名:ftp 密码:ftp 如果要用匿名进行上传删除等操作需要配置其它参数. ...
- 抗忙,,建个MAVEN的私服仓库-NEXUS
公司最近需求越来越上轨道,MAVEN的私服仓库-NEXUS构架起来哟.. 参考文档URL: http://www.linuxidc.com/Linux/2011-07/39578p3.htm http ...
- 40 个超棒的免费 Bootstrap HTML5 网站模板
Bootstrap 是快速开发Web应用程序的前端工具包.它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式,表单,buttons,表格,网格系统等等. 目前 ...