fzhilong

导出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 = "数据更新失败!" });
        }

  

分类:

技术点:

相关文章: