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代码: ...
随机推荐
- 《Hadoop权威》学习笔记四:Hadoop的I/O
一.数据完整性 二.压缩 三.序列化 基本概念 序列化指的是将结构化对象转化为字节流以便于通过网络进行传输或写入持久化存储的过程 反序列化指的是将字节流转为一系列结构化对象的过程. 进程间通信 ...
- Js判断来访问者的系统
var ua = navigator.userAgent; ) { alert('您使用的是win32 XP系统!'); } else { alert('您使用的是Win7系统!'); }
- 给大家推荐几款OSX上非常好工具(针对程序员)
前两天,在App Store无意中发现几款免费工具,感觉非常好用,推荐给大家,希望大家喜欢. 一个是帮助文档管理软件,Dash.以前在Windows上开发,经常要自己搜集一些手册,文档,什么html手 ...
- JavaScript 系列笔记(一)数据类型
关于JS的数据类型 简单类型有五种:Undifined, Null, Boolean, Number, String 复杂类型有一种:Object 通过typeof 操作符来获取数据类型,此操作符返回 ...
- c语言,全局变量,局部变量,外部函数,内部函数,stasic和extern的复习总结
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- Nokia N9开启开发者模式
最近淘宝买个二手Nokia N9,纯粹是好奇meego系统. 到手了开始折腾,官方源早关闭了,导致无法开启开发者模式,没有权限很不方便.翻了翻dospy论坛的帖子,发现了n9repomirror_0. ...
- rtf表格的合并
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil Calibri;}{\f1\fnil\fcharset134 \'cb\'ce\ ...
- Android Studio builde.gradle 配置说明
//声明是Android应用程序 apply plugin: 'com.android.application' android { //编译SDK版本 compileSdkVersion 21 bu ...
- controller 和 指令 通讯方法
在 angular 中我们经常会使用多个 controller 和 指令 他们拥有各自的 $scope , 这就产生了跨$scope调用的问题. 有几种常见的方法来可以使用. 方法一 : 指令 req ...
- SMTP协议--在cmd下利用命令行发送邮件
先简单介绍下smtp smtp使用命令和应答在客户与服务器之间传输报文.即客户发出一个命令,服务器返回一个应答.发送方与接收方进行一问一答的交互,由发送方控制这个对话. 在XP系统下点‘开始’-‘运行 ...