Excel 导入导出使用开源项目 NPOI 进行处理,以下把用户导入和用户导出作为示例。 Excel 导入 Excel 导入分两步,第一步把需要导入的文件通过 FileController 上传到后台,第二步把第一步返回 的文件相对地址传给导入处理方法。

Excel导入

  1.前端写法

<script type="text/javascript">
    var filePath = undefined;
    $(document).ready(function () {
        $("#isOverride").ysCheckBox({
            data: [{ Key: '1', Value: '是否更新已经存在的用户数据' }]
        });

        $("#importFile").fileinput({
            language: 'zh',
            'uploadUrl': '@Url.Content("~/File/UploadFile")' + '?fileModule=@UploadFileType.Import.ParseToInt()',
            showPreview: false,
            allowedFileExtensions: ['xls', 'xlsx']
        }).on("fileuploaded", function (event, data) {
            var obj = data.response;
            if (obj.Tag == 1) {
                filePath = obj.Data;
            }
            else {
                filePath = '';
            }
        });
    });

    function saveForm(index) {
        if (!filePath) {
            ys.alertError('文件未上传或者上传失败');
            return;
        }

        var postData =$("#form").getWebControls();
        postData.FilePath = filePath;
        ys.ajax({
            url: '@Url.Content("~/OrganizationManage/User/ImportUserJson")',
            type: "post",
            data: postData,
            success: function (obj) {
                if (obj.Tag == 1) {
                    ys.msgSuccess('导入成功');
                    parent.searchGrid();
                    parent.layer.close(index);
                }
                else {
                    ys.msgError(obj.Message);
                }
            }
        });
    }
</script>

   2.后端写法

[HttpPost]
        public async Task<IActionResult> ImportUserJson(ImportParam param)
        {
            List<UserEntity> list = new ExcelHelper<UserEntity>().ImportFromExcel(param.FilePath);
            TData obj = await userBLL.ImportUser(param, list);
            return Json(obj);
        }

方法ImportFromExcel 会根据传入的 Excel 文件相对路径,找到文件的绝对路径。Excel 的第一行是标题, 第二行是列名,列名可以是实体类的属性名称或者实体类属性名称的Description 描述。

Excel导出

Excel 导出可以根据界面的搜索条件,后台设置需要导出的列,导出所有符合条件的记录。

  1.前端写法

<a id="btnExport" class="btn btn-warning" onclick="exportForm()"><i class="fa fa-download"></i> 导出</a>

    function exportForm() {
        var url = '@Url.Content("~/OrganizationManage/User/ExportUserJson")';
        var postData = $("#searchDiv").getWebControls();
        ys.exportExcel(url, postData);
    }

   2.后端写法

[HttpPost]
        public async Task<IActionResult> ExportUserJson(UserListParam param)
        {
            TData<string> obj = new();
            TData<List<UserEntity>> userObj = await userBLL.GetList(param);
            if (userObj.Tag == 1)
            {
                string file = new ExcelHelper<UserEntity>().ExportToExcel("用户列表.xls",
                                                                          "用户列表",
                                                                          userObj.Data,
                                                                          new string[] { "UserName", "RealName", "Gender", "Mobile", "Email" });
                obj.Data = file;
                obj.Tag = 1;
            }
            return Json(obj);
        }

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐