C# 读取excel文件c时出现问题#

C# 读取excel文件c时出现问题#,c#,excel,frameworks,.net-3.5,excel-2007,C#,Excel,Frameworks,.net 3.5,Excel 2007,大家早上好。 我有很多excel文件。 这很奇怪,但我看不懂。如果我将内容复制到一个新的excel电子表格中,一切都会很好地工作。 我想避免在阅读之前做所有的转换。我尝试了“扩展属性”的所有常规方法,但我总是犯同样的错误:“外部表不是预期的格式。”这些文件可能是在Excel97中创建的。但用适当的外部方法是行不通的。 你能给我支持吗?谢谢你,祝你愉快 在这里,我尝试使用扩展属性Excel8.0,但我已经全部尝试过了 string connstr = "Provider=Microsoft.ACE

大家早上好。 我有很多excel文件。 这很奇怪,但我看不懂。如果我将内容复制到一个新的excel电子表格中,一切都会很好地工作。 我想避免在阅读之前做所有的转换。我尝试了“扩展属性”的所有常规方法,但我总是犯同样的错误:“外部表不是预期的格式。”这些文件可能是在Excel97中创建的。但用适当的外部方法是行不通的。 你能给我支持吗?谢谢你,祝你愉快

在这里,我尝试使用扩展属性Excel8.0,但我已经全部尝试过了

string connstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + PercorsoCompletoFileExcel + ";Extended Properties='Excel 8.0;HDR=Yes;'";
在这里,我传递了一个select,以仅获取某些列。如果我将文件复制到新的excel工作表中,我会重复所有工作,但我希望它能与原始文件一起工作

strSQL = "SELECT [NumeroContratto] AS [Numero contratto],[Codice Cliente] as [Codice cliente],[Importo Tessera] as [Importo Tessera],[Costo contratto] as [Costo contratto],Spese,Commissioni,[Importo Servizi] as [Servizi],[Importo Sconto] as [Sconto],[Importo Addebito Totale] as [Totale]  from [" + foglio + "] where [Importo Addebito Totale] is not null";
            OleDbCommand cmd = new OleDbCommand(strSQL, conn);
            DataSet ds = new DataSet();
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            da.Fill(ds);

下面的代码在我的情况下起作用

根据我的经验,您需要先将上传的文件保存在应用程序目录中。否则,在读取(.xlsx)文件时将抛出错误

对(.xls)和(.xlsx)文件使用不同的连接字符串

配置文件中的设置(“Web.config”在我的示例中是Web应用程序)


string FileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
string Extension = Path.GetExtension(FileUpload1.PostedFile.FileName);
//This setting get from configuration file 
string FolderPath =ConfigurationManager.AppSettings("UploadFolder").ToString();
string FilePath = Server.MapPath(FolderPath + "\\" + FileName);
//Save file  
FileUpload1.SaveAs(FilePath);
string conStr = "";
switch (Extension)
{
   case ".xls": //Excel 97-03
                conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0;";
                break;
   case ".xlsx": //Excel 07
                conStr = "Provider=Microsoft.ACE.OLEDB.12.0 ;Data Source={0};Extended Properties=\"Excel 12.0 Xml;IMEX=1;HDR=NO\";";

                break;
        }
       conStr = String.Format(conStr, FilePath);
<appSettings>
<add key="UploadFolder" value="UploadedFilesFolder" />
</appSettings>