首页 > 技术文章 > 关于Excel操作

fengyu-2 2013-12-20 19:44 原文

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”

 

 

 

 


 

推荐阅读