The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
导入代码:
if (flexcel.HasFile)
{
string fileExtension = System.IO.Path.GetExtension(flexcel.FileName);
if (fileExtension == ".xls" || fileExtension == ".xlsx")
{
string fileLocation = Server.MapPath("../Content/MailMarketing/") + flexcel.FileName + month;
if (System.IO.File.Exists(fileLocation))
{
// System.IO.File.Delete(fileLocation);
}
flexcel.SaveAs(fileLocation);
string excelConnectionString = string.Empty;
excelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
Server.MapPath("~/Content/MailMarketing/" ) + flexcel.FileName + month + ";Extended Properties="Excel 12.0;HDR=Yes;IMEX=2"";
//connection String for xls file format.
if (fileExtension == ".xls")
{
excelConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
fileLocation + ";Extended Properties="Excel 8.0;HDR=Yes;IMEX=2"";
}
//connection String for xlsx file format.
else if (fileExtension == ".xlsx")
{
excelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
Server.MapPath("~/Content/MailMarketing/") + flexcel.FileName + month + ";Extended Properties="Excel 12.0;HDR=Yes;IMEX=2"";
}
//Create Connection to Excel work book and add oledb namespace
OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
excelConnection.Open();
如何解决??
我已经下载了此软件,但仍无法正常工作..任何建议??
https://www.microsoft.com/en-us/download/details.aspx?id=23734
我尝试了很多代码,但是同样的问题。
无需仅仅担心OLEDB ..其他许多方法用于上传.xlsx文件(import)。
这是标题:
using ClosedXML.Excel;
从Nuget安装ClosedXML.Excel
DLL。
这是代码:
string filePath = Server.MapPath("~/Content/MailMarketing/") + Path.GetFileName(flexcel.PostedFile.FileName);
flexcel.SaveAs(filePath);
//Open the Excel file using ClosedXML.
using (XLWorkbook workBook = new XLWorkbook(filePath))
{
//Read the first Sheet from Excel file.
IXLWorksheet workSheet = workBook.Worksheet(1);
//Create a new DataTable.
DataTable dt = new DataTable();
//Loop through the Worksheet rows.
bool firstRow = true;
foreach (IXLRow row in workSheet.Rows())
{
//Use the first row to add columns to DataTable.
if (firstRow)
{
foreach (IXLCell cell in row.Cells())
{
dt.Columns.Add(cell.Value.ToString());
}
firstRow = false;
}
else
{
//Add rows to DataTable.
dt.Rows.Add();
int i = 0;
foreach (IXLCell cell in row.Cells())
{
dt.Rows[dt.Rows.Count - 1][i] = cell.Value.ToString();
i++;
}
}