Java在线编辑Excel上传ftp

框架:vue+jq  ,Spring boot+maven

pom:

<!--FTP上传下载-->
  <dependency>
   <groupId>commons-net</groupId>
   <artifactId>commons-net</artifactId>
   <version>3.6</version>
  </dependency>
  <dependency>
   <groupId>fr.opensagres.xdocreport</groupId>
   <artifactId>org.apache.poi.xwpf.converter.core</artifactId>
   <version>1.0.6</version>
  </dependency>

思路:将前端在线编辑的数据,通过ajax传递到后台,由后台生成Excel并且插入数据,再由ftp上传到指定位置

前端:ZCell+jq

如下图导入需要的js以及css

 

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PMS在线Excel编辑</title>
    <meta name="keywords" content="前端,excel,插件,ZCELL,智表,免费,jquery,浏览器,仿EXCEL,官网">
    <meta name="description" content="智表(ZCELL)是一款浏览器仿excel表格jquery前端插件。智表可以为你提供excel般的智能体验,支持双击编辑、设置公式、设置显示小数精度、下拉框、自定义单元格、复制粘贴、不连续选定、合并单元格、拆分单元格、插入行列、删除行列、隐藏行列、键盘操作等。">
    <meta name="author" content="智表研发团队">
    <meta name="copyright" content="智表研发团队版权所有">


    <script type="text/javascript" src="../../../lib/zcell/jquery.min.js"></script>
    <script type="text/javascript" src="../../../lib/zcell/ZCell.register.js"></script>
    <script type="text/javascript" src="../../../lib/zcell/ZCell.min.js"></script>
    <link rel="stylesheet" type="text/css" href="../../../lib/zcell/ZCell.css" />

    <style>

 .button {
            background-color: #4CAF50; /* Green */
            border: none;
            color: white;
            padding: 6px;
            text-align: center;
            text-decoration: none;
            display: inline-block;
            font-size: 12px;
            margin: 2px;
            -webkit-transition-duration: 0.4s; /* Safari */
            transition-duration: 0.4s;
            cursor: pointer;
        }

        .button1 {
            background-color: white;
            color: black;
            border: 2px solid #4CAF50;
        }

        .button1:hover {
            background-color: #4CAF50;
            color: white;
        }

        .button2 {
            background-color: white;
            color: black;
            border: 1px solid #008CBA;
        }

        .button2:hover {
            background-color: #008CBA;
            color: white;
        }

        .button3 {
            background-color: white;
            color: black;
            border: 2px solid #f44336;
        }

        .button3:hover {
            background-color: #f44336;
            color: white;
        }

        .button4 {
            background-color: white;
            color: black;
            border: 2px solid #e7e7e7;
        }

        .button4:hover {
            background-color: #e7e7e7;
        }

        .button5 {
            background-color: white;
            color: black;
            border: 2px solid #555555;
        }

        .button5:hover {
            background-color: #555555;
            color: white;
        }
    </style>
</head>
<body>

<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>


<form id="form1" action="" method="post" enctype="multipart/form-data">
<div id="cellContainer" style="width:1200px;height:650px;  border:1px solid #DDECFE; overflow:hidden;">
</div>
</form>
<!--#include virtual="../../commons/commonJs.shtml"-->
<!-- 本页面js -->
<script type="text/javascript" src="../../../js/sys/user/user_excel_model.js"></script>
</body>
</html>

 

//JS文件

//页面加载时,执行
var zcell1;

//准备数据源
var jsondata = [//四行五列
    // ["列1", "列2", "列3", "列4", "列5", "列6", "列7", "列8", "列9", "列10", "列11", "列12", "列13"],
    //如果需要从后台获取数据,接收数组参数

];
var httpurl = httpurlSystem;

//页面加载时执行
$(document).ready(function () {
    //创建JSCELL,指明承载容器
    zcell1 = new ZCell(document.getElementById("cellContainer"));
    //创建表,并指定列,行数
    zcell1.InserSheet(0, 10, 24);

    //加载数据
    zcell1.GetSheet(0).LoadArrData(jsondata);


    zcell1.GetSheet(0).SetCellType(2, 22, {
        "code": "button",
        "object": "<button type=\"button\" οnclick='comput()' style='border: solid 1px;'>实时计算</button>"
    });

    zcell1.GetSheet(0).SetCellType(3, 22, {
        "code": "button",
        "object": "<button type=\"button\" οnclick='setcolw()' style='border: solid 1px;'>设置列宽</button>"
    });

zcell1.GetSheet(0).SetCellType(4, 22, {
        "code": "button",
        "object": "<button type=\"button\" οnclick='setrowh()' style='border: solid 1px;'>设置行高</button>"
    });

    zcell1.GetSheet(0).SetCellType(5, 22, {
        "code": "button",
        "object": "<button type=\"button\" οnclick='setLabHidden()' style='border: solid 1px;'>隐藏标尺</button>"
    });

    zcell1.GetSheet(0).SetCellType(6, 22, {
        "code": "button",
        "object": "<button type=\"button\" οnclick='setLabdisplay()' style='border: solid 1px;'>显示标尺</button>"
    });

    zcell1.GetSheet(0).SetCellType(7, 22, {
        "code": "button",
        "object": "<button type=\"button\" οnclick='endedit()' style='border: solid 1px;'>退出编辑</button>"
    });

    zcell1.GetSheet(0).SetCellType(8, 22, {
        "code": "button",
        "object": "<button type=\"button\" οnclick='getrccount()' style='border: solid 1px;'>获取行列数</button>"
    });

    zcell1.GetSheet(0).SetCellType(7, 23, {
        "code": "button",
        "object": "<button type=\"button\" οnclick='getselcells()' style='border: solid 1px;'>获取选定格</button>"
    });

    zcell1.GetSheet(0).SetCellType(2, 23, {
        "code": "button",
        "object": "<button type=\"button\" οnclick='getcor()' style='border: solid 1px;'>获取当前坐标</button>"
    });

    zcell1.GetSheet(0).SetCellType(3, 23, {
        "code": "button",
        "object": "<button type=\"button\" οnclick='Getdata()' style='border: solid 1px;'>获取表数据</button>"
    });

    zcell1.GetSheet(0).SetCellType(4, 23, {
        "code": "button",
        "object": "<button type=\"button\" οnclick='gettdval()' style='border: solid 1px;'>获取单元格值</button>"
    });

    // zcell1.GetSheet(0).SetCellReadOnly(5, 23, 1);// 设置只读属性,1 只读,0 非只读


    zcell1.GetSheet(0).SetCellType(6, 23, {
        "code": "button",
        "object": "<button type=\"button\" οnclick='hidestabar()' style='border: solid 1px;'>隐藏状态栏</button>"
    });


});

//自定义函数,公式中可以直接引用
function GETARGS() {
    var vi = 0.23;

    return vi;
}

//获得数据
function Getdata() {
    //获取当前数据的数组,可以黏贴后查看效果
    var datastr = zcell1.GetSheet(0).GetDataArr();
    alert("第6行5列单元格数据为:" + datastr[5][4]);

}


//获得单元格值
function gettdval() {
    var val = zcell1.GetSheet(0).GetCellValue(6, 7);

    alert("第6列7行单元格值为:" + val);
}

//设置标签隐藏
function setLabHidden() {
    //设置列\行标签不显示
    zcell1.GetSheet(0).ShowColLab(0);
    zcell1.GetSheet(0).ShowRowLab(0);
}

//设置标签显示
function setLabdisplay() {
    //设置列\行标签不显示
    zcell1.GetSheet(0).ShowColLab(1);
    zcell1.GetSheet(0).ShowRowLab(1);
}

//设置列宽
function setcolw() {
    zcell1.GetSheet(0).SetColWidth(3, 200);
}

//设置行高
function setrowh() {
    zcell1.GetSheet(0).SetRowHeight(16, 50);
}

function comput() {
    alert("选定数值单元格后,可以在智表下方查看实时计算结果");

}

//获取当前单元格
function getcor() {
    var str1 = "当前列号:" + zcell1.GetSheet(0).GetCurrentColNo() + ",行号:" + zcell1.GetSheet(0).GetCurrentRowNo();
    alert(str1);
}

//获取表 行数,列数
function getrccount() {
    var str1 = "总列数:" + zcell1.GetSheet(0).GetCols() + ",总行数:" + zcell1.GetSheet(0).GetRows();
    alert(str1);
}

//获取选定单元格,返回JSON串
function getselcells() {

    alert(zcell1.GetSheet(0).GetSelectCellsJson());
}

//保存并退出编辑状态FTP上传函数
function endedit() {
    var datastr = zcell1.GetSheet(0).GetDataArr();  //获取Excel页面所有数据,且数据为二维数组(重要)
    // zcell1.SaveEdit();
    $.ajax({
        url: httpurl+'user/ftpUpload?token='+TokenUtils.getToken(),
        type: "POST",
        contentType : "application/json" ,
        data : JSON.stringify(datastr),  //把二维数组转换成json字符串
        traditional: true,
        success:function (data) {
            alert(data)
        },
        error:function (data,index) {
            alert(data)
        }
    })

}

function editdata() {

    alert("我是ZCELL自定义编辑事件");
    return;

}
function summitfun() {

    alert("我是ZCELL自定义按钮触发事件");

}

function hidestabar() {
    zcell1.SetStatusBar(0);
}

//合并单元格
function merge() {
    //合并单元格
    zcell1.GetSheet(0).MergeCells(2, 4, 2, 5);
    zcell1.GetSheet(0).MergeCells(3, 4, 3, 5);
    zcell1.GetSheet(0).MergeCells(4, 4, 6, 4);

}

//取消合并单元格
function unmerge() {
    zcell1.GetSheet(0).SplitCell(2, 4);
    zcell1.GetSheet(0).SplitCell(3, 4);
    zcell1.GetSheet(0).SplitCell(4, 4);
}

//控制层核心函数

/**
  * ftp 文件上传
  */
 @RequestMapping("/ftpUpload")
 @ResponseBody
 @RequiresPermissions("user:list")
 public void ftpUpload(@RequestBody(required=false) List<List<String>> arr,HttpServletResponse res, HttpServletRequest request)throws IOException {

//后台接受参数要用list泛型来接受前台的二维数组
  // 创建一个excel文件
  HSSFWorkbook book = new HSSFWorkbook();
  // 创建Sheet对象
  HSSFSheet sheet = book.createSheet("测试");

  HSSFRow row = null;
  HSSFCell cell = null;
  int rowIndex = 0;
  for(int j=0;j<=arr.size()-1;j++){
   row= sheet.createRow(rowIndex);
   for(int k=0;k<arr.get(j).size();k++){
     cell =  row.createCell(k);
     cell.setCellValue(arr.get(j).get(k));
   }
   rowIndex++;
  }
  FTPClient ftp = new FTPClient();
  try {
   // 连接ftp服务器    ftp.connect("ip", 端口);
   ftp.connect("127.0.20.41", 21);
   // 登录
   ftp.login("username", "password");
   // 设置上传路径
   String path = "/xx";
   // 检查上传路径是否存在 如果不存在返回false
   boolean flag = ftp.changeWorkingDirectory(path);
   System.out.println(flag);
   if (!flag) {
    // 创建上传的路径 该方法只能创建一级目录,在这里如果/home/ftpuser存在则可创建image
    ftp.makeDirectory(path);
    System.out.println("11");
   }
   // 指定上传路径
   ftp.changeWorkingDirectory(path);
   // 指定上传文件的类型 二进制文件
   ftp.setFileType(FTP.BINARY_FILE_TYPE);
   ByteArrayOutputStream os = new ByteArrayOutputStream();
   book.write(os);
   byte[] b = os.toByteArray();
   ByteArrayInputStream in = new ByteArrayInputStream(b);
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd");
   Date date = new Date();
   String name = new String(("测试_" + sdf.format(date) + ".xls").getBytes("GBK"), "iso-8859-1");//涉及到中文问题 根据系统实际编码改变
   ftp.storeFile(name, in);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

写在最后,本人只是为自己做记录,如有需要以及不解处请留言,我会及时回复

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值