HAPkendoUI的Excle导出

本文介绍如何利用KendoUI实现从Excle导出数据的功能。主要步骤包括添加导出按钮、定义导出函数、处理数据转换以及设置Excel格式等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Excle导出上,HAP使用的kendoUI进行导出,简单步骤如下
1.添加导出按钮
 <span class="btn btn-primary pull-left" style="float:left;margin-right:5px;margin-left:5px;" data-bind="click:exportFunc"><@spring.message "hap.exportexcel"/></span>

 

 
 
2.在最上方写回调函数exportFunc
<script type="text/javascript">
    var viewModel = Hap.createGridViewModel("#grid", {
        model: {},
        newResource: function (e) {
            var win = $('#newWin').kendoWindow({
                iframe: true,
                draggable: false,
                content: '${base.contextPath}/demo/demo_bank_branch.html',
            }).data('kendoWindow');
            win.title('<@spring.message "hap.new"/>');
            win.maximize().open();
        },
        //导出EXCEL的回调函数
        exportFunc : function (e) {
            //获取grid数据
            var originData = dataSource.data();
            excelData(originData);
        },
    });
</script>

 

 
3.在最下方的script标签中写excelData方法

 
 
//导出
    function excelData(originData) {
        /**
         * 1.修改源数据
         * 修改源数据中需要转换的值,如快码字段("Y"->"是","N"->"否"),时间格式等
         */
        if (originData.length > 0){ //如果有选中数据则导出数据
            for (var i in originData){
                //时间转换
                originData[i].expirationDate = kendo.toString(kendo.parseDate(originData[i].expirationDate), "yyyy-MM-dd");
                //银行类型转换
                var v = originData[i].bankType;
                $.each(bankTypeData, function (i, n) {
                    if ((n.value || '').toLowerCase() == (v || '').toLowerCase()) {
                        v = n.meaning;
                        originData[i].bankType  =v;
                    }
                })
            }
        }else {
            return;
        }

        /**
         * 2.设置excel格式与内容
         */

        /**
         * 2.1设置excel表格标题
         */
        var excelTitles = ['<@spring.message "简称"/>','<@spring.message "名称"/>','<@spring.message "类型"/>','<@spring.message "描述"/>','<@spring.message "截止时间"/>','<@spring.message "备注"/>'];
        //标题数组
        var excelHeader = [];
        for(var i in excelTitles){
            excelHeader.push({
                value: excelTitles[i],                    //标题文字
                background: '#92cddc',                 //标题背景颜色
                color: '#000',                         //标题字体颜色
                textAlign: 'center',                     //文字水平对齐方式
                verticalAlign: 'center',                  //文字竖直对齐方式
                borderLeft: {size: 1 ,color:"#ddd"},       //左边框大小及颜色
                borderRight: {size: 1 ,color:"#ddd"},      //右边框大小及颜色
                borderBottom: { size: 1 ,color:"#ddd"},   //下边框大小及颜色
                borderTop: { size: 1 ,color:"#ddd"},      //上边框大小及颜色
            })
        }

        /**
         * 2.2设置最终导出数据
         */
            //最终导出数据
        var excelData = [];
        //2.2.1将标题添加至导出数据
        excelData.push({
            cells: excelHeader
        });
        //2.2.2将源数据添加至导出数据
        for(var i=0;i < originData.length;i++){
            excelData.push({
                cells: [
                    { value: originData[i].bankCode, borderBottom: { size: 1 ,color:"#ddd"},borderRight: { size: 1 ,color:"#ddd"},verticalAlign: 'center', textAlign: 'center',background: '#ff9' },
                    { value: originData[i].bankName, verticalAlign: 'center', textAlign: 'center'},
                    { value: originData[i].bankType, verticalAlign: 'center', textAlign: 'center'},
                    { value: originData[i].description, verticalAlign: 'center', textAlign: 'center'},
                    { value: originData[i].expirationDate, verticalAlign: 'center', textAlign: 'center'},
                    { value: originData[i].comments, verticalAlign: 'center', textAlign: 'center'}
                ],
            });
        }
        //2.2.3设置列宽度与样式
        var columns = [];
        for(var i = 0;i < excelTitles.length;i++){
            columns.push({ width: 150 });
        }

        /**
         * 3.配置导出excel sheets,格式与文件名
         */
        var workbook = new kendo.ooxml.Workbook({
            date: new Date(),
            sheets: [ // sheet数组,如需导出多个sheet在此完成
                {
                    name: '银行数据',       //sheet 名称
                    frozenRows: 1,         //冻结第一行
                    frozenColumns: 1,      //冻结第一列
                    columns: columns,      //
                    rows: excelData        //数据
                }
            ]
        });

        //设置文件名
        kendo.saveAs({
            dataURI: workbook.toDataURL(), //数据源
            fileName: '银行导出测试' //文件名
        });
    }

 

4.一些其他补充(节选自kendo导出文档)
  4.1导出复选框所勾选的数据
<span class="btn btn-primary" onclick="excelSelectedData()">
    <i class="fa fa-file-excel-o" style="margin-right:3px;"></i>导出复选框选中的数据
</span>
<script>
    function excelSelectedData() {
        var originData = grid.selectedDataItems();
        excelData(originData);
    }
</script>

 

 
 
 
4.2导出当前页的数据(查询条件查询后)
<span class="btn btn-primary" onclick="excelPageData()">
    <i class="fa fa-file-excel-o" style="margin-right:3px;"></i>导出当前页数据
</span>
<script>
    function excelPageData () {
        var originData = dataSource.data();
        excelData(originData);
    }
</script>

 

 
 
 
 
 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

附件列表

 

转载于:https://www.cnblogs.com/wuqichuan666/p/9453037.html

Kendo UI框架提供了强大的Excel导出功能,通过Grid的saveAsExcel能方便地导出Grid中的数据,而且格式美观大方,使用起来也非常方便。但是在实际使用中不是很理想,主要有以下两个问题: 1. 导出的列数据是原始值 Kendo UI默认导出的是该列的value值,及查出来的值,有时候我们会用template渲染一下导出的列,比如将“Y”显示成“是”,把“N”显示成“否”。而Kendo UI导出的却是Y/N这种只有程序员看得懂的数据库标识,显然不是我们需要的,这种情况非常常见。 2. 不能灵活控制可导出的列 Kendo UI的Excel导出主要看两点,一是该列(column)是field字段,而不是自定义的name;二是该列不是隐藏的(hidden:true)。这样我们无法灵活导出我们需要的列。 为了解决上面两个问题,我查看了Kendo UI的源代码,提取并改进了源代码。主要更改点及使用方法请看下面源代码。主要针对以上两点做了更改,只需要在grid定义columns时加上isExport或exportTemplate即可: 在导出数据,先看该列有没有自定义exportTemplate(),没有则看Kendo UI自带的template(),再没有才会导出查出来的值。 判断是否导出该列不再看hidden属性,而是看列的isExport属性,如果为false则不导出,其它情况一律导出该列。 经过这两个更改,基本可以应对所有业务场景,可以方便快捷地开发了! 但要注意,Kendo UI自带的导出功能无法应用于导出大量数据,似乎是浏览器的jvm溢出了,建议超过5万条的数据导出还是老老实实写后台导出功能吧。。
要使用 Spring Boot 导出 Excel,你可以使用 Apache POI 库。以下是一个简单的示例: 1. 添加 Maven 依赖 在 pom.xml 文件中添加以下 Maven 依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 2. 创建 POJO 类 创建一个 POJO 类来保存要导出的数据,例如: ```java public class User { private String name; private Integer age; private String email; // 省略 getter 和 setter } ``` 3. 创建 Excel 导出服务 创建一个服务类来处理 Excel 导出逻辑,例如: ```java @Service public class ExcelExportService { public void exportUsersToExcel(List<User> users, HttpServletResponse response) throws IOException { // 创建工作簿 Workbook workbook = new XSSFWorkbook(); // 创建工作表 Sheet sheet = workbook.createSheet("Users"); // 创建表头 Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("Name"); headerRow.createCell(1).setCellValue("Age"); headerRow.createCell(2).setCellValue("Email"); // 填充数据 int rowNum = 1; for (User user : users) { Row row = sheet.createRow(rowNum++); row.createCell(0).setCellValue(user.getName()); row.createCell(1).setCellValue(user.getAge()); row.createCell(2).setCellValue(user.getEmail()); } // 设置响应头 response.setHeader("Content-Disposition", "attachment; filename=users.xlsx"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); // 写入响应体 workbook.write(response.getOutputStream()); // 关闭工作簿 workbook.close(); } } ``` 4. 创建导出接口 创建一个控制器类来处理导出请求,例如: ```java @RestController @RequestMapping("/users") public class UserController { @Autowired private ExcelExportService excelExportService; @GetMapping("/export") public void exportUsers(HttpServletResponse response) throws IOException { List<User> users = // 查询要导出的数据 excelExportService.exportUsersToExcel(users, response); } } ``` 这样,当你访问 `/users/export` 接口时,就会将查询到的数据导出为 Excel 文件并下载到本地。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值