未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。(C# EXCEL导入demo)
1. 安装office包
https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=13255
2.需要在相应的IIS应用程序池启用32位应用程序
3.代码
//前台
<script language="javascript">
$(document).ready(function () {
$('#ImportExcel').on('click', function (e) {
console.log($(this).next().attr("data-id"));
$(this).next().trigger('click'); })
})
function Upload(obj) {
var file = obj.files[0];
var formData = new FormData();
formData.append('imgFile', file);
formData.append('type', "carCheckUpload");
$.ajax({
url: "/ajax/ajax_caruseexport.ashx",
type: "post",
data: formData,
contentType: false,
processData: false,
mimeType: "multipart/form-data",
success: function (data) {
var jsondata = $.parseJSON(data);
console.log(jsondata);
alert('导入成功');
window.location.reload();
},
error: function (data) {
alert("上传失败");
}
});
}
</script> <div class="lf">
<div class="div1" style="margin-left: 15px;">
<a href="/Upload/公车检查台账导入表.xls">模板下载</a>
</div>
<div class="div1" style="margin-left: 15px;">
<a id="ImportExcel">公车检查台账导入</a>
<input style="display: none;" type="file" onchange="Upload(this)" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
</div> </div>
//后台处理程序
<%@ WebHandler Language="C#" Class="ajax_caruseexport" %> using System;
using System.Collections;
using System.Web;
using System.IO;
using System.Globalization;
using LitJson;
using System.Collections.Generic;
using System.Data;
using System.Text.RegularExpressions;
using System.Data;
using System.Data.OleDb;
using System.Data.Linq.SqlClient;
using System.Linq; public class ajax_caruseexport : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
private HttpContext context;
BaseService bs = new BaseService(); public void ProcessRequest(HttpContext context)
{
this.context = context;
int maxSize = 1000000000;
String savePath = "/Upload/" + DateTime.Now.ToString("yyyy") + "/" + DateTime.Now.ToString("yyyyMM") + "/"; Hashtable extTable = new Hashtable();
extTable.Add("file", "doc,docx,xls,xlsx,ppt,pptx,txt,zip,rar,gz,bz2");
HttpPostedFile imgFile = context.Request.Files["imgFile"]; if (imgFile == null) showError("请选择文件。");
String dirName = context.Request.QueryString["dir"];
if (String.IsNullOrEmpty(dirName)) dirName = "file";
if (!extTable.ContainsKey(dirName)) showError("目录名不正确。");
String fileName = imgFile.FileName;
String fileExt = Path.GetExtension(fileName).ToLower(); if (imgFile.InputStream == null || imgFile.InputStream.Length > maxSize) showError("上传文件大小超过限制。");
if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(((String)extTable[dirName]).Split(','), fileExt.Substring(1).ToLower()) == -1) showError("上传文件扩展名是不允许的扩展名。\n只允许" + ((String)extTable[dirName]) + "格式。"); if (!Directory.Exists(context.Server.MapPath(savePath))) Directory.CreateDirectory(context.Server.MapPath(savePath)); String newFileName = "meeting_" + DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt;
String fileUrl = savePath + newFileName; imgFile.SaveAs(context.Server.MapPath(fileUrl));
if (!(IsAllowedExtension(fileUrl))) showError("非法文件!请上传正确的文件!");
var msg = ImportUser(context, context.Server.MapPath(fileUrl)); Hashtable hash = new Hashtable();
hash["error"] = 0;
hash["url"] = fileUrl;
hash["msg"] = msg;
context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8");
context.Response.Write(JsonMapper.ToJson(hash));
context.Response.End();
} private void showError(string message)
{
Hashtable hash = new Hashtable();
hash["error"] = 1;
hash["message"] = message;
context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8");
context.Response.Write(JsonMapper.ToJson(hash));
context.Response.End();
} //文件真实性判断
private bool IsAllowedExtension(string FileUrl)
{
System.IO.FileStream fs = new System.IO.FileStream(context.Server.MapPath(FileUrl), System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
string fileclass = "";
byte buffer;
buffer = r.ReadByte();
fileclass = buffer.ToString();
buffer = r.ReadByte();
fileclass += buffer.ToString();
r.Close();
fs.Close();
/* 文件扩展名说明
*7173 gif
*255216 jpg
*13780 png
*6677 bmp
*/
Dictionary<String, String> ftype = new Dictionary<string, string>();
//添加允许的文件类型
ftype.Add("7173", "gif");
ftype.Add("255216", "jpg");
ftype.Add("13780", "png");
ftype.Add("6677", "bmp");
ftype.Add("8297", "rar");
ftype.Add("208207", "doc"); ftype.Add("3780", "pdf");
ftype.Add("8075", "xlsx"); if (ftype.ContainsKey(fileclass))
{
return true;
}
else
{
System.IO.File.Delete(context.Server.MapPath(FileUrl));
return false;
} } /// <summary>
/// 导入通讯录
/// </summary>
/// <param name="context"></param>
/// <param name="filePath"></param>
/// <returns></returns>
public string ImportUser(HttpContext context, string filePath)
{
var result = "";
string type = context.Request["type"];
if (type == "carCheckUpload")
{
DataTable dt = ExcelToDataTable(filePath);
BaseHelper.WriteLogs("ImportCarCheck", Newtonsoft.Json.JsonConvert.SerializeObject(dt) + "--" + dt.Rows.Count, "Import");
if (dt.Rows.Count > 3)
{
var firstRow = dt.Rows[1]; //第一行是检查人数据
DateTime nowTime = DateTime.Now;
for (int i = 3; i < dt.Rows.Count; i++)
{
CarUseCheckRegistration entity = new CarUseCheckRegistration()
{
carName = dt.Rows[i][0].ToString(),
brand = dt.Rows[i][1].ToString(),
linkMan = dt.Rows[i][2].ToString(),
linkTel = dt.Rows[i][3].ToString(),
company = dt.Rows[i][4].ToString(),
terminal = dt.Rows[i][5].ToString(),
endTime = dt.Rows[i][6].ToString(),
isUsually = dt.Rows[i][7].ToString(),
isRegularPark = dt.Rows[i][8].ToString(),
remark = dt.Rows[i][9].ToString(),
status = 1,
createtime = nowTime,
};
//保存
BLL_PublicCar.SaveCarUseCheckRegistration(entity);
} ImageInfo imageInfo = new ImageInfo()
{
ClassId = 520,
Title = firstRow[3] + "",
Content = firstRow[1] + "",
};
using (SiteCmsDataContext db = new SiteCmsDataContext())
{
var temp = db.ImageInfo.Where(w => w.ClassId == imageInfo.ClassId).FirstOrDefault();
if (temp == null)
{
db.ImageInfo.InsertOnSubmit(imageInfo);
db.SubmitChanges();
}
else
{
if (imageInfo.Title.IsNotNullOrEmpty())
{
temp.Title = imageInfo.Title;
}
if (imageInfo.Content.IsNotNullOrEmpty())
{
temp.Content = imageInfo.Title;
}
temp.ClassId = imageInfo.ClassId;
db.SubmitChanges();
}
}
}
}
return result;
} public DataTable ExcelToDataTable(string strExcelFileName)
{
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataSet ds = new DataSet();
OleDbDataAdapter adapter = new OleDbDataAdapter("select * from [" + GetExcelFirstTableName(strExcelFileName) + "]", strConn);
adapter.Fill(ds);
conn.Close();
return ds.Tables[0];
} public string GetExcelFirstTableName(string excelFileName)
{
string tableName = null;
if (File.Exists(excelFileName))
{
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=\"Excel 8.0\";Data Source=" + excelFileName))
{
conn.Open();
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
tableName = dt.Rows[0][2].ToString().Trim();
}
}
return tableName;
} public bool IsReusable
{
get
{
return false;
}
}
}
未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。(C# EXCEL导入demo)的更多相关文章
- .NET读取Excel数据,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
解决.NET读取Excel数据时,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序的操作: 1. 检查本机是否安装Office Access,如果未安装去去h ...
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序
这种错误的可能性有几种,比如: 1.没有安装数据访问组件,需要安装相应版本的数据访问组件: 2.没有安装相应版本的Office客户端,需要安装相应版本的Office客户端: 3.Microsoft.J ...
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序 解决方法
最近在搞asp.net.今天在做数据库操作的时候,老发生错误,还以为是自己代码有问题,检查了好久都发现错误. 错误提示: 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程 ...
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法
一.未在本地计算机上注册“microsoft.ACE.oledb.4.0”提供程序 http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c ...
- 未在本地计算机上注册"microsoft.ACE.oledb.12.0"提供程序解决办法
错误信息:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序. 解决办法: 去http://download.microsoft.com/download/7/0/3/7 ...
- 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。
笔记本装的是windows 7旗舰版64位系统,使用的是MS Office 2007(Microsoft.ACE.OLEDB.12.0,32位程序),开发用的是Visual Studio 2010,我 ...
- c#操作Excel时,抛出异常:“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”
我们开发环境下,使用excel导入数据到数据库中,编译的软件起初是x86 方式,起初并未发现什么问题,一切很正常: 程序该进的过程: 后来导入文件一次就要读取几百G的数据导入数据库中,使用编译的X86 ...
- 未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序(Oledb)
解决访问Excel数据源时出现 未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序1.确保安装了Microsoft.ACE.OLEDB.12.0驱动 http://downl ...
- 未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序
运行时出现了错误,提示未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序. 这个问题的原因是64位PC上安装了Office的32位版本,所以Micro ...
- 【.net】未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法
#错误描述: 在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错: “未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序” # ...
随机推荐
- day25 前端
https://www.dcloud.io/hbuilderx.html 下载HbuilderX,直接解压缩双击打开 html5 <!DOCTYPE html><!-- 文档类型,声 ...
- day09 常用工具类&包装类&集合——List、Set
day09 常用工具类 java.lang.Math数值运算 基本数值运算,如初等函数.对数.平方根和三角函数 //最大最小值 Math.max(12, 21); Math.min(2, 3); // ...
- Datawhale组队学习_Task02:详读西瓜书+南瓜书第3章
第3章 线性模型 家人们又来吃瓜了! 3.1 基本形式 线性模型的本质是通过一个所有属性的线性组合进行预测的函数,即 $\mathcal{f(x)=w_1x_1+w_2x_2+...+w_dx_d+b ...
- SpringCloud Alibaba(七) - JWT(JSON Web Token)
原文链接: JWT详解:https://blog.csdn.net/weixin_45070175/article/details/118559272 1.什么是JWT 通俗地说,JWT的本质就是一个 ...
- Semaphore信号量源码解析(基于jdk11)
目录 1.Semaphore信号量源码解析(基于jdk11) 1.1 Semaphore概述 1.2 Semaphore的原理 1.2.1 基本结构(jdk11) 1.2.2 可中断获取信号量 1.2 ...
- include指令和include动作的区别
include指令和<jsp:include>动作标识的区别 1.include指令通过file属性指定被包含的文件,并且file属性不支持任何表达式: <jsp:include&g ...
- 何为GUI???
1.GUI是什么–简介 GUI的全称为Graphical User Interface,图形化界面或图形用户接口,是指采用图形方式显示的计算机操作环境用户接口.与早期计算机使用的命令行界面相比,图形界 ...
- 用友开发者中心全新升级,YonBuilder移动开发入门指南
听说用友新上线了全新的开发者中心,有YonBuilder应用开发,集成开发.数据开发.智能与自动化.DevOps 等板块,本人作为用户老客户,对其中的移动开发比较感兴趣,本文重点讲解其中的移动开发平台 ...
- [编程基础] C++多线程入门10-packaged_task示例
原始C++标准仅支持单线程编程.新的C++标准(称为C++11或C++0x)于2011年发布.在C++11中,引入了新的线程库.因此运行本文程序需要C++至少符合C++11标准. 文章目录 10 pa ...
- win10 WSL2问题解决“WslRegisterDistribution failed with error: 0x800701bc”
win10安装wsl过程报错信息如下: 造成该问题的原因是WSL版本由原来的WSL1升级到WSL2后,内核没有升级,前往微软WSL官网下载安装适用于 x64 计算机的最新 WSL2 Linux 内核更 ...