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)的更多相关文章

  1. .NET读取Excel数据,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序

    解决.NET读取Excel数据时,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序的操作: 1. 检查本机是否安装Office Access,如果未安装去去h ...

  2. 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序

    这种错误的可能性有几种,比如: 1.没有安装数据访问组件,需要安装相应版本的数据访问组件: 2.没有安装相应版本的Office客户端,需要安装相应版本的Office客户端: 3.Microsoft.J ...

  3. 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序 解决方法

    最近在搞asp.net.今天在做数据库操作的时候,老发生错误,还以为是自己代码有问题,检查了好久都发现错误. 错误提示: 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程 ...

  4. 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法

    一.未在本地计算机上注册“microsoft.ACE.oledb.4.0”提供程序 http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c ...

  5. 未在本地计算机上注册"microsoft.ACE.oledb.12.0"提供程序解决办法

    错误信息:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序. 解决办法: 去http://download.microsoft.com/download/7/0/3/7 ...

  6. 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。

    笔记本装的是windows 7旗舰版64位系统,使用的是MS Office 2007(Microsoft.ACE.OLEDB.12.0,32位程序),开发用的是Visual Studio 2010,我 ...

  7. c#操作Excel时,抛出异常:“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”

    我们开发环境下,使用excel导入数据到数据库中,编译的软件起初是x86 方式,起初并未发现什么问题,一切很正常: 程序该进的过程: 后来导入文件一次就要读取几百G的数据导入数据库中,使用编译的X86 ...

  8. 未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序(Oledb)

    解决访问Excel数据源时出现 未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序1.确保安装了Microsoft.ACE.OLEDB.12.0驱动 http://downl ...

  9. 未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序

    运行时出现了错误,提示未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序. 这个问题的原因是64位PC上安装了Office的32位版本,所以Micro ...

  10. 【.net】未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法

    #错误描述: 在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错: “未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序” # ...

随机推荐

  1. 【Linux】/proc/stat解析

    一. 概述 1.1 CPU时间 cpu指标 含义user 用户态时间nice 用户态时间(低优先级,nice>0)system 内核态时间idle 空闲时间iowait I/O等待时间irq 硬 ...

  2. .net core 中 WebApiClientCore的使用

    WebApiClient 接口注册与选项 1 配置文件中配置HttpApiOptions选项 配置示例 "IUserApi": { "HttpHost": &q ...

  3. JavaScript:对象:如何复制一个对象?浅拷贝与深拷贝

    回顾一下,我们对传参的讨论,对象的传参是引用传递,我们传递的是对象数据所在的内存地址: 那么无论我们怎么去赋值,所有变量指向的都是同一块内存: 如上图所示,无论我去使用哪个变量去操作对象的属性,改变的 ...

  4. [LeetCode]螺旋矩阵

    题目 代码 class Solution { public: vector<int> spiralOrder(vector<vector<int>>& ma ...

  5. 《Effective C++》模版与泛型编程

    Item41:了解隐式接口和编译期多态. 纵使你从未使用过templates,应该不陌生"运行期多态"和"编译期多态"之间的差异.因为它类似于"哪一个 ...

  6. 使用Spring MVC框架进行前台页面跳转时,跳转到的新页面中文显示乱码的问题解决

    使用Spring MVC框架进行前台页面跳转时,跳转到的新页面中文显示乱码的问题解决   摘要:我昨天花了一天时间学习了SSM项目搭建,却在最终的编码问题上拉胯了,在使用Spring MVC框架进行前 ...

  7. (14)go-micro微服务服务层Handle开发

    目录 一 Handle层开发功能说明 需要完成的服务开发功能: 从哪找需要开发的功能 二 代码编写 三 最后 一 Handle层开发功能说明 需要完成的服务开发功能: 登录 注册 查询用户信息 修改信 ...

  8. 数据预处理时为什么要使用OneHot编码?

    什么是LabelEncoder(整数编码) 整数编码 将一列文本数据转化成数值,即列中的每一个特征都通过一个整数来表示.例如,[red, blue, red, yellow] = [0,2,0,1]. ...

  9. 基于windows系统使用GNVM进行node切换版本

    GNVM是什么? GNVM 是一个简单的 Windows 下 Node.js 多版本管理器,类似的 nvm nvmw nodist . 安装 进入官网,下载你所需要的包,直达链接 下载完成 放到我们的 ...

  10. 实操记录之-----Ant Design of Vue 增强版动态合并单元格,自动根据数据进行合并,可自定义横纵向合并

    前几天搞了个简易版的动态合并单元格 但是需求有变化,就只能稍微改改了~~ 欢迎路过的各位大佬指出我代码的问题~~~~ 另: 代码执行效率不是很高,如果需要大量渲染更多数据建议可以直接使用原生 < ...