关于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”
浙公网安备 33010602011771号