我一直用来读Excel的方法是,原来一直没有出过问题,代码如下:
DataSet ds=new DataSet();
try
{
   ds.Clear();
   string strPower="Provider=Microsoft.Jet.OLEDB.4.0;"+"Data Source="
         +excelName+";"+@"Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""";
   OleDbConnection objconn=new OleDbConnection(strPower);
   OleDbDataAdapter objAdapter=new OleDbDataAdapter("select * from ["+strSheetName+"$]",objconn);
   objAdapter.Fill(ds,"Table");
   objAdapter.Dispose();
   objconn.Close();
}
catch(Exception e)
{
   ds=null;
}
通过传入"excelName"和"Sheet"来读出这个Excel,从而返回DataTable查看了很多帖子,发现大家一直都是这样写的,但是今天我再使用的时候却发现:
抛出“外部表不是预期的格式”这个异常!我换了很多的Excel(我机器上做的,同时机器上做的)来进行测试,发现都不行,当场昏倒!!!!!!!!!不知道各位同仁有没有碰到过如此问题,如果有相关的经验,还望赐教!!!不胜感激啊!!

解决方案 »

  1.   

    我又仔细的测试了一下:
    当我换成
    try
    {
       ds.Clear();
       string strPower="Provider=Microsoft.Jet.OLEDB.4.0;"+@"Data Source=D:\临时存放 \yang\交换设备调整结果_JerryLiu.xls"+";"+@"Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""";
       OleDbConnection objconn=new OleDbConnection(strPower);
       OleDbDataAdapter objAdapter=new OleDbDataAdapter("select * from ["+strSheetName+"$]",objconn);
       objAdapter.Fill(ds,"Table");
       objAdapter.Dispose();
       objconn.Close();
    }上述的路径写死,让他读我的一个文件就可以通过,奇怪的很勒!因为是用户上传,我必须先临时保存用户上传的Exel,我使用的是:
    string serverPath="d:\\Temp.xls";
    e.CurrentUploadFile.SaveAs(serverPath);.....DataTable dt_original=WOReadExcel.GetExcelData(serverPath,"Sheet1");注:上述的代码的方法为DataTable GetExcelData(string excelName,string strSheetName)
    写了这么多,主要是想介绍清楚我的问题,还望各位有经验的同仁给点你的经验!!
    谢谢!谢谢!
      

  2.   

    string serverPath="d:\\Temp.xls";
    会不会是两个斜杠的缘故?
      

  3.   

    真是不幸,这个也算是奇怪了,MS的EXCEL有时候是比较奇怪的,也不是太懂....^_^
    你应该仔细查查你的代码e.CurrentUploadFile.SaveAs(serverPath);
    这个ServerPath所指向的文件是不是已经保存在服务器上了,且文件的内容是不是一样?
    我想你的问题可能出在这里!一点儿经验之谈,希望可以帮到你^_^
      

  4.   

    用Dcomcnfg命令对Microsoft Word进行配置,试试吧。
      

  5.   

    应该是路径的\\的问题 程序里用两个 sql里面用一个\
      

  6.   

    进行身份验证,因为操作某些应用程序需要身份验证,比如excel,word等等 
    在web.config里加入
    <identity  impersonate="true" userName="administrator" password=""/>
      

  7.   

    确保进行了dcom配置,并且引用了excel
    下面代码是我测试过的string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = c:\\sample.xls;Extended Properties=Excel 8.0" ;
    OleDbConnection myConn = new OleDbConnection ( strCon ) ;
    myConn.Open ( ) ; string strCom1 = " SELECT * FROM [Sheet1$] " ;  //选择出数据                      
                                //string strCom1 = "update [Sheet1$] set name='ggg' " ;//更新数据 "name"--> (excel里第一行数据相当于字段名)
    OleDbCommand myconmm=new OleDbCommand (strCom1,myConn);
    myconmm.ExecuteNonQuery ();
    //打开数据链接,得到一个数据集
    OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
    //创建一个 DataSet对象DataSet myDataSet = new DataSet ( ) ;
    //得到自己的DataSet对象
    myCommand.Fill ( myDataSet , "[Sheet1$]" ) ;
    //关闭此数据链接
    myConn.Close ( ) ;
      

  8.   

    在这里感谢liuyong_lll,我出现的问题正好是你所讲的^_^,谢谢!对于各位,在这里也感谢大家,希望以后可以共同进步!