一、引言
C#操作excel的方法大概有这几种:
1、采用OleDB读取EXCEL文件,把EXCEL文件当做一个数据源来进行数据的读取操作
2、引用的com组件:Microsoft.Office.Interop.Excel.dll 读取EXCEL文件
3、将EXCEL文件转化成CSV(逗号分隔)的文件,用文件流读取(等价就是读取一个txt文本文件)
不过这些方法都比较老套了,现在很多都用NPOI进行开发。NPOI 是开源的 POI 项目的.NET版,可以用来读写Excel,Word,PPT文件。在处理Excel文件上,NPOI 可以同时兼容 xls 和 xlsx。官网提供了一份 Examples,给出了很多应用场景的例子,打包好的二进制文件类库,也仅有几MB,使用非常方便。
为啥使用它呢,优点:开源免费;不用安装office;不断更新团队强大。
ExcelHelper类放到最后了,可以直接使用==
二、WebAPI接受上传excel文件,并打开存入数据库(excel读取)
1、前台代码
用于上传文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="../lib/jquery/jquery-3.1.0.min.js"></script>
</head>
<body>
<label for="fileUpload">
选择文件
</label>
<br/>
<input id="fileUpload" type="file" multiple="multiple"/>
<input id="btnUploadFile" type="button" value="上传文件"/>
<hr/>s
<progress id="uploadprogress" max="100" value="0">0</progress>
<script>
$(function() {
$("#btnUploadFile").on("click", function () {
var data = new FormData();
var files = $("#fileUpload").get(0).files;
data.append("name", "xcy");
data.append("file", files[0]);
$.ajax({
type: "post",
url: "http://localhost:27110/Region/uploadFile",
contentType: false,
cache: false,
currentType: false,
processData: false,
data: data,
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.responseText);
alert(thrownError);
},
xhr: function () {
var xhr = new window.XMLHttpRequest();
//Download progress
xhr.addEventListener("progress", function (evt) {
console.log(evt.lengthComputable);
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
$("progress").val(evt.loaded);
}
}, false);
return xhr;
},
beforeSend: function () {
$('#loading').show();
},
complete: function () {
$("#loading").hide();
},
success: function (json) {
$("#data").html("data receieved");
}
});
});
});
</script>
</body>
</html>
2、后台WebAPI接收
controller类
/// <summary>
/// 读取上传文件,存入数据库
/// </summary>
/// <returns></returns>
[HttpPost]
public IHttpActionResult uploadFile()
{
HttpFileCollection files = HttpContext.Current.Request.Files;
RegionDAL regionDAL = new RegionDAL();
Callback callback = new Callback();
//
try
{
callback.status = 1;
callback.msg = "success";
callback.data = regionDAL.uploadFile(files);
}
catch (Exception e)
{
callback.status = 0;
callback.msg = e.Message;
}
return Ok(callback);
}
DAL类(这里存数据库的时候分段存的,每100条数据一存储;只存储了前两列的数据)
public object uploadFile(HttpFileCollection files)
{
string prepath = "C:/Users/xcy/Desktop/";
添加评估文件
string filename;
string savepath;
foreach (string key in files.AllKeys)
{
HttpPostedFile file = files[key];
//判断文件是否为空
if (file.ContentLength > 0)
{
filename = Guid.NewGuid().ToString() + "$" + file.FileName;
savepath = prepath + filename;
file.SaveAs(savepath);
HSSFWorkbook hssfworkbook;
using (FileStream filestream = new FileStream(savepath, FileMode.Open, FileAccess.Read))
{
hssfworkbook =