这个操作的大致步骤是把本地文件存入到服务器端,
然后再读取服务端的文件并且使用NPOI这个第三方的插件去读取文件导入到数据库批量插入
需要注意的是,前端需要使用form包裹type=file的文件标签,并且文件标签需要有name属性,否则后台无法获取,在一个就是form需要含有enctype="multipart/form-data"属性,
对于input过滤其他非excel的文件,可以添加如下属性:accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"

HTML:

<form id="form" class="form-horizontal" enctype="multipart/form-data">
<div class="form-group">
<label for="txt_signInTitleOfDetail">选择文件</label>
<input type="file" name="file" class="form-control" accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
</div>
<input type="button" class="btn btn-primary" value="保存" id="btn_Save">
</form>

JS:

//这里的HTMLFormElement是强制转换的写法,因为是typescript所以不强制转换的话编译不能通过
var myForm = <HTMLFormElement>$('#你的要提交的form的ID')[0];
var formData = new FormData(myForm);//和后台联通让后台接受form的系统类
//获取文件名
var filePath = $('#txt_upload').val();
var fileName = filePath.substring(filePath.lastIndexOf('\\') + 1);
formData.append('fileName', fileName);
$('#waring').text("操作中,请等待");
$.ajax({
url: '/Home/后台的导入方法',
type: 'POST',
cache: false,
data: formData,
processData: false,
contentType: false
}).done(function (res) {
//批量导入后刷新页面
$('#waring').text(res.message);
}).fail(function (res) {
$('#waring').text("导入数据失败");
});

后台:

public JsonResult 你的方法()
{
var httpRequest = HttpContext.Request; string fileName = string.Format("{0}_{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), httpRequest.Form["fileName"].ToString());
//文件夹
string dir = Server.MapPath("~/temp");
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
} //文件全路径,获取了本地的文件路径
string filePath = Path.Combine(dir, fileName); foreach (string key in httpRequest.Files) // 文件键
{
var postedFile = httpRequest.Files[key]; // 获取文件键对应的文件对象
postedFile.SaveAs(filePath);
}
//// 读取Excel文件,导入数据
ExcelToDB(filePath); return Json(new
{
status = true,
message = "导入成功!"
});
} private void ExcelToDB(string filePath)
{
FileStream fs = null;
IWorkbook workbook = null;
ISheet sheet = null;
IRow row = null;
//ICell cell = null;
int startRow = ;
try
{
using (fs = System.IO.File.OpenRead(filePath))
{
// 2007版本
if (filePath.IndexOf(".xlsx") > )
workbook = new XSSFWorkbook(fs);
// 2003版本
else if (filePath.IndexOf(".xls") > )
workbook = new HSSFWorkbook(fs); if (workbook != null)
{
workbook.MissingCellPolicy = MissingCellPolicy.RETURN_BLANK_AS_NULL;
//sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet
sheet = workbook.GetSheet("Sheet1"); if (sheet != null)
{
int rowCount = sheet.LastRowNum;//总行数
if (rowCount > )
{
IRow firstRow = sheet.GetRow();//第一行
int cellCount = firstRow.LastCellNum;//列数 WriteData(sheet, row, startRow, rowCount);
}
else
{
throw new Exception("无信息");
}
}
else
{
throw new Exception("没有找到Sheet1");
}
}
else
{
throw new Exception("加载Excel失败");
}
} }
catch (Exception ex)
{
if (fs != null)
{
fs.Close();
} throw ex;
}
} /// <summary>
/// 从excel写入登记表
/// </summary>
/// <param name="sheet"></param>
/// <param name="row"></param>
/// <param name="startRow"></param>
/// <param name="rowCount"></param>
/// <param name="isCover"></param>
private void WriteData(ISheet sheet, IRow row, int startRow, int rowCount)
{
List<你的插入类> 你的插入类 = new List<你的插入类>();
string Title = string.Empty;
string Time = string.Empty;
string EndTime = string.Empty;
string Range = string.Empty;
//填充行
for (int i = startRow; i <= rowCount; ++i)
{
row = sheet.GetRow(i);
if (row == null) continue; try
{
//读取一行每个字段值
Title = row.GetCell(, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString(); //
Time = row.GetCell(, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString();//
EndTime = row.GetCell(, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString();//
taskType = ;//
signInRange = row.GetCell(, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString();// //没有信息,直接跳过
if (string.IsNullOrEmpty(Title) || string.IsNullOrEmpty(Time) || string.IsNullOrEmpty(EndTime))
{
continue;
} info item = new info()
{
读取的行在这里和实体类赋值
}; list.Add(item);
}
catch (Exception ex)
{ }
} //批量插入
Dal.BatchInsert(list);
}

excel 在web导入到数据库的操作方法的更多相关文章

  1. 把Excel的数据导入到数据库

    将Excel作为数据源,将数据导入数据库,是SSIS的一个简单的应用,下图是示例Excel,数据列是code和name 第一部分,Excel中的数据类型是数值类型 1,使用SSDT创建一个packag ...

  2. Excel表格数据导入Mysql数据库的方法

    1.使用Navicat 连接需要导入的数据库. 2.excel 列的名字最好和数据库的名字一致,便于我们直观的查看好理解.   第一步,先创建好表,和准备好对应的excel文件.在Navicat 中选 ...

  3. java读取excel文件数据导入mysql数据库

    这是我来公司的第二周的一个小学习任务,下面是实现过程: 1.建立maven工程(方便管理jar包) 在pom.xml导入 jxl,mysql-connector 依赖 可以在maven仓库搜索 2.建 ...

  4. Excel表格数据导入MySQL数据库

    有时候项目需要将存在表格中的批量数据导入数据库,最近自己正好碰到了,总结一下: 1.将excel表格另存为.csv格式文件,excel本身的.xlsx格式导入时可能会报错,为了避免不必要的格式错误,直 ...

  5. ASP.NET MVC NPOI导入Excel DataTable批量导入到数据库

    使用NPOI导入Excel 首先在MVC项目中导入NPOI 查询NPOI安装,排序依据,选择:最高下载量,选择第一个. 在控制器中创建ExcelController 在Index视图中写入代码: @u ...

  6. Java版将EXCEL表数据导入到数据库中

    1.采用第三方控件JXL实现 try { //实例化一个工作簿对象 Workbook workBook=Workbook.getWorkbook(new File("F://qzlx.xls ...

  7. C#将Excel数据表导入SQL数据库的两种方法(转)

    最近用写个winform程序想用excel 文件导入数据库中,网上寻求办法,找到了这个经过尝试可以使用. 方法一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环 ...

  8. 将excel的数据导入到数据库后都乱码了是怎么回事

    将excel内容首先保存成csv格式,然后在MySQL数据库中导入,结果汉字出现了乱码. 解决过程: 1.csv文件以txt形式打开,另存为,选择utf-8编码. 2.数据库,设置,collation ...

  9. C#将Excel数据表导入SQL数据库的两种方法

    最近用写个winform程序想用excel 文件导入数据库中,网上寻求办法,找到了这个经过尝试可以使用. 方法一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环 ...

随机推荐

  1. MySql的备份还原

    备份数据是数据库管理最常用的操作.为了保证数据库中数据的安全,数据管理员需要定期进行数据备份.一旦数据库遭到破坏,便可通过备份的文件来还原数据库.因此,数据备份是一项很重要的工作. 数据备份 使用my ...

  2. Java入门系列-14-深入类和对象

    这篇文章用大量的代码帮你搞懂:值传递和引用传递.构造方法.方法重载.static关键字的使用 方法参数传递-值传递和引用传递 1.值传递 敲一敲: /** * 使用方法交换两个变量的值 * @auth ...

  3. Android中BitmapFactory.Options详解

    在Android中,BitmapFactory相信大家都很熟悉了,这个类里面的所有方法都是用来解码创建一个Bitmap,其中有一个重要的类是Options,此类用于解码Bitmap时的各种参数控制,那 ...

  4. 解决github无法访问的问题

     gitbub是外网,经常会遇到访问不了的问题,并且有时能访问也网速好慢. 解决这个问题的方法是 更改hosts文件,地址: C:\Windows\System32\Drivers\etc 我在hos ...

  5. Android加载大图片实例详解

    摘要:在Android下采用ARGB表示颜色,每个像素占四个字节.其加载图片申请空间时与图片的实际大小没有关系,与像素有关系.

  6. 1.JDBC基础

    JDBC全称Java Database Connectivity,即Java数据库连接.(以下以MySQL为例,使用MySQL语句) Sun公司提供了标准JDBC API接口,没有实现具体类.各个数据 ...

  7. 学习笔记2_Day09_servlet的细节

    Servlet细节 l  不要在Servlet中创建成员!创建局部变量即可! l  可以创建无状态成员! l  可以创建有状态的成员,但状态必须为只读的! 1 Servlet与线程安全 因为一个类型的 ...

  8. UNION ALL 视图 'ImprotHIS2012.dbo.ImportHISData' 不可更新,因为没有找到分区依据列。 Severity 16 State 12

    -- 3 更正措施,使约束check一次 Alter Table ImprotHIS_Bak_2011.dbo.ImportHISData with check Check Constraint al ...

  9. tp3.2开启允许跨域

    在入口文件<?PHP下加上 header('Access-Control-Allow-Origin:*');header("Access-Control-Allow-Headers: ...

  10. html和css入门 (三)

    文本样式 color 文本颜色 属性名 color 属性值 预定义的颜色名 | 十六进制值的颜色值 | RGB颜色值 默认值 依赖用户代理 描述 设置文本的颜色 direction 文本方向( 属性名 ...