养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

C# oledb读取Excel问题

时间:2024-10-31 01:35:23

C#中快速读取Excel方法,用oledb读取;其中由于打开excel,出现“excel无法打开文件,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。”的提示信息,所以oledb读取excel失败

工具/原料

visualstudio

方法/步骤

1、oledb方法读取代码为usin壹执慵驾gSystem.Data.OleDb;usingSystem.Data.Sq造婷用痃lClient;usingSystem.Data;///<summary>///读取Excel文件到DataSet中///</summary>///<paramname="filePath">文件路径</param>///<returns>Excel数据DataSet</returns>privateDataSetExcelToDS(stringfilePath){stringconnStr="";stringfileType=System.IO.Path.GetExtension(filePath);if(string.IsNullOrEmpty(fileType))returnnull;//判断Excel类型xls\\xlsxif(fileType==".xls")connStr="Provider=Microsoft.Jet.OLEDB.4.0;"+"DataSource="+filePath+";"+";ExtendedProperties=\"Excel8.0;HDR=YES;IMEX=1\"";elseconnStr="Provider=Microsoft.ACE.OLEDB.12.0;"+"DataSource="+filePath+";"+";ExtendedProperties=\"Excel12.0;HDR=YES;IMEX=1\"";stringsql_F="Select*FROM[{0}]";OleDbConnectionconn=null;OleDbDataAdapterda=null;DataTabledtSheetName=null;DataSetds=newDataSet();try{//初始化连接,并打开conn=newOleDbConnection(connStr);conn.Open();//获取数据源的表定义元数据stringSheetName="";dtSheetName=conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,newobject[]{null,null,null,"TABLE"});//初始化适配器da=newOleDbDataAdapter();SheetName=(string)dtSheetName.Rows[0]["TABLE_NAME"];//将Excel中的数据复制到DataSet中if(!(SheetName.Contains("$")&&!SheetName.Replace("'","").EndsWith("$"))){da.SelectCommand=newOleDbCommand(String.Format(sql_F,SheetName),conn);DataSetdsItem=newDataSet();da.Fill(dsItem);ds.Tables.Add(dsItem.Tables[0].Copy());}}catch(Exceptionex){//this.WriteErrorXML(ex);//错误日志}finally{//关闭连接if(conn.State==ConnectionState.Open){conn.Close();da.Dispose();conn.Dispose();}}returnds;}

2、问题:若打开Excel文件中出现一下提示,则conn.Open();这行代码会出错....错误提示为:外部表不是预期的格式。

C# oledb读取Excel问题

3、暂时解决方案,只能将上传的Excel进行另存为操作,这样提示就不会出现,可以正常上传

4、这种方法读取Exce盟敢势袂l,可能会出现读取了很多的空行数据,请注意判断删除,如//DataSetExcelConsert数据逗垅型巢集for(introwIndex=0;rowIndex<ExcelConsert.Tables[0].Rows.Count;rowIndex++){if(string.IsNullOrEmpty(ExcelConsert.Tables[0].Rows[rowIndex][0].ToString())){///某关键字为空,就停止break;}else{//........................................}}

© 一点知识