导出excel也就是下载一个excel的文件
首先我们先定义一个方法
public MemoryStream ExportDatasetToExcel(List<MemberInternalTest> list)
{
try
{
//文件流对象
//FileStream file = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
//打开Excel对象,这个是识别excel03~excel07的,如果你想让导出的是07以后的 可以使用XSSFWorkbook,
//我测试的时候发现了很多问题,所有还是用03-07的吧
IWorkbook workbook = new HSSFWorkbook();
//Excel的Sheet对象
ISheet sheet = workbook.CreateSheet("sheet1");
//使用NPOI操作Excel表
IRow row = sheet.CreateRow(0);
int count = 0;
for (int i = 0; i < 3; i++) //生成sheet第一行列名
{
ICell cell = row.CreateCell(count++);
switch (i)
{
case 0:
cell.SetCellValue("昵称");
break;
case 1:
cell.SetCellValue("LiveId");
break;
case 2:
cell.SetCellValue("提交时间");
break;
}
}
//将数据导入到excel表中
for (int i = 0; i < list.Count; i++)
{
IRow rows = sheet.CreateRow(i + 1);
ICell cell1 = rows.CreateCell(0);
cell1.SetCellValue(list[i].NickName);
ICell cell2 = rows.CreateCell(1);
cell2.SetCellValue(list[i].LiveId);
ICell cell3 = rows.CreateCell(2);
cell3.SetCellValue(list[i].ApplyTime.ToLocalTime().ToString("yyyy-MM-dd"));
}
//保存excel文档
sheet.ForceFormulaRecalculation = true;
MemoryStream stream = new MemoryStream();
workbook.Write(stream);
return stream;
}
catch
{
return new MemoryStream();
}
}
上面的方法可以接收一个list数组,然后将list数组装填到MemoryStream中
然后我们在action中进行调用
public ActionResult OutPutMemberByStartTime(Guid appid, DateTime startTime)
{
var list = MemberInternalTestService.Instance.SelectMembersByAppIdAndDate(appid, startTime.ToUniversalTime(),null);
MemoryStream stream = ExportDatasetToExcel(list);
stream.Seek(0, SeekOrigin.Begin);
var result = new FileStreamResult(stream, "application/vnd.ms-excel")
{
FileDownloadName = startTime.ToString("MMdd") + ".xls"
};
return result;
}
不论你前台是异步也好,还是直接调转的调用,这里都会下载一个xls的文件
导入excel
<div id="selectfilter">
<span id="uploadify"></span>
<script src="~/Areas/Dashboard/uploadify/jquery.uploadify.min.js"></script>
<script type="text/javascript">
$(function () {
$(\'#uploadify\').uploadify({
uploader: \'/BetaTestsGame/ImportMember\', // 服务器端处理地址
swf: \'/Areas/Dashboard/uploadify/uploadify.swf\', // 上传使用的 Flash
width: 140, // 按钮的宽度
height: 30, // 按钮的高度
buttonText: "导入通过的内测名单", // 按钮上的文字
buttonCursor: \'hand\', // 按钮的鼠标图标
fileObjName: \'filedata\', // 上传参数名称
method: \'POST\',
fileTypeExts: "*.xlsx", // 扩展名
fileTypeDesc: "请选择 xlsx 文件", // 文件说明
auto: true, // 选择之后,自动开始上传
multi: true, // 是否支持同时上传多个文件
queueSizeLimit: 2, // 允许多文件上传的时候,同时上传文件的个数
onUploadSuccess: function (file, data, response) {
var result = JSON.parse(data);
alert(result.outcome+"请刷新页面查看结果");
}
});
});
</script>
</div>
上面的这一段时html页面中的内容
接下来我们写服务器端的
public ActionResult ImportMember(HttpPostedFileBase filedata)
{
// 如果没有上传文件
if (filedata == null ||
string.IsNullOrEmpty(filedata.FileName) ||
filedata.ContentLength == 0)
{
return HttpNotFound();
}
//操作Exel开始
List<string> list = new List<string>();
using (Stream fs = filedata.InputStream) //打开myxls.xlsx文件
{
//这里也可是使用HSSFWorkbook来实现读取excel03-07的xls文件
IWorkbook wk = new XSSFWorkbook(fs); //把xlsx文件中的数据写入wk中
for (int i = 0; i < wk.NumberOfSheets; i++) //NumberOfSheets是myxls.xls中总共的表数
{
ISheet sheet = wk.GetSheetAt(i); //读取当前表数据
for (int j = 1; j <= sheet.LastRowNum; j++) //LastRowNum 是当前表的总行数
{
IRow row = sheet.GetRow(j); //读取当前行数据
if (row != null)
{
for (int k = 0; k <= row.LastCellNum; k++) //LastCellNum 是当前行的总列数
{
ICell cell = row.GetCell(k); //当前表格
if (cell != null)
{
list.Add(cell.ToString());
}
}
}
}
}
}
bool result = MemberInternalTestService.Instance.UpdateMemberInternaleTestState(list);
if (result)
{
return Json(new { outcome = "数据更新成功!" });
}
return Json(new { outcome = "数据更新失败!" });
}