我的应用程序基本上接受一个excel文件并将数据上传到我的数据库,该数据库曾经与Excel 2010完美配合使用以下代码。但是我们将系统更新到Excel 2016并且由于某种原因它停止工作,请你帮助我对我的代码做什么更新。
这是当前要连接的代码:
openFileDialog1.ShowDialog();
var fileName = string.Format(openFileDialog1.FileName);
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(fileName, 1, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, null, false);
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + "; Extended Properties=Excel 12.0;", fileName);
答案 0 :(得分:0)
我没有Excel 2016,所以我无法测试它,但这应该有效。
private DataTable ReadExcelFile(string sheetName, string path)
{
using (OleDbConnection conn = new OleDbConnection())
{
DataTable dt = new DataTable();
string Import_FileName = path;
string fileExtension = Path.GetExtension(Import_FileName);
if (fileExtension == ".xls")
{
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Import_FileName + ";" + "Extended Properties='Excel 8.0;HDR=YES;'";
}
if (fileExtension == ".xlsx")
{
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Import_FileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;'";
}
using (OleDbCommand comm = new OleDbCommand())
{
comm.CommandText = "Select * from [" + sheetName + "$]";
comm.Connection = conn;
using (OleDbDataAdapter da = new OleDbDataAdapter())
{
da.SelectCommand = comm;
da.Fill(dt);
return dt;
}
}
}
}
另外,请考虑这样做。
OleDb.OleDbConnectionStringBuilder Builder = new OleDb.OleDbConnectionStringBuilder();
Builder.DataSource = "test.xlsx";
Builder.Provider = "Microsoft.ACE.OLEDB.12.0";
Builder.Add("Extended Properties", "Excel 12.0;HDR=Yes;IMEX=1");
Console.WriteLine(Builder.ConnectionString);
最后,请访问此网站,了解Excel connection strings。
答案 1 :(得分:0)
我在相关问题中回答了这个问题,原因是升级到Office 16:oledb connection string for excel 2016 in c#
答案 2 :(得分:0)
这可能是因为安装中断或更改了已注册的ACE
驱动程序的现有版本。重新安装ACE
可能需要使其重新工作。请注意,如果版本更改,则可能需要更新您的连接字符串
您应该能够通过注册表查看计算机上可用的版本:
HKCR\Microsoft.ACE.OLEDB.XX.0