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代码: ...
随机推荐
- poj3468 线段树+lazy标记
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 92921 ...
- Spring4分别整合mongo2.X和3.0
1.pom文件添加: <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-jav ...
- jq:get获取json数据并以表格形式生成到页面
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- jQuery源码分析1
写在开头: 昨天开始,我决定要认真的看看jQuery的源码,选择1.7.2,源于公司用的这个版本.由于源码比较长,这将会是一个比较持久的过程,我将要利用业余时间,和偶尔上班不算忙的时间来进行.其实原本 ...
- 关于a标签下的img元素在IE7下不能点击的问题
转载自http://segmentfault.com/q/1010000000712673<!DOCTYPE HTML> <html> <head> <met ...
- C++异常处理小例
学习程序的好方法是阅读代码和改进代码.下面的程例来自<An Overview of the C++ Programming Language>(5.1 异常和错误处理)程序用途:使用C ...
- coredump查原因
1. dmesg |tail -n 1 2. objdump -DCI ./a.out 示例: $ cat a.cpp #include <stdio.h> int main(){ int ...
- Powershell创建对象
.Net类型中的方法功能很强大.可以通过类型的构造函数创建新的对象,也可以将已存在的对象转换成指定的类型. 通过New-Object创建新对象 如果使用构造函数创建一个指定类型的实例对象,该类型必须至 ...
- T-SQL函数类别统计
- Html5/Css3 向下兼容placeholder
Css3下input标签的placeholder属性在IE10以下是不兼容的,页面加入这段JS脚本后,能够兼容IE6+ //@charset "utf-8"; /** * jque ...