我已经对这个问题进行了大约一天半的研究,但还没有找到我的问题的解决方案。这是我的情景:
我有一个AsyncFileUpload和一个配置为只接受xls和xlsx文件(Excel)文件的按钮。上传的此文件用于将信息导入gridview。旧格式xls文件工作正常。当我想上传xlsx文件时出现问题。我已经测试了多个场景,并且我发现当xlsx文件当前/主动打开时它可以正常工作。它关闭时会给我错误。我已经摆弄并探索了这个问题的解决方案,我收到的错误范围非常大。但最突出的错误如下:
1.外部表格不符合预期格式。
2.无法找到可安装的isam
我找到了一篇与第二个错误(Could not find installable ISAM)相关的文章,但我还没有尝试过所有建议的解决方案,因为我宁愿避免对Windows注册表进行更改,因为我没有很多关于这件事。
我附加了用于在OleDb和excel文件之间建立连接的代码:
protected void AsyncUpload_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
string connString = "";
string strFileType = Path.GetExtension(e.FileName).ToLower();
string path = e.FileName;
////Connection String to Excel Workbook
if (strFileType.Trim() == ".xls")
{
connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
}
else if (strFileType.Trim() == ".xlsx")
{
connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;HDR=Yes;IMEX=1";
}
string query = "SELECT * FROM [sheet1$]";
OleDbConnection conn = new OleDbConnection(connString);
if (conn.State == ConnectionState.Closed)
conn.Open();
OleDbCommand cmd = new OleDbCommand(query, conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
using (OleDbDataReader dr = cmd.ExecuteReader())
{
_InsertWrapper.clearLists();
while (dr.Read())
{
var row1Col0 = dr[0];
Console.WriteLine(row1Col0);
_InsertWrapper.GenerateList(dr);
}
}
da.Dispose();
conn.Close();
conn.Dispose();
InventoryGrid.DataBind();
ErrorsGrid.DataBind();
}
如果有人有额外的知识或解释可以做出贡献,请添加它,以便更多能够解决相同类型问题的人可以从这个问题中获得尽可能多的信息。我们仍在学习。
所以,主要想法:需要找到一个成功上传xlsx文件的解决方案