文件上传与下载(excel)

<button class=batch_button  onclick='choose();return false'>选择文件</button>//选择文件按钮
<input id=filename name=filename class=form_input autocomplete="off" disabled="disabled"/> //文件名显示区域
<input type="file" name="file" id="userImport" style="display: none" onChange='uploadFiles();' accept=".xlsx" />

 

var context;
function choose(){
    $('#userImport').click();
    return false;    
}
function uploadFiles(){
    if($('#userImport')[0].files.length==0){return};
          var selectedFile =document.getElementById("userImport").files[0];//获取读取的File对象
       var name = selectedFile.name;//读取选中文件的文件名
      //var size = selectedFile.size;//读取选中文件的大小
      $('#filename').val(name);

      /* var reader = new FileReader();//读取操作。
      reader.readAsText(selectedFile);//读取文件的内容
      reader.onload = function(){

      console.log(this.result);//当读取完成之后会回调这个函数,然后此时文件的内容存储到了result中。直接操作即可

      context =this.result;//reader.result;//
      $('#userImport').val(null);
      }; */

      return false;
}


 

//由于此处功能是在弹出框内实现的,故点击弹出框的【确定】按钮,将选择的上传文件传递到后台
function
ok(){ var filename=$("#filename").val(); if(filename==''){ alert("文件不能为空",{window:parent,type:'error'}); return; } var fileData = new FormData($("#form")[0]); var url = "upload"; $.post({ type: "post", url : url, cache: false, processData: false,//使用jquery封装的ajax请求时,若传递参数为formData,该参数必须为false contentType: false,//理由同上(这部分内容可参考https://www.jianshu.com/p/436159828bfa) data: fileData, dataType: "json", success: function(r){ if(r.code && r.code != 0) {   //导入文件发生错误时需要做的事情   return; }
       //正确导入文件做的事情
}, error: function(){ //导入文件发生错误时需要做的事情 } }); return false; }

后台代码如下:

public void upload() throws Exception{
        UploadFile uploadFile = this.getFile();//jfinal提供的方法,需要导入cos-2017.5.jar
        File file= uploadFile.getFile();
        FileInputStream fis =null;
        Workbook workbook = null;    
        //获取一个绝对地址的流
        //fis = new FileInputStream("D:\\pcm\\test.xlsx");
        fis = new FileInputStream(file);    
        //2007版本的excel,用.xlsx结尾
        workbook = new XSSFWorkbook(fis);//得到工作簿    
        //2003版本的excel,用.xls结尾
        //wookbook = new HSSFWorkbook(fis);//得到工作簿
        int numberOfSheets = workbook.getNumberOfSheets();// 表个数。
        List<Record> list = new ArrayList<>();
        for (int i = 0; i < numberOfSheets; i++) {   
            Sheet sheet = workbook.getSheetAt(i);
            int rowNumbers = sheet.getLastRowNum() + 1;// 行数。
             Row temp = sheet.getRow(0);// Excel第一行。
            if (temp == null) {
                continue;
            } 
            int cells = temp.getPhysicalNumberOfCells(); 
            // 读数据。
            for (int row = 1; row < rowNumbers; row++) {
                Record record = new Record(); 
                Row r = sheet.getRow(row);
                record.set("project_name", r.getCell(0));
                record.set("income_ratio", r.getCell(1));
                record.set("return_ratio", r.getCell(2));    
                list.add(record);
            }
        }
        //处理已读取的数据
    }

以上,导入excel并读取excel中的数据已完成。

下方代码用于实现:下载服务器中的模板文件(由于是模板文件,是存放在服务器端的固定文件,内容无需修改,故下载方式比较简单)。

<button id=export>模板下载</button>
$("#export").click(function(){
    window.location.href="../template/template.xlsx";//将模板文件地址配上即可
})

对于模板需要修改的情况,还需与后台进行交互,在后台修改文件数据,这部分内容下次继续补充~~~

 

posted @ 2020-11-30 17:54  拾忆23  阅读(281)  评论(0)    收藏  举报