• Java Excel文件上传


    需求,前端用户上传Excel文件,后台读取解析文件,做一系列处理后插入数据库。

    1.前台代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>导入</title>
    </head>
    <style>
        .fileinput-button input {
            position: absolute;
            right: 0px;
            top: 0px;
        }
    </style>
    <body>
    <p>请上传.xlsx或.xls格式Excel文件</p>
    <hr/>
    <form id="importer" action="/api/improtExcel" method="post" enctype="multipart/form-data">
          <span class="">
                <span>上传</span>
                <input type="file" name="excel">
            </span>
          <input class="fileinput-button" type="submit" name="Submit" value="提交"/>
    </form>
    </body>
    </html>

    2.controller

    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.multipart.MultipartHttpServletRequest;
    import javax.servlet.http.HttpServletRequest;
    import java.io.IOException;
    @RestController
    @RequestMapping(value = "/excel", produces = "text/plain;charset=UTF-8")
    public class ExcelController {
        @PostMapping("/improt")
        public String improtExcel(HttpServletRequest request) throws IOException, InvalidFormatException {
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            MultipartFile file = multipartRequest.getFile("excel");
            xxxx(file);//执行业务代码 } }

    3.读取Excel

    
    
    /*------------------------------------------------------ExcelUtil------------------------------------------------------------------------*/

    //.xls和.xlsx格式的读取方式不同,需要做一个判断然后返回WorkBook对象
    public
    static Workbook readExcel(MultipartFile file) throws IOException { Workbook workbook = null; if (null == file) { throw new RuntimeException("File can not be null!"); } //判断excel类型 .xls 或则 .xlsx格式 String fileName = file.getOriginalFilename(); String excelFormat = fileName.substring(fileName.lastIndexOf(".")); if (".xls".equals(excelFormat)) { workbook = new HSSFWorkbook(file.getInputStream()); } else if (".xlsx".equals(excelFormat)) { workbook = new XSSFWorkbook(file.getInputStream()); } else { throw new RuntimeException("File format can only be .xls or .xlsx"); } return workbook; }

    /*------------------------------------------------------业务代码------------------------------------------------------------------------*/
    //读sheet、row
    public String importExcel(MultipartFile file) throws IOException {
    Workbook workbook = ExcelUtil.readExcel(file);
    Sheet sheet = workbook.getSheetAt(0);//读取第一个sheet
    Row header = sheet.getRow(2);//读取头行数据
    companyId = header.getCell(0).toString();
    companeName = header.getCell(1).toString();
    List<InsertInVo> insertInVos = new ArrayList<>();
    for (int i = 4; i <= sheet.getLastRowNum(); i++) {
    Row row = sheet.getRow(i);
    String departmentNo = row.getCell(0).toString();//不应该这样写,容易出现nullpointerException,应该先判断空
    String departmentName = row.getCell(1).toString();
    String projectNo = row.getCell(2).toString();
    String projectName = row.getCell(3).toString();
    String bookNo = row.getCell(4).toString();
    String bookName = row.getCell(5).toString();
    ......}
  • 相关阅读:
    leetcode------Rotate Array
    leetcode------Validate Binary Search Tree
    leetcode------Unique Binary Search Trees II
    [错误]集合已修改;可能无法执行枚举操作
    [转载]如何申请淘宝app_key、app_secret、SessionKey?
    [转载]JS中如何定义全局变量
    [转载]C# Double toString保留小数点方法
    jquery easyui datagrid 获取选中多行
    MongoDB { code: 18, ok: 0.0, errmsg: "auth fails" } 原因
    C# WinForm开发系列
  • 原文地址:https://www.cnblogs.com/zhihow/p/10075663.html
Copyright © 2020-2023  润新知