System.InvalidOperationException: 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。
2018-03-23 15:22
477 查看
最近用MVC3 做了一个项目,发布时项目的中的数据导入功能(Excel格式,有固定的导入数据模板)居然不能用,查看报错日志,发现是“System.InvalidOperationException: 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序............”。 在网上找一些资料,把问题解决了。如下图所示。 后台功能代码:导入与导出实现代码。#region -使用IO写入Excel-
/// <summary>
/// 使用IO写入Excel
/// </summary>
/// <param name="table">表</param>
/// <param name="file">保存路径</param>
public static bool dataTableToCsv(System.Data.DataTable table, string file)
{
string title = "";
try
{
FileStream fs = new FileStream(file, FileMode.OpenOrCreate);
//FileStream fs1 = File.Open(file, FileMode.Open, FileAccess.Read);
StreamWriter sw = new StreamWriter(new BufferedStream(fs), System.Text.Encoding.Default);
for (int i = 0; i < table.Columns.Count; i++)
{
title += table.Columns[i].ColumnName + "\t"; //栏位:自动跳到下一单元格
}
title = title.Substring(0, title.Length - 1) + "\n";
sw.Write(title);
foreach (System.Data.DataRow row in table.Rows)
{
string line = "";
for (int i = 0; i < table.Columns.Count; i++)
{
line += row[i].ToString().Trim() + "\t"; //内容:自动跳到下一单元格
}
line = line.Substring(0, line.Length - 1) + "\n";
sw.Write(line);
}
sw.Close();
fs.Close();
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region- 读取csv格式的Excel文件的方法-
///<summary>
///读取csv格式的Excel文件的方法
///</ummary>
///<param name="path">待读取Excel的全路径</param>
///<returns></returns>
public static DataTable ReadExcelWithStream(string path)
{
DataTable dt = new DataTable();
bool isDtHasColumn = false; //标记DataTable 是否已经生成了列
StreamReader reader = new StreamReader(path, System.Text.Encoding.Default); //数据流
while (!reader.EndOfStream)
{
string meaage = reader.ReadLine();
string[] splitResult = meaage.Split(new char[] { ',' }, StringSplitOptions.None); //读取一行 以逗号分隔 存入数组
DataRow row = dt.NewRow();
for (int i = 0; i < splitResult.Length; i++)
{
if (!isDtHasColumn) //如果还没有生成列
{
dt.Columns.Add("column" + i, typeof(string));
}
row[i] = splitResult[i];
}
dt.Rows.Add(row); //添加行
isDtHasColumn = true; //读取第一行后 就标记已经存在列 再读取以后的行时,就不再生成列
}
return dt;
}
#endregion
#region -读取xls\xlsx格式的Excel文件的方法-
///<summary>
///读取xls\xlsx格式的Excel文件的方法
///</ummary>
///<param name="path">待读取Excel的全路径</param>
///<returns></returns>
public static DataTable ReadExcelToTable(string path)
{
DataSet ds = new DataSet();
//如果HDR=YES,DataTable默认的列名为Excel 第一行数据...
//如果HDR=NO,DataTable默认的列名为F1,F2,F3...
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
using (OleDbConnection conn = new OleDbConnection(strConn))
{
conn.Open();
DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
string firstSheetName = sheetsName.Rows[0][2].ToString(); //得到第一个sheet的名字
string strExcel = string.Format("select * from [{0}]", firstSheetName);
OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
adapter.Fill(ds);
conn.Close();
}
return ds.Tables[0];
}
#endregion
/// <summary>
/// 使用IO写入Excel
/// </summary>
/// <param name="table">表</param>
/// <param name="file">保存路径</param>
public static bool dataTableToCsv(System.Data.DataTable table, string file)
{
string title = "";
try
{
FileStream fs = new FileStream(file, FileMode.OpenOrCreate);
//FileStream fs1 = File.Open(file, FileMode.Open, FileAccess.Read);
StreamWriter sw = new StreamWriter(new BufferedStream(fs), System.Text.Encoding.Default);
for (int i = 0; i < table.Columns.Count; i++)
{
title += table.Columns[i].ColumnName + "\t"; //栏位:自动跳到下一单元格
}
title = title.Substring(0, title.Length - 1) + "\n";
sw.Write(title);
foreach (System.Data.DataRow row in table.Rows)
{
string line = "";
for (int i = 0; i < table.Columns.Count; i++)
{
line += row[i].ToString().Trim() + "\t"; //内容:自动跳到下一单元格
}
line = line.Substring(0, line.Length - 1) + "\n";
sw.Write(line);
}
sw.Close();
fs.Close();
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region- 读取csv格式的Excel文件的方法-
///<summary>
///读取csv格式的Excel文件的方法
///</ummary>
///<param name="path">待读取Excel的全路径</param>
///<returns></returns>
public static DataTable ReadExcelWithStream(string path)
{
DataTable dt = new DataTable();
bool isDtHasColumn = false; //标记DataTable 是否已经生成了列
StreamReader reader = new StreamReader(path, System.Text.Encoding.Default); //数据流
while (!reader.EndOfStream)
{
string meaage = reader.ReadLine();
string[] splitResult = meaage.Split(new char[] { ',' }, StringSplitOptions.None); //读取一行 以逗号分隔 存入数组
DataRow row = dt.NewRow();
for (int i = 0; i < splitResult.Length; i++)
{
if (!isDtHasColumn) //如果还没有生成列
{
dt.Columns.Add("column" + i, typeof(string));
}
row[i] = splitResult[i];
}
dt.Rows.Add(row); //添加行
isDtHasColumn = true; //读取第一行后 就标记已经存在列 再读取以后的行时,就不再生成列
}
return dt;
}
#endregion
#region -读取xls\xlsx格式的Excel文件的方法-
///<summary>
///读取xls\xlsx格式的Excel文件的方法
///</ummary>
///<param name="path">待读取Excel的全路径</param>
///<returns></returns>
public static DataTable ReadExcelToTable(string path)
{
DataSet ds = new DataSet();
//如果HDR=YES,DataTable默认的列名为Excel 第一行数据...
//如果HDR=NO,DataTable默认的列名为F1,F2,F3...
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1';"; // Office 07及以上版本 不能出现多余的空格 而且分号注意
using (OleDbConnection conn = new OleDbConnection(strConn))
{
conn.Open();
DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字
string firstSheetName = sheetsName.Rows[0][2].ToString(); //得到第一个sheet的名字
string strExcel = string.Format("select * from [{0}]", firstSheetName);
OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
adapter.Fill(ds);
conn.Close();
}
return ds.Tables[0];
}
#endregion
相关文章推荐
- {System.InvalidOperationException: 未在本地计算机上注册“Microsoft.Ace.OleDb.12.0”提供程序。
- System.InvalidOperationException: 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。
- MS SQL 导入导出 提示 未在本地计算机上注册“Microsoft.ACE.Oledb.12.0”提供程序。(System.Data)
- MS SQL 导入导出 提示 未在本地计算机上注册“Microsoft.ACE.Oledb.12.0”提供程序。(System.Data)
- 执行asp.net上传下载Excel时出现“未在本地计算机上注册“Microsoft.ACE.Oledb.12.0”提供程序。(System.Data)”错误
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法
- 未在本地计算机上注册“Microsoft.Ace.OleDb.12.0”提供程序解决办法
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序 解决方法
- 未在本地计算机上注册“microsoft.ace.oledb.12.0”提供程序
- 从Excel中导入数据时,提示未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序 解决方法
- EXCEL文件导入时报_未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法
- 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。
- 关于office2007以上版本无法导入SQLserver,错误信息:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。
- 解决方法:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序[转]
- 访问Excel 2007出错,未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序
- 未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0 提供程序.
- 错误信息:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。