关于Excel操作
Excel导入操作
导入到dataSet
方式一(dao的OleDb方式)
excel导入到dataset
string path=server.MapPath("excel/student.xls"); dataSet ds=ExcelToDateSet(path); //excel导入到dataset的方法 public dataset ExcelToDateSet(string path) { //excel版本为2003 OleDbConnection con=new OleDbConnction("Provider=Microsoft.Jet.OLEDB.4.0;Extended properties=\"Excel 8.0;HDR=YES;IMEX=1\";Data Source="+path); conn.open(); OleDbDataAdapter da=new OleDbDataAdapter("select * from [Sheet$1]",conn); dataSet ds=new dataSet(); da.Fill(ds); conn.close(); return ds; }
Eecel的导出
//dataSet导入到Excel
using Excel=Microsoft.Office.Interop.Excel; public void DataSetToExcel(dataSet ds) { //创建excel应用程序 Excel.Application app=new Microsoft.Interop.Excel.Application(); if(app!=null) { //创建excel空工作簿 Excel.Wookbook workbook=app.Workbooks.add(true); //创建excel工作表 Excel.Wooksheet worksheet=(Excel.Worksheet)workbook.Worksheet[1]; //设置表名 worksheet.Name="stuInfo"; //Excel列名 for(int col=0;col<ds.tables[0].Columns.count;col++) { worksheet.Cell[1,i+1]=ds.tables[0].Columns[col].Name; } int row=2; //创建行 for(int i=0;i<ds.tables[0].rows.count;i++) { for(int j=0;j<ds.tables[0].Columns.count;j++) { worksheet.Cell[row,j+1]=ds.tables[0].rows[i][j].ToString(); } row++; } //保存 workbook.SaveAs(Server.MapPath("excel/stuInfo.xls")); //退出excel workbook.close(); app.Quit(); } }
将Excel文件导出到客户端
需要在一般处理文件设置响应头和响应类型
//响应数据类型 context.Response.ContentType="Appliction/Excel"; //文件头设置 context.Response.AppendHander("content-disposition","attachment;FileName=stuInfo.xls");
由于Excel驱动程序是以excel文件默认的8行数据来推测列的数据类型,excel的版本不同可能会出现的一些问题
如果excel导出到GridView可能出现的问题:
<1>数据无法显示
解决思路:设置链接字符串中的参数IMEX=1,可以解决前8行不同数据类型无法完整显示。如果修改注册表中的"HKEY_LOCAL_MACHINE\SOFTWARE\Microsote\Jet\4.0\Engines\Excel"下的TypeGuessRows的值为0,可以彻底解决因不同行含有不同的数据类型而无法显示的问题。
<2>运行错误
如果代码书写没有错误,可考虑版本问题,如果excel应用程序是excel 2007,连接字符串中的参数Extended Properties中的"Excel 8.0" 改为“Excel 12.0”