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代码: ...
随机推荐
- 武汉科技大学ACM :1008: 零起点学算法58——开灯问题
Problem Description 计算中心有8个机房,每个机房有n台电脑.每台电脑都有一个编号,比如8号机房编号就为H1到Hn,我们有时又称为H1为1号机器,H2为2号机器,.... 有一天我们 ...
- PHP+MySQL Smarty简单分页显示示例
一.分页程序的原理 分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page). 有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在m ...
- 在Web开发方面Java跟PHp八大对比
在Web开发方面Java跟PHp八大对比 <本文摘自百度经验,用来简单对比一下这两种语言> 一. 语言比较 PHP是解释执行的服务器脚本语言,首先php有简单容易上手的特点.语法和c语言比 ...
- JavaScript加密解密压缩工具
<script> a=62; function encode() { var code = document.getElementById('code').value; code = co ...
- 解决IE10以下对象不支持“bind”属性或方法
IE10一下的浏览器,如果在JS代码中用了bind函数,那么就会报“SCRIPT438: 对象不支持“bind”属性或方法” 因为浏览器没有提供这个参数的方法,所以我们就自己写一个bind,来让这个参 ...
- 使用redis缓存加索引处理数据库百万级并发
使用redis缓存加索引处理数据库百万级并发 前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1 ...
- Hibernate学习笔记--核心编程
参考资料:Java Web核心框架 http://blog.csdn.net/lsh6688/article/details/7611950 补充:ThreadLocal的使用:http://www. ...
- Spring AOP 原理
AOP将应用系统分为两部分,核心业务逻辑(Core businessconcerns)及横向的通用逻辑,也就是所谓的方面Crosscutting enterprise concerns,例如,所有大中 ...
- resultMap之collection聚集
<select id="getCarsWithCollection" resultMap="superCarResult"> select c1.c ...
- 管理TEMP数据
SQL> select * from v$mystat where rownum<2; SID STATISTIC# VALUE ---------- ---------- ------- ...