C# 在asp.net C中上载xls格式文件时出错#
我想上传C# 在asp.net C中上载xls格式文件时出错#,c#,asp.net,excel,C#,Asp.net,Excel,我想上传.xls和.xlsx格式文件.xlsx格式工作正常,但在上载.xls时,我发现错误如下: 外部表不是预期的格式 这是我试过的代码 if (fluploadData.HasFile) { string filename = Path.GetFileName(fluploadData.FileName); // FileUpload.SaveAs(Server.MapPath("~/") + filename); string fil
.xls
和.xlsx
格式文件.xlsx
格式工作正常,但在上载.xls
时,我发现错误如下:
外部表不是预期的格式
这是我试过的代码
if (fluploadData.HasFile)
{
string filename = Path.GetFileName(fluploadData.FileName);
// FileUpload.SaveAs(Server.MapPath("~/") + filename);
string filenamewithoutrext = string.Empty;
FileExt = Path.GetExtension(fluploadData.FileName).ToLower();
if (Path.GetExtension(fluploadData.FileName).ToLower() != ".xls" &&
Path.GetExtension(fluploadData.FileName).ToLower() != ".xlsx"
)
{
Response.Write("Only .xls, .xlsx are allowed.!");
return;
}
filenamewithoutrext = Path.GetFileNameWithoutExtension(fluploadData.FileName).ToLower();
string path = Server.MapPath("UploadData\\");
string filename_ = filenamewithoutrext;
// DeleteDirectory(path);
if (!Directory.Exists(path)) // CHECK IF THE FOLDER EXISTS. IF NOT, CREATE A NEW FOLDER.
{
Directory.CreateDirectory(path);
}
else
{
foreach (string file in Directory.GetFiles(path))
{
File.Delete(file);
}
}
string fname;
fname = path + filename_ + ".xls";
fluploadData.SaveAs(fname);
HttpContext.Current.Session["ExcelFilePath"] = fname;
string conStr = "";
System.Data.DataTable dtExcelRows = new System.Data.DataTable();
switch (FileExt)
{
case ".xls": //Excel 97-03
conStr = System.Configuration.ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString;
break;
case ".xlsx": //Excel 07
conStr = System.Configuration.ConfigurationManager.ConnectionStrings["Excel07ConString"].ConnectionString;
break;
}
conStr = String.Format(conStr, fname, "YES");
System.Data.OleDb.OleDbConnection connExcel = new System.Data.OleDb.OleDbConnection(conStr);
System.Data.OleDb.OleDbCommand cmdExcel = new System.Data.OleDb.OleDbCommand();
System.Data.OleDb.OleDbDataAdapter oda = new System.Data.OleDb.OleDbDataAdapter();
cmdExcel.Connection = connExcel;
connExcel.Open(); // here is coming the error
System.Data.DataTable dtExcelSchema = connExcel.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
System.Data.DataTable dtExcelColumnsTable = connExcel.GetSchema("Columns");
//string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString().Replace('\'', ' ').Trim();
string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString().Replace('\'', ' ').Trim(); // nadeem
cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";
oda.SelectCommand = cmdExcel;
oda.Fill(dtExcelRows);
connExcel.Close();
bool Structure_FLG = false;
}
连接字符串也在web.config中正确设置,如下所示
<add name="Excel03ConString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'"/>
<add name="Excel07ConString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR={1}'"/>
我哪里做错了?此行将把所有上传的文件保存为XLS格式,而不管上传的文件扩展名如何,并且在实际文件格式不匹配时可能引发异常:
fname = path + filename_ + ".xls";
我建议使用Path.GetExtension(fluploadData.FileName)
方法提供的文件扩展名:
string fname = path + filename_ + FileExt;
外部表不在预期格式中。尝试使用Jet OLEDB 4.0提供程序的连接字符串读取较新的XLSX格式时,通常会发生错误,反之亦然。因此,请确保已将您的设置与上载的文件扩展名相对应。该错误仅发生在某些文件上还是所有XLS文件上?当您试图在服务器中手动打开创建的文件时发生了什么?连接字符串本身似乎正常,问题是您正在通过错误的连接字符串/文件格式选择读取文件。是的,它仅在
xls
文件中出现??是,它在服务器上正确打开。可能Excel文件包含混合数据列,请尝试为JET OLEDB连接字符串添加IMEX=1
。相关问题&。