新人求助,.NET MVC中如何利用npoi读取excel,导入数据库中
这个的话,实际上就是先在服务器端生成该Excel文件,然后使用下载功能进行下载。下载方法不止一种,那么如何生成文件并返回该路径呢?实际上,还是流来实现的(包括生成PDF、TXT文档都是这样做的)。我一般的做法是,在服务器端生成临时文件,然后下载就可以了。具体部分代码如下:
var savePath = Path.Combine(Path.GetTempPath(), fileName);
FileStream fs = new FileStream(savePath, FileMode.Create);
workbook.Write(fs);
fs.Close();
return savePath;
这个是我从我项目中提取的部分代码,fileName就是文件名(传入的时候记得带后缀名.xls),workbook就是我们用NPOI创建的文档,写入fs流中。至于怎么用这个savePath,我的用法是在控制器要下载的地方加入如下代码:
if (isExport)
{
string date = DateTime.Now.ToChineseDate() + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second;
var desFilePath = showList.ExportExcel("拖运记录输入查询资料" + date + ".xls", "拖运记录输入查询");
var url = Url.Action("DownloadFile", "Utils", new { @fullFilePath = desFilePath });
return Json(new { success = true, url = url });
}
首先判断是不是下载,我通常将查询和下载做在一个控制器中,因为查询和下载很多地方可以共用。关键是desFilePath实质就是第一部分代码return savePath。而这个Url.Action这一部分就是另外一个单独的下载控制器,并把这个路径传过去,得到的url到客户端再执行。
前端使用Ajax即可。通用下载JS代码如下:
Application.exportHandler = function (form) {
var link = $(this);
var url = link.attr('href');
$.post(url, form.serialize() + "&isExport=true")
.done(function (json) {
json = json || {};
if (json.success) {
$("body").append("<iframe src='" + json.url + "' style='display: none;' ></iframe>");
} else if (json.errors) {
Application.fancyAlert("汇出发生错误!");
}
})
.error(function () {
Application.fancyAlert("汇出发生错误!");
});
};
当点击下载的时候,就可以执行这段JS,Application是自定义的“类”,参数就是一个form(form不必我解释是什么吧)。控制器返回的url就是代码中的json.url。方法不止这一种,至于怎么下载文档,网上有很多,你可以自己去找找看。