zoukankan      html  css  js  c++  java
  • POI上传与下载

    1.导包

     <!-- 读取xml文件用 https://mvnrepository.com/artifact/org.dom4j/dom4j -->
            <dependency>
                <groupId>org.dom4j</groupId>
                <artifactId>dom4j</artifactId>
                <version>2.1.3</version>
            </dependency>
            <!-- 日期格式化工具https://mvnrepository.com/artifact/joda-time/joda-time -->
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.10.12</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>5.0.0</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.xmlbeans/xmlbeans -->
            <dependency>
                <groupId>org.apache.xmlbeans</groupId>
                <artifactId>xmlbeans</artifactId>
                <version>5.0.0</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>5.0.0</version>
            </dependency>

     2.工具类

    import com.dlb.pojo.Tab_car;
    import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.streaming.SXSSFWorkbook;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.joda.time.DateTime;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletResponse;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.math.BigDecimal;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    
    public class ExcelPoi {
        /**
         * HSSF : 读写 Microsoft Excel XLS 格式文档
         *
         * XSSF : 读写 Microsoft Excel OOXML XLSX 格式文档
         *
         * SXSSF : 读写 Microsoft Excel OOXML XLSX 格式文档
         *
         * HWPF : 读写 Microsoft Word DOC 格式文档
         *
         * HSLF : 读写 Microsoft PowerPoint 格式文档
         *
         * HDGF : 读 Microsoft Visio 格式文档
         *
         * HPBF : 读 Microsoft Publisher 格式文档
         *
         * HSMF : 读 Microsoft Outlook 格式文档
         * @param file  上传文件源
         * @param filePath 存放路径
         */
        public void readExcel(MultipartFile file, String filePath) {
            FileOutputStream fos =null;
            InputStream is = null;
            Workbook workbook = null;
            String filename = file.getOriginalFilename();//文件名
            try {
                is = file.getInputStream();//获取流
                //根据文件后缀名判断创建什么工作簿
                assert filename != null;
                String substring = filename.substring(filename.lastIndexOf(".") + 1);
                System.out.println("substring = " + substring);
                if ("xls".equals(substring)){
                    workbook = new HSSFWorkbook(is);
                }else if ("xlsx".equals(substring)){
                    workbook = new XSSFWorkbook(is);
                }
                assert workbook != null;
                boolean res = readExcel(is,workbook);//调用读方法
                if (res){
                    fos = new FileOutputStream(new File(filePath+filename));
                    workbook.write(fos);//生成文件,放入指定路径
                }
            } catch (Exception e){
                e.printStackTrace();
            } finally {
                try {
                    if (fos != null){
                        fos.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    if (is != null){
                        is.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //读并打印
        public boolean readExcel(InputStream is,Workbook workbook){
            Sheet sheet =null;
            Row row =null;
            Cell cell =null;
            int a = 0;//遍历完一个表就+1,如果和表数量一致就是遍历完成
            int sheets = workbook.getNumberOfSheets();//一共有几个表
            for (int i = 0; i < sheets; i++) {
                sheet = workbook.getSheetAt(i);
                row = sheet.getRow(i);
                if (row!=null){
                    //第一行一共有几个单元格
                    int title = row.getPhysicalNumberOfCells();
                    for (int j = 0; j < title; j++) {
                        cell = row.getCell(j);
                        if(cell!=null){
                            CellType cellType = cell.getCellType();
                            //System.out.println(cellType);
                            String stringCellValue = cell.getStringCellValue();
                            System.out.print(stringCellValue+"  |  ");
                        }
                    }
                }
                System.out.println();
                //获取多少行
                int numberOfRows = sheet.getPhysicalNumberOfRows();
                for (int k = 1; k < numberOfRows; k++) {
                    Row row1 = sheet.getRow(k);
                    if (row1!=null){
                        int cells = row1.getPhysicalNumberOfCells();
                        for (int m = 0; m < cells; m++) {
                            cell = row1.getCell(m);
                            if (cell!=null){
                                CellType cellType = cell.getCellType();
                                String cv="";
                                /**
                                 *  _NONE(-1),
                                 *     NUMERIC(0),
                                 *     STRING(1),
                                 *     FORMULA(2),
                                 *     BLANK(3),
                                 *     BOOLEAN(4),
                                 *     ERROR(5);
                                 */
                                switch (cellType){
                                    case _NONE://
                                        break;
                                    case NUMERIC://日期 普通数字
                                        if (DateUtil.isCellDateFormatted(cell)){
                                            Date date = cell.getDateCellValue();
                                            cv = new DateTime(date).toString();
                                            System.out.println("[日期]");
                                        }else {//转换为字符串输出
                                            // 先获取数据
                                            double cellValue = cell.getNumericCellValue();
                                            //直接强转String类型会出现数字编程科学计数法问题
                                            cv=new BigDecimal(String.valueOf(cellValue))
                                                    .stripTrailingZeros()//去除末尾的0
                                                    .toPlainString();//输出时不用科学计数法
                                            System.out.print("[数字]");
                                        }
    
                                        break;
                                    case STRING://字符串
                                        cv=cell.getStringCellValue();
                                        break;
                                    case BLANK:
                                        break;
                                    case ERROR://数据类型错误
                                        System.out.println("数据错误");
                                        break;
                                    case BOOLEAN://布尔
                                        cv=String.valueOf(cell.getBooleanCellValue());
                                        break;
                                    case FORMULA://公式
                                        //拿到计算公式
                                        FormulaEvaluator fe = new HSSFFormulaEvaluator((HSSFWorkbook) workbook);
    
                                        String cellFormula = cell.getCellFormula();
                                        //内容值:SUM(D2:D3)
                                        System.out.println("内容值:"+cellFormula);
                                        //计算
                                        CellValue evaluate = fe.evaluate(cell);
                                        String s = evaluate.toString();
                                        //org.apache.poi.ss.usermodel.CellValue [25.0]
                                        System.out.println(s);
                                        break;
                                }
                                System.out.print(cv+"  |  ");
                            }
                        }
                        System.out.println();
                    }
                }
                System.err.println("表"+i+"完:"+sheet.getSheetName());
                a++;
            }
            return a == sheets;
        }
        //网页上面下载Excel文件
        public void writeExcel(String sheetName,//sheet名字
                               List<Tab_car> bodyList,//要输出的对象集合
                               HttpServletResponse response){//服务响应
            //创建工作簿
            Workbook workbook = new SXSSFWorkbook();
            //创建一个sheet表
            Sheet sheet = workbook.createSheet(sheetName);
            //写数据
            // 创建一行
            Row row = sheet.createRow(0);
            row.createCell(0).setCellValue("品牌");
            row.createCell(1).setCellValue("车牌号");
            row.createCell(2).setCellValue("容量座位");
            row.createCell(3).setCellValue("颜色");
            row.createCell(4).setCellValue("价格");
            row.createCell(5).setCellValue("时间");
            row.createCell(6).setCellValue("状态");
            // 定义样式
            CellStyle cellStyle = workbook.createCellStyle();
            //内容
            for (int i = 0; i < bodyList.size(); i++) {
                Row row1 = sheet.createRow(i+1);
                Tab_car tab_car = bodyList.get(i);
                row1.createCell(0).setCellValue(tab_car.getCarLogo());
                row1.createCell(1).setCellValue(tab_car.getCarNumber());
                row1.createCell(2).setCellValue(tab_car.getCarZuo());
                row1.createCell(3).setCellValue(tab_car.getCarColor());
                row1.createCell(4).setCellValue(tab_car.getCarPrice().toString());
                String time = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(tab_car.getCarTime());
                row1.createCell(5).setCellValue(time);
                row1.createCell(6).setCellValue(tab_car.getCarStatus());
            }
            //模拟文件,myfile.txt为需要下载的文件
            //String path = "E:\\"+fileName+".xlsx";
           // new File(path)
           // FileOutputStream fos = new FileOutputStream(path);
           // workbook.write(fos);
            ServletOutputStream outputStream = null;
            try{
                //响应防止乱码
                response.setContentType("multipart/form-data");
                // 传递中文参数编码
                String codedFileName = java.net.URLEncoder.encode("汽车信息","UTF-8");
                response.setHeader("content-disposition", "attachment;filename=" + codedFileName + ".xlsx");
                outputStream = response.getOutputStream();
                workbook.write(outputStream);
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                if (outputStream!=null){
                    try {
                        outputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    3.服务使用

        //下载
        @RequestMapping("/downloadCarIno")
        @ResponseBody
        public void dci(HttpServletResponse response){
         //从数据库中查出的数据 List
    <Tab_car> carList = carService.selectAll(); new ExcelPoi().writeExcel("车辆信息",carList,response); }
  • 相关阅读:
    剖析startup_stm32f407xx.s文件
    我们无法在此设备上激活windows,因为无法连接到你的组织的激活服务器。请确保已连接到你的组织服务器,然后重试。如果仍存在激活问题,请联系组织的支持人员,错误代码:ox80070078
    【DW·智慧海洋(捕鱼作业分析)打卡】task05_模型融合 (简单辨析了一下stacking和blending)
    【DW·智慧海洋(捕鱼作业分析)打卡】task04_模型建立
    【心跳信号分类预测】Datawhale打卡- Task05 模型融合 (尝试记录)
    【心跳信号分类预测】Datawhale打卡- Task4 建模与调参 (贝叶斯搜索调参调包实践)
    【心跳信号分类预测】Datawhale打卡- Task03 特征工程
    【DW·智慧海洋(捕鱼作业分析)打卡】task03_特征工程 (复现top的各种特征工程:分箱特征、网格特征、统计特征、Embedding特征)
    【DW·智慧海洋(捕鱼作业分析)打卡】task02_数据分析 (刺网/围网/拖网)
    【DW·智慧海洋(捕鱼作业分析)打卡】task01_地理数据分析常用工具
  • 原文地址:https://www.cnblogs.com/9080dlb/p/15713320.html
Copyright © 2011-2022 走看看