1.序言
这篇文章就是交大家如何用C#向数据库中导入excel文件中的内容,先说了一下我们需要用到的工具或者代码,这次我们用layui的前端上传控件,想要导入excel文件,首先要能上传文件到后台,然后用npoi读取excel文件,好了,开始项目实战。
2.新建一个web项目
首先我们先要新建一个web项目,我这里就选择MVC了,然后我就打算在页面上放一个按钮。别的暂时不需要。
image.png
新建好项目之后,先把需要的东西加进去,layui和npoi,layui的话,直接去官网下一个文件夹,直接放到项目里就行。然后在NuGet里添加npoi和jquery,如图所示。
TIM截图20180726173300.png
安装好npoi之后,我们就开始添加页面,一个index.html页面,一个接收上传文件的UploadController.cs后台文件,
都准备好之后就可以开始写代码了。
3.写代码
1、首先是index.html页面内容,先引入layui的js文件,然后写js,完整代码如下图。
@{
ViewBag.Title = "Home Page";
}
<link href="~/Scripts/layui/plugins/layui/css/layui.css" rel="stylesheet" />
<script src="~/Scripts/jquery-3.3.1.min.js"></script>
<script src="~/Scripts/layui/plugins/layui/layui.all.js"></script>
<div class="jumbotron">
<input type="button" name="name" id="Upload" value="选择文件" class="layui-btn" />
</div>
<script>
layui.use('upload', function () {
var upload = layui.upload;
//指定允许上传的文件类型
upload.render({
elem: '#Upload'
, url: '/Upload/ImportExcel'
, exts: 'xlsx|xls' //普通文件
, done: function (res) {
console.log(res)
}
});
})
</script>
Index.cshtml页面的代码还是比较简单的,放一个按钮,然后把layui的上传代码加上去就行了,注意上传的url。
2、接着是UploadController.cs的代码,先看读取excel的关键代码
XSSFWorkbook workBook = new XSSFWorkbook(new FileStream(Path.GetFullPath(save_path), FileMode.Open));
XSSFSheet sheet = (XSSFSheet)workBook.GetSheetAt(0);
int rowCount = sheet.LastRowNum;
//开始添加
for (int j = 0; j < rowCount; j++)
{
string Id = Guid.NewGuid().ToString();
string BookName = sheet.GetRow(j + 1).GetCell(0).ToString().Trim().Replace("\n", ";");
string BookPrice = sheet.GetRow(j + 1).GetCell(1).ToString().Trim().Replace("\n", ";");
string BookCount = sheet.GetRow(j + 1).GetCell(2).ToString().Trim().Replace("\n", ";");
}
简单的读取excel文件流程就是,首先读取上传过来的excel文件,然后读取第一个sheet,GetSheet(0) 就是指的第一个sheet,然后获取当前sheet的行数,一共有多少行数据,然后就是循环去一个一个找每一行的每一个单元格的值,这样就可以读取到excel文件文件的值了,放个图,表示测试正确。我先自己新建了一个excel文件,里面简单写上一行数据。
image.png
然后执行代码。点击选择文件,先在后台打个断点。
image.png
选择桌面上的实例excel文件,
image.png
我先上传之前在C#代码里加了个断点,可以看到执行到读取excel的代码时候,已经读取到值了。然后可以在for循环里面写上sql语句,向数据库中插入数据了。
image.png
完整代码如下图。
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using System;
using System.IO;
using System.Text;
using System.Web;
using System.Web.Mvc;
namespace WebApplication1.Controllers
{
public class UploadController : Controller
{
public ActionResult ImportExcel() //导入excel文件信息
{
HttpFileCollectionBase file = Request.Files;//获取选中文件
if (file.Count > 0)
{
string _guid = DateTime.Now.ToString("yyyy年MM月dd日") + "-" + Guid.NewGuid().ToString().ToUpper().Replace("-", "");
string fileName = file[0].FileName;
Stream fs = file[0].InputStream;
if (file != null && file[0].ContentLength > 0)
{
using (StreamReader sr = new StreamReader(fs, Encoding.UTF8))
{
string save_diretion = Server.MapPath("../upload/");
string save_path = save_diretion + _guid + "-" + fileName;
try
{
file[0].SaveAs(save_path);
string sql = "";
if (fileName.EndsWith(".xls") || fileName.EndsWith(".xlsx"))
{
XSSFWorkbook workBook = new XSSFWorkbook(new FileStream(Path.GetFullPath(save_path), FileMode.Open));
XSSFSheet sheet = (XSSFSheet)workBook.GetSheetAt(0);
int rowCount = sheet.LastRowNum;
//开始添加
for (int j = 0; j < rowCount; j++)
{
string Id = Guid.NewGuid().ToString();
string BookName = sheet.GetRow(j + 1).GetCell(0).ToString().Trim().Replace("\n", ";");
string BookPrice = sheet.GetRow(j + 1).GetCell(1).ToString().Trim().Replace("\n", ";");
string BookCount = sheet.GetRow(j + 1).GetCell(2).ToString().Trim().Replace("\n", ";");
}
}
}
catch (Exception e)
{
System.IO.File.Delete(save_path);
return Json(new
{
code = 0,
src = "",
name = "",
msg = "导入数据失败"
});
throw;
}
finally
{
}
}
}
}
return Json(new
{
code = 1,
src = "",
name = "",
msg = "导入数据成功"
});
}
}
}
好了简单的读取excel文件的代码就这么多,但是读取excel文件的时候,一定要记得判断单元格里面的数据格式,如果全部用ToString()的话,对于一些日期格式的数据会出现问题哦。
Study hard and make progress every day.
更多学习资料请关注"爱游戏爱编程"。
爱游戏爱编程.jpg