Handsontable 的数据保存(增删改查+导出excel)

项目用到handsontable 插件 
根据官网 API写的handsontable初始化, 
数据展示, 
ajax请求, 
参数封装, 
Controller参数接受

全局容器

var AllData = {};
var updatelist = [];
var delidslist =[];
var insertlist=[];

handsontable 的初始化

function onIniHandsonTable(data) {
KaTeX parse error: Expected 'EOF', got '#' at position 3: ('#̲hot').empty(); …/
}
],
stretchH: ‘all’,
autoWrapRow: true,
rowHeaders: true,
colHeaders : [ ‘ID’, ’ ERSystem ', ’ ConcurSystem ',‘APISystem’,‘MyEven’,‘ExpressSum’,‘TodayDate’,‘EndDate’,‘DelayDay’ ],
columnSorting: true,
contextMenu:true,
sortIndicator: true,
dropdownMenu: [‘filter_by_condition’, ‘filter_by_value’,‘filter_action_bar’],
//dropdownMenu:true,
filters: true,
renderAllRows: true,
search: true,

             afterDestroy (){
                // 移除事件
                 Handsontable.Dom.removeEvent(save, 'click', saveData);
                 loadDataTable();
             },
             beforeRemoveRow:function(index,amount){
                 var ids = [];
                //封装id成array传入后台
                 if(amount!=0){
                     for(var i = index;i<amount+index;i++){
                     var rowdata = hot.getDataAtRow(i);
                      ids.push(rowdata[0]);
                 }
                     delExpressCount(ids);
                      screening();
                 }
             },

             afterChange:function(changes, source){
                    //params 参数 1.column num , 2,id, 3,oldvalue , 4.newvalue
                    var params =[];
                    if(changes!=null){  
                    var index = changes[0][0];//行号码
                    var rowdata = hot.getDataAtRow(index);
                    params.push(rowdata[0]);
                    params.push(changes[0][1]);
                    params.push(changes[0][2]);
                    params.push(changes[0][3]);

                    //仅当单元格发生改变的时候,id!=null,说明是更新
                    if(params[2]!=params[3]&&params[0]!=null){
                        var data={
                                id:rowdata[0],
                                ersystem:rowdata[1],
                                concursystem:rowdata[2],
                                apisystem:rowdata[3],
                                myeven:rowdata[4],
                                expresssum:rowdata[5],
                                todaydate:rowdata[6],
                                enddate:rowdata[7],
                                delayday:rowdata[8]
                        }
                        updateExpressCount(data);
                    }
                }
             }
        }

        hot = new Handsontable(hotElement,hotSettings);
         //数据导入
         var button = {excel: document.getElementById('excelexport')};
         var exportPlugin = hot.getPlugin('exportFile'); 
         var rows = hot.countRows();
         var cols = hot.countCols();
         button.excel.addEventListener('click', function() {
                exportPlugin.downloadFile('csv', {
                    filename: 'Expresscount'+'-'+getNowFormatDate(),
                    rowHeaders:false,
                    columnHeaders:true,
                });
              });
         //数据导入
        //插入的数据的获取
        function insertExpressCount(){
            var idsdata = hot.getDataAtCol(0);//所有的id
            for(var i=0;i<idsdata.length;i++){
                //id=null时,是插入数据,此时的i正好是行号
                if(idsdata[i]==null){
                    //获得id=null时的所有数据封装进data
                    var rowdata = hot.getDataAtRow(i);
                    //var collength = hot.countCols();
                    if(rowdata!=null){
                        var data={
                                ersystem:rowdata[1],
                                concursystem:rowdata[2],
                                apisystem:rowdata[3],
                                myeven:rowdata[4],
                                expresssum:rowdata[5],
                                todaydate:rowdata[6],
                                enddate:rowdata[7],
                                delayday:rowdata[8]
                            }
                        insertlist.push(data);
                    }
                }
            }
            if(insertlist.length!=0){
                  AllData.insertlist = insertlist;
            }

        }

        saveData =function (){
            //插入的数据的获取
            insertExpressCount();
            if(JSON.stringify(AllData) != "{}"&&validresult){
                $.ajax({
                    url:'globalprocess', 
                    type:'post',
                    dataType:'json',
                    contentType:'application/json',
                    data:JSON.stringify(AllData),
                    success:function(rdata){
                        if(rdata.success){
                            $.alert({
                                title: '消息提示',
                                type: 'blue',
                                content: '保存成功.',
                            });
                            //保存以后重置全局容器
                            clearContainer();
                            //销毁
                            hot.destroy();
                        }
                        else {
                            $.alert({
                                title: '错误提示',
                                type: 'red',
                                content: '保存数据失败.',
                            });

                        }
                    },
                    error:function () {
                        $.alert({
                                title: '错误提示',
                                type: 'red',
                                content: '请求失败.',
                            });
                        clearContainer();
                    }
                })
            }else{
                if(!validresult){
                     $.alert({
                            title: '错误提示',
                            type: 'red',
                            content: '数据类型错误.',
                        });
                }else{
                  $.alert({
                        title: '错误提示',
                        type: 'red',
                        content: '没有添加或修改数据.',
                    });
                }
            }
        }
      //绑定事件保存数据
      Handsontable.Dom.addEvent(save, 'click', saveData);
}

删除list封装([ id1,id2,…])

//删除的优先级最高
function delExpressCount (ids){
//传入的ids.length不可能为0
$.each(ids,function(index,id){
if(id!=null){
delidslist.push(id);
}
});
AllData.delidslist=delidslist;
}

删除的优先级别大于更新,如果一条数据被更新了又被删除了,事实上不需要执行更新操作的

//updatelist数据更新
function screening(){
    if(updatelist.length!=0&&delidslist.lentgh!=0){
        for(var i=0;i<delidslist.length;i++){
            for(var j=0;j<updatelist.length;j++){
                if(updatelist[j].id == delidslist[i]){
                //更新updatelist
                updatelist.splice(j,1);
                }
            }
        }
        //把updatelist封装进AllData
        AllData.updatelist=updatelist;
    }
}

更新list封装([{expresscount1},…])

//更新数据
function updateExpressCount(data){
if(JSON.stringify(data) != “{}”){
var flag = true;
//判断记录是否存在,更新数据
$.each(updatelist,function(index,node){
if(node.id==data.id){
//此记录已经有了
flag = false;
//用新得到的记录替换原来的,不用新增
updatelist[index] = data;
}
});
flag&&updatelist.push(data);
//封装
AllData.updatelist=updatelist;
}
}

清空全局容器

clearContainer =function (){
AllData = {};
updatelist = [];
delidslist =[];
insertlist=[];
}

//获得当前时间
function getNowFormatDate() {
var date = new Date();
var seperator1 = “-”;
var seperator2 = “:”;
var month = date.getMonth() + 1;
var strDate = date.getDate();
if (month >= 1 && month <= 9) {
month = “0” + month;
}
if (strDate >= 0 && strDate <= 9) {
strDate = “0” + strDate;
}
var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
+ " " + date.getHours() + seperator2 + date.getMinutes()
+ seperator2 + date.getSeconds();
return currentdate;
}

加载用户数据,并绑定到handsontable

function loadDataTable(){
    showWait(); 
    $.ajax({
        url:'fillList',
        type:'post',
        dataType:'json',
        success:function(rdata){
            closeWait();
            var convertData = [];
            if (rdata && typeof rdata === "object") {
                //重新封装数据,因为时间类型不符合要求
                $.each(rdata,function(index,node){
                    convertData.push({
                        id:node.id,
                        myeven:node.myeven,
                        expresssum:node.expresssum,
                        ersystem:node.ersystem,
                        concursystem:node.concursystem,
                        apisystem :node.apisystem,
                        todaydate :common.timestampToDate(node.todaydate),
                        enddate:common.timestampToDate(node.enddate),
                        delayday:node.delayday
                        });
                });
                onIniHandsonTable(convertData);
            }
            else{
                $.alert({
                    title: '消息提示',
                    type: 'red',
                    content: '加载数据失败.',
                });
            }   
        },
        error:function(e,j,t){
            closeWait();
            $.alert({
                title: '错误提示',
                type: 'red',
                content: '加载数据错误.',
            });
            console.log('express count/fill error:'+j+','+t);
        }
    });
}

对应的pojo类

public class ExpressCount {
private Integer id;

private Integer ersystem;

private Integer concursystem;

private Integer apisystem;

private Integer myeven;

private Integer expresssum;

private Date todaydate;

private Date enddate;

private Integer delayday;

private Date createdate;

private Integer createuserid;

private String createusername;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public Integer getErsystem() {
    return ersystem;
}

public void setErsystem(Integer ersystem) {
    this.ersystem = ersystem;
}

public Integer getConcursystem() {
    return concursystem;
}

public void setConcursystem(Integer concursystem) {
    this.concursystem = concursystem;
}

public Integer getApisystem() {
    return apisystem;
}

public void setApisystem(Integer apisystem) {
    this.apisystem = apisystem;
}

public Integer getMyeven() {
    return myeven;
}

public void setMyeven(Integer myeven) {
    this.myeven = myeven;
}

public Integer getExpresssum() {
    return expresssum;
}

public void setExpresssum(Integer expresssum) {
    this.expresssum = expresssum;
}

public Date getTodaydate() {
    return todaydate;
}

public void setTodaydate(Date todaydate) {
    this.todaydate = todaydate;
}

public Date getEnddate() {
    return enddate;
}

public void setEnddate(Date enddate) {
    this.enddate = enddate;
}

public Integer getDelayday() {
    return delayday;
}

public void setDelayday(Integer delayday) {
    this.delayday = delayday;
}

public Date getCreatedate() {
    return createdate;
}

public void setCreatedate(Date createdate) {
    this.createdate = createdate;
}

public Integer getCreateuserid() {
    return createuserid;
}

public void setCreateuserid(Integer createuserid) {
    this.createuserid = createuserid;
}

public String getCreateusername() {
    return createusername;
}

public void setCreateusername(String createusername) {
    this.createusername = createusername == null ? null : createusername.trim();
}

}

参数封装pojo类

public class ExpressCountDataList {
List updatelist;
List insertlist;
List delidslist;

public List<ExpressCount> getUpdatelist() {
    return updatelist;
}
public void setUpdatelist(List<ExpressCount> updatelist) {
    this.updatelist = updatelist;
}
public List<ExpressCount> getInsertlist() {
    return insertlist;
}
public void setInsertlist(List<ExpressCount> insertlist) {
    this.insertlist = insertlist;
}
public List<Integer> getDelidslist() {
    return delidslist;
}
public void setDelidslist(List<Integer> delidslist) {
    this.delidslist = delidslist;
}

}

Controller接收

/**
* 保存编辑后table数据
* @param AllData(删除,更新,插入)
* @return
*/
@ResponseBody
@RequestMapping("/globalprocess")
public Page globalprocess(@RequestBody ExpressCountDataList AllData){
Page page = new Page();

    List<ExpressCount> updatelist =AllData.getUpdatelist();
    List<ExpressCount> insertlist =AllData.getInsertlist();
    List<Integer> delidslist=AllData.getDelidslist();
    //更新
    boolean result = expressCountService.globalprocess(updatelist,insertlist,delidslist);
    if(result == true){
        page.setErrorCode(0);
        page.setSuccess(true);
        page.setMessage("操作成功");
    }else{
        page.setErrorCode(0);
        page.setSuccess(true);
        page.setMessage("操作失败");
    }
    return page;
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PHP是一种流行的开源编程语言,常用于Web开发。在PHP中,我们可以使用各种方法来实现增删操作,并且还可以使用其它库来导出Excel文件。 首先,我们可以使用SQL语句执行增删操作。PHP提供了一组用于与数据库交互的函数和类,如mysqli和PDO等。我们可以连接到数据库,执行插入、更新和删除等操作,以及执行询操作,并将结果返回到PHP脚本中进行处理和展示。 对于导出Excel文件,我们可以使用PHPExcel库。该库提供了一组丰富的功能,可以创建和操作Excel文件。我们可以使用该库创建一个Excel文件,设置头部信息和数据内容,并将其保存到服务器或直接下载到客户端。 以下是一个简单的示例,演示了如何使用PHP实现增删导出Excel的操作: 1. 增加数据: ```php // 连接数据库 $conn = new mysqli("localhost", "username", "password", "dbname"); // 执行插入操作 $sql = "INSERT INTO table_name (column1, column2, column3) VALUES ('value1', 'value2', 'value3')"; $conn->query($sql); // 断开数据库连接 $conn->close(); ``` 2. 删除数据: ```php // 连接数据库 $conn = new mysqli("localhost", "username", "password", "dbname"); // 执行删除操作 $sql = "DELETE FROM table_name WHERE condition"; $conn->query($sql); // 断开数据库连接 $conn->close(); ``` 3. 修数据: ```php // 连接数据库 $conn = new mysqli("localhost", "username", "password", "dbname"); // 执行更新操作 $sql = "UPDATE table_name SET column1 = 'new_value' WHERE condition"; $conn->query($sql); // 断开数据库连接 $conn->close(); ``` 4. 数据: ```php // 连接数据库 $conn = new mysqli("localhost", "username", "password", "dbname"); // 执行询操作 $sql = "SELECT * FROM table_name"; $result = $conn->query($sql); // 处理询结果 if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { // 处理每一行数据 } } // 断开数据库连接 $conn->close(); ``` 5. 导出Excel文件: ```php // 导出Excel文件 require_once 'PHPExcel.php'; $objPHPExcel = new PHPExcel(); // 设置Excel头部信息 $objPHPExcel->getActiveSheet()->setCellValue('A1', 'Column 1'); $objPHPExcel->getActiveSheet()->setCellValue('B1', 'Column 2'); $objPHPExcel->getActiveSheet()->setCellValue('C1', 'Column 3'); // 设置Excel数据内容 $objPHPExcel->getActiveSheet()->setCellValue('A2', 'Value 1'); $objPHPExcel->getActiveSheet()->setCellValue('B2', 'Value 2'); $objPHPExcel->getActiveSheet()->setCellValue('C2', 'Value 3'); // 保存Excel文件 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('file.xls'); ``` 以上就是使用PHP实现增删导出Excel的一些基本操作方法。根据具体需求,我们可以使用更复杂的SQL语句和PHPExcel库的更多功能来实现更强大的操作。 ### 回答2: PHP是一种常用的服务器端脚本语言,非常适合用于增删数据库操作,并且很容易实现导出Excel功能。 在PHP中,我们可以使用MySQLi或PDO等扩展来连接数据库进行数据增删操作。对于增加(Insert)、删除(Delete)、修(Update)数据非常简单,只需要使用对应的SQL语句即可。 例如,对于增加数据: ```php $conn = new mysqli($servername, $username, $password, $dbname); $sql = "INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')"; if ($conn->query($sql) === TRUE) { echo "新记录插入成功"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close(); ``` 对于删除数据: ```php $conn = new mysqli($servername, $username, $password, $dbname); $sql = "DELETE FROM users WHERE id=1"; if ($conn->query($sql) === TRUE) { echo "记录删除成功"; } else { echo "Error deleting record: " . $conn->error; } $conn->close(); ``` 对于修数据: ```php $conn = new mysqli($servername, $username, $password, $dbname); $sql = "UPDATE users SET email='johndoe@example.com' WHERE id=1"; if ($conn->query($sql) === TRUE) { echo "记录更新成功"; } else { echo "Error updating record: " . $conn->error; } $conn->close(); ``` 除了增删之外,导出Excel也非常简单。我们可以使用PHPExcel等第三方库来实现。 例如,导出Excel数据: ```php require_once 'PHPExcel/Classes/PHPExcel.php'; $objPHPExcel = new PHPExcel(); $objPHPExcel->getActiveSheet()->setCellValue('A1', 'Name'); $objPHPExcel->getActiveSheet()->setCellValue('B1', 'Email'); $conn = new mysqli($servername, $username, $password, $dbname); $sql = "SELECT * FROM users"; $result = $conn->query($sql); $rowCount = 2; while($row = $result->fetch_assoc()) { $objPHPExcel->getActiveSheet()->setCellValue('A' . $rowCount, $row['name']); $objPHPExcel->getActiveSheet()->setCellValue('B' . $rowCount, $row['email']); $rowCount++; } $conn->close(); $objPHPExcel->getActiveSheet()->setTitle('Users'); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="users.xlsx"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); exit; ``` 以上就是使用PHP进行增删导出Excel的简单示例。PHP提供了丰富的数据库操作功能和众多扩展库,让我们能够轻松地进行各种数据库操作和数据处理。 ### 回答3: PHP是一种非常流行的后端编程语言,可以很方便地实现数据库的增删操作以及导出Excel文件。 首先,对于数据库的增删操作,可以使用PHP的数据库扩展(如mysqli或PDO)来连接数据库,并使用相关函数实现。 对于增加(INSERT)操作,可以通过执行SQL INSERT语句向数据库中插入新的数据记录。 对于删除(DELETE)操作,可以通过执行SQL DELETE语句从数据库中删除指定的数据记录。 对于修(UPDATE)操作,可以通过执行SQL UPDATE语句更新数据库中指定的数据记录。 对于找(SELECT)操作,可以通过执行SQL SELECT语句从数据库中获取符合条件的数据记录。 在PHP中,可以使用相关的数据库函数(如mysqli_query或PDO::query)执行SQL语句,并通过结果返回来获取执行结果。 对于导出Excel文件,可以使用PHP的第三方库(如PHPExcel或PHPExcelWriter)来创建和操作Excel文件。 首先,可以在PHP中引入相关的Excel库,并创建一个新的Excel对象。 然后,可以使用Excel对象中的方法来添加工作表、设置单元格内容和样式等。 最后,可以使用Excel库提供的导出方法,将Excel文件保存到指定的路径上。 需要注意的是,确保服务器上已经安装并启用了Excel库,并且对于导出文件的路径,需要给予足够的文件写入权限。 综上所述,使用PHP实现数据库的增删操作以及导出Excel文件的方法可以简要归纳为:连接数据库并执行相关的SQL语句完成增删操作;引入Excel库并创建一个Excel对象,通过添加工作表,设置单元格内容和样式等操作生成Excel文件;最后,使用Excel库提供的导出方法将文件保存到指定路径上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值