刚刚初入职场,在休闲的时间写下了项目中用到的对Excel文档操作的方法以及总结,多的不说,直接上代码

public static void CreateExcel(DataSet ds, string FileName)

{

//resp = Page.Response;

HttpContext.Current.Response.Clear();

HttpContext.Current.Response.Buffer = true;

HttpContext.Current.Response.Charset = "UTF-8";

HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;

HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls");

HttpContext.Current.Response.ContentType = "application/ms-excel";

string colHeaders = "", ls_item = "";

int i = 0;

//定¨义?表括?对?象ó与?行D对?像?,?同?时骸?用?DataSet对?其?值μ进?行D初?始?化ˉ

System.Data.DataTable dt = ds.Tables[0];

DataRow[] myRow = dt.Select("");

//取?得?数簓据Y表括?各÷列标括?题琣,?各÷标括?题琣之?间?以?\t分?割?,?最?后ó一?个?列标括?题琣后ó加ó回?车μ符?

for (i = 0; i < dt.Columns.Count - 1; i++)

colHeaders += dt.Columns[i].Caption.ToString() + "\t";

colHeaders += dt.Columns[i].Caption.ToString() + "\n";

//向òHTTP输?出?流ⅰ?中D写′入?取?得?的?数簓据Y信?息¢

HttpContext.Current.Response.Write(colHeaders);

//逐e行D处鋦理え?数簓据Y

foreach (DataRow row in myRow)

{

//在ú当獭?前°行D中D,?逐e列获?得?数簓据Y,?数簓据Y之?间?以?\t分?割?,?结á束?时骸?加ó回?车μ符?\n

for (i = 0; i < dt.Columns.Count - 1; i++)

ls_item += row[i].ToString() + "\t";

ls_item += row[i].ToString() + "\n";

//当獭?前行D数簓据Y写′入?HTTP输?出?流ⅰ?,?并¢且ò置?空?ls_item以?便?下?行D数簓据Y

HttpContext.Current.Response.Write(ls_item);

ls_item = "";

}

//写′缓o冲?区?中D的?数簓据Y到?HTTP头?文?件t中D

HttpContext.Current.Response.End();

}

方法2:NPIO导出Excel数据。这种方式方便快捷,要引入第三方的NPIO.dll的文件,下载地址http://npoi.codeplex.com/releases/view/38113

protected void getExcel(DataTable dt, string FileName)

{

NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();

NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("Sheet1");

NPOI.SS.UserModel.IRow headerrow = sheet.CreateRow(0);

for (int i = 0; i < dt.Columns.Count; i++)

{

headerrow.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);

}

for (int i = 0; i < dt.Rows.Count; i++)

{

NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(i + 1);

for (int j = 0; j < dt.Columns.Count; j++)

row2.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());

}

//写′入到客户端

System.IO.MemoryStream ms = new System.IO.MemoryStream();

book.Write(ms);

Response.AddHeader("Content-Disposition", string.Format("attachment;filename=" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls"));

Response.BinaryWrite(ms.ToArray());

book = null;

ms.Close();

ms.Dispose();

}

直接在点击事件调用即可

二,导入Excel数据

导入Excel需要引用微软官方的OleDb驱动

protected void btnUpload_Click(object sender, EventArgs e)

{

if (txtFilePath.HasFile)

{

OleDbConnection conn = new OleDbConnection();

OleDbCommand cmd = new OleDbCommand();

OleDbDataAdapter da = new OleDbDataAdapter();

DataSet ds = new DataSet();

string query = null;

string connString = "";

//string strFileName = DateTime.Now.ToString("ddMMyyyy_HHmmss");

string strFileType = System.IO.Path.GetExtension(txtFilePath.FileName).ToString().ToLower();

if (strFileType == ".xls" || strFileType == ".xlsx")

{

txtFilePath.SaveAs(Server.MapPath("~/upload/" + strFileType));

}

string strNewPath = Server.MapPath("~/upload/" + strFileType);

if (strFileType.Trim() == ".xls")

{

connString = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + strNewPath + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";

}

else if (strFileType.Trim() == ".xlsx")

{

connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strNewPath + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";

}

query = "SELECT * FROM [Sheet1$]";

conn = new OleDbConnection(connString);

if (conn.State == ConnectionState.Closed) conn.Open();

cmd = new OleDbCommand(query, conn);

da = new OleDbDataAdapter(cmd);

ds = new DataSet();

da.Fill(ds);

da.Dispose();

conn.Close();

conn.Dispose();

注意:如果使用上述的第一种方式先导出Excel,然后在导入Excel,会报错,因为第一种方式导出的不是标准的Excel,是html的方式导出的,第二种NPIO导出,这个是标准的Excel数据。

Asp.net的对Excel文档的导入导出操作的更多相关文章

  1. NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式

    下载地址 http://npoi.codeplex.com/releases 下面放一个 NPOIHelper 助手类吧,也不是我写的- NpoiExcelHelper 可以生成xlsx格式publi ...

  2. ASP.NET MVC下载excel文档

    问题来自论坛: 很早以前,学习做asp.net练习时,就是分享过<ASP.NET MVC应用程序实现下载功能>http://www.cnblogs.com/insus/p/3615714. ...

  3. NPOI 2.1.1 系列(2) 使用NPOI读取List或者datatable数据生成 Excel文档 ;Npoi生成 xlsx 2007以上文档

    结合上一篇文章  NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx ...

  4. Easypoi实现excel多sheet表导入导出功能

    Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写. 第一步引入Easypoi依赖 <!-- 导出文件工具 EasyPoi实现Excel读写管理测试 ...

  5. 转:ASP.NET MVC 将IList<T>导出Excel文档的泛型类

    /// <summary> /// 提供将泛型集合数据导出Excel文档. /// </summary> /// <typeparam name="T" ...

  6. ASP.NET 导入EXCEL文档

    鉴于教务一般都是手动输入学生信息,在未了解本校数据库的客观情况之下,我们准备设计一个导入excel文档中学生信息如数据库的功能.结合网上各类大牛的综合版本出炉.. 首先具体的实现思想如下: 1.先使用 ...

  7. 利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出

    我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的 ...

  8. 使用C#动态生成Word文档/Excel文档的程序测试通过后,部署到IIS服务器上,不能正常使用的问题解决方案

    使用C#动态生成Word文档/Excel文档的程序功能调试.测试通过后,部署到服务器上,不能正常使用的问题解决方案: 原因: 可能asp.net程序或iis访问excel组件时权限不够(Ps:Syst ...

  9. 一次Mono解析Excel文档编码出错排查记录

    最近在捯饬Asp.Net站点部署到Linux平台上面,在文档导入的操作中经过网上搜索采用了能够支持跨平台的ExcelDataReader组建.在本地windows上测试通过NuGet安装的组建,这货依 ...

随机推荐

  1. MFC CWnd仿按钮

    CBtn::CBtn() { RegisterWndClass(); } bool CBtn::RegisterWndClass(void) { WNDCLASS n; HINSTANCE hInst ...

  2. 日本語N1文法まとめ

    1.v连用形+ものの:虽然~但是(201212-32) -(の)かというと/かといえば(201412-38)a动词ます辞書形・た形/イ形+~ な形語幹/名+~a,"至于是否・・・・・・&qu ...

  3. css笔记:如何让一个div居于页面正中间

    如何让一个div居于页面中间,我今天说的是让一个div水平居中同时垂直居中,而不是简单的top:50%,left:50%.当然,我们就按一开始的思路写一下:top,left属性都设为50%,看一下效果 ...

  4. iOS常用的封装方法

    做开发也有一段时间了,看了好多大神的代码,总体感觉他们写的代码简洁,好看,然而在对比下我写的代码,混乱,无序,简直不堪入目啊! 总体来说大神们的代码封装的都比较好,对一个项目要重复用到的代码他们都会封 ...

  5. poj2891--扩展欧几里德算法

    /* 该题使用的是扩展欧几里德算法,求模线性同余方程: 分析题目:以题目输出结果为例 ,要求得到一个整数X可以满足 X % a = r,a,r,为数组名: 设数组元素为两个时, 列出方程:X % a1 ...

  6. Python核心编程读笔 5: python的序列

    第六章 序列:字符串.列表.元组 一.序列 (1)序列类型操作符 seq[ind] 获得下标为 ind 的元素 seq[ind1:ind2] 切片操作 seq * expr 序列重复 expr 次 s ...

  7. C#正则提取HTML中img的url值

    /// <summary> /// 取得HTML中所有图片的 URL. /// </summary> /// <param name="sHtmlText&qu ...

  8. jquery中validate插件表单验证

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  9. 区分IE9/IE8/IE7/IE6及其他浏览器-CSS hack

    记录一下这些浏览器的hack如下: 一.IE9以及以下版本浏览器 对于IE8及其以下版本的浏览器,就是使用本文标题所提到的”\9″ hack.如下代码: .ie8_9{ color:blue; /*所 ...

  10. struts2笔记01-环境搭建

    1.官网下载struts2 struts-2.3.28-all.zip,这个包可谓应有尽有,以后全靠它了! 2.jar包怎么选?       (1)struts-2.3.28-all\struts-2 ...