您的位置:首页 > 运维架构

关于导入Excel问题

2009-04-21 14:36 197 查看
在项目里以前一直使用写好的导入Excel函数!打开Excel遍历Excel单元格值最后转换成DataTabel这样用了好久,突然有一天要导入Excel发现如果Excel有一列日期类型(1900-1-1)导入就成了double类型,使我非常郁闷!

 今天和同事的讨论下我们使用了oled连接打开获得excel存储到DataSet中最后使用,其中发现根据Excel的版本不同连接语句也有差别;

2003以下(包括2003)版本:string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data   Source={0};Extended   Properties=/"Excel   11.0;HDR=Yes;IMEX=1/"", 文件路径);

2007版本:string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=/"Excel 12.0;HDR=YES;/"",文件路径);

需要注意的是高版本兼容低版本,相反则报错!如果使用2003版本语句有可能会出现OleDbException,找不到可安装的 ISAM。这样大家最好使用2007版本语句就可以了(前提是要安装2007)!如果不出异常可以直接使用2003版本连接语句,本人太懒没有去处理2003版本的异常处理!直接使用了2007(我安装了2007)

-----------------下面是连接读取Excel的简单语句------------------------

string filePath = "F://****//*.xls";

int d = OfficeRigistKey.GetRigistKey(OfficeRigistKey.DocType.Excel);
string strConn = "";
if (d == 12)  //office2007
{
       strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=/"Excel 12.0;HDR=YES;/"",filePath);

}
else //office2003及以下版本
{
      strConn =string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=/"Excel 8.0;HDR=Yes;IMEX=1/"",filePath);
}

OleDbConnection conn = new OleDbConnection(strConn);

string  strExcel = "select * from [sheet2$]";

conn.Open();
OleDbDataAdapter myCommand= new OleDbDataAdapter(strExcel, strConn);
DataSet  ds = new DataSet();
myCommand.Fill(ds, "table1");
return ds;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息