ASP.NET COM 把DataTable的数据 分sheet 导出到Excel

来源:互联网 发布:大数据精准推荐竞彩app 编辑:程序博客网 时间:2024/05/12 20:17

注意了 我是利用asp.net COM 进行EXcel操作的  

office版本Excel2003   com接口 是Microsoft.Office.Interop.Excel 11.0版本。 // 2003 一定要11.0版本 不然出错 

在做多个sheet导出时 我碰到N多个错误 用了我三天的时间才弄出来  

下面是我碰到错误的详解 和 百度 谷歌时 帮助最大的资料

都贡献出来了

EXCEL2003 配置

如果机器上先安装的office 然后又安装的.netFrameWork  要重新注册一下office

请看下面网页内容

http://msdn.microsoft.com/zh-cn/library/aa159923(v=office.11).aspx

配置好EXCEL后 

引进Com

如果你已经完成代码 进行调试后后发现

Excel.Application app = new Excel.Application();

这句出错了  权限不足

关于asp.net的权限问题的设计 请见下面网页  写的很详细

http://hi.baidu.com/tewuapple/blog/item/2cf7e8ed829ebbc12e2e21e1.html

配置好这些东西后 终于开始代码了

这里有一下经典范例 可以给大家借鉴

下面网页

http://hi.baidu.com/user_pyw/blog/item/d6e8aed0e140a9dd572c84a2.html

看到这里你也许会松口气了  不过 上面的例子是单个sheet操作

对于多个sheet操作 又狂找一番 

下面是我自己的代码 给大家看一下啊

Using Excel;    引入命名空间        //  CTRL +  J  可以看到所有的命名空间

//  我把Excel操作放到一个方法里面了

private void Excel()

{ 

  Excel.Application app = new Excel.Application();

        Excel.Workbooks ws = app.Workbooks;

        Excel.Workbook workbook = ws.Add(Excel.XlWBATemplate.xlWBATWorksheet);  // 默认已经创建了一个worksheet

        System.Data.DataTable dt = new System.Data.DataTable      

       //注意  一定要加上System.Data.DataTable 因为Excel本身也有DataTable  否则会出现DataTable 两异性的错误

dt .Columns.Add(new DataColumn("aaa",typeof(string)));

 dt .Columns.Add(new DataColumn("bbb",typeof(string)));

dt .Columns.Add(new DataColumn("ccc",typeof(string)));

DataRow dr = dt.NewRow()

dr["aaa"]=“Jenat1”;

dr["bbb"]=“Jenat2

dr["ccc"] =“Jenat3”;

 dtName.Rows.Add(dr);

 int sheetCount = 10    // 这是sheet的数据 这是我假定的 方便实例 实际情况中可以另当别论

 workbook.Sheets.Add(Type.Missing,workbook.Sheets[1],dtName.Rows.Count-1,Type.Missing);

// 关于Add参数 有四个  第一个参数是添加的位置 before 和 after 默认是after  第二个参数是添加在哪一个工作表前和后

// 第三个参数 是添加的worksheet个数 第四个参数忘记了

// 为worksheet添加数据

for(int i=1;i<workbook.Sheets.Count;i++)

{

Excel.Worksheet worksheet =(Excel.Worksheet)workbook.Worksheets[m];  //一次得到worksheet worksheet.Name = drName["user_id"].ToString();  // 为worksheet设置名字

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

{ worksheet.Cells[1,i+1] =dt.Columns[i].ColumnName.ToString();

}

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

{

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

{

worksheet.Cells[r+2,y+1] = dt.Rows[r][y].ToString();

}

}

}

worksheet.Columns.EntireColumn.AutoFit();  //自动适应长度

string filepath = HttpContext.Current.Server.MapPath("TestResult.xls"); //定义存放的位置和Excel名称

workbook.Saved = true;

workbook.SaveCopyAs(filepath);

//  workbook 有三种保存 saved  saveCopyAs  saveAS   我也没搞懂什么意思 不过SaveAS参数很多

我用了以后报错 如果你要关闭的话 一定要先保存  不然workbook 是空的

HttpContext.Current.Response.Buffer = true;

HttpContext.Current.Response.Clear();

Response.Charset="GB2312";  

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

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

HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename="+ HttpUtility.UrlEncode("TestResult.xls"));

// 貌似下面这句也必须有 我删掉以后 没有数据

HttpContext.Current.Response.WriteFile(filepath);

HttpContext.Current.Response.Flush();

app.Quit();

GC.Collect();

HttpContext.Current.Response.End();

}

把我碰到的错误写出来 给需要的人一点借鉴  感谢CSdn的人 给了很大的帮助

 

原创粉丝点击