Java完成POI的功能

  POM文件             <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.nekohtml</groupId>
            <artifactId>nekohtml</artifactId>
            <version>1.9.15</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
实体bean

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TRole {
    private Integer id;

    private String name;

    private Integer age;
}
/**
*Excel工具类
*/
public class ExcelUtil {

    public static final String FILE_NAME = "用户表";

    public static final String EXCEL_XLS = "xls";
    public static final String EXCEL_XLSX = "xlsx";

    public static boolean isExcelXls(String filePath) {
        return filePath.matches("^.+\\.(?i)(xls)$");
    }

    public static boolean isExcelXlsx(String filePath) {

        return filePath.matches("^.+\\.(?i)(xlsx)$");
    }

    /**
     * 有些单元格为Numeric格式,带有指数E。因此,若想获取其String类型时,需要进行格式转换。
     *
     * @param cell
     * @return
     */
    public static String getStringFromNumericCell(Cell cell) {
        return new DecimalFormat("#").format(cell.getNumericCellValue());
    }

    /**
     * 通过WorkBook对象和sheet对象生成title
     *
     * @param wb    WorkBook对象
     * @param sheet sheet对象
     */
    public static void createTitle(Workbook wb, Sheet sheet) {
        //生成表的标题行
        Row row = sheet.createRow(0);
        //设置列宽
        sheet.setColumnWidth(1, 12 * 256);
        sheet.setColumnWidth(3, 17 * 256);
        //设置风格:字体加粗,居中
        CellStyle cellStyle = wb.createCellStyle();
        cellStyle.setAlignment(HorizontalAlignment.CENTER);
        Font font = wb.createFont();
        font.setBold(true);
        cellStyle.setFont(font);
        //根据对象属性设置单元格标题
        Cell cell0 = row.createCell(0);
        cell0.setCellValue("ID");
        cell0.setCellStyle(cellStyle);
        Cell cell1 = row.createCell(1);
        cell1.setCellValue("name");
        cell1.setCellStyle(cellStyle);
        Cell cell2 = row.createCell(2);
        cell2.setCellValue("age");
        cell2.setCellStyle(cellStyle);
    }

    /**
     * 生成文件在本地
     * @param fileName
     * @param wb
     */
    public static void buildExcelFile(String fileName, Workbook wb) {
        try {
            FileOutputStream fos = new FileOutputStream(fileName);
            wb.write(fos);
            fos.flush();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * 返回给浏览器
     * @param fileName
     * @param wb
     * @param response
     */
    public static void buildExcelFile(String fileName, Workbook wb, HttpServletResponse response) {
        try {
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
            ServletOutputStream outputStream = response.getOutputStream();
            wb.write(outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
/***Controller层操作,省略service和dao*/

@Controller@RequestMapping("/excel")public class ExcelController {

    @Autowired    ExcelService excelService;

    @RequestMapping("/")    public String toIndex() {        return "excel";    }

    @ResponseBody    @RequestMapping("/download/{way}")    public String excelFileDownload(@PathVariable String way, HttpServletResponse response) throws IOException {        Workbook wb = null;        String filename = ExcelUtil.FILE_NAME;        if (ExcelUtil.EXCEL_XLS.equals(way)) {            wb = new HSSFWorkbook();            filename += ".xls";        } else if ((ExcelUtil.EXCEL_XLSX.equals(way))) {            wb = new XSSFWorkbook();            filename += ".xlsx";        }        Sheet sheet = wb.createSheet("角色表");        ExcelUtil.createTitle(wb, sheet);

        //从数据库查出数据        List<TRole> tRoles = excelService.getAllRoles();        //记录新增行数据        int rowNum = 1;        for (TRole tRole : tRoles) {            Row row = sheet.createRow(rowNum);            row.createCell(0).setCellValue(tRole.getId());            row.createCell(1).setCellValue(tRole.getName());            row.createCell(2).setCellValue(tRole.getAge());            rowNum++;        }        //生成excel文件(在当前文件夹下)        //ExcelUtil.buildExcelFile(filename, wb);        //浏览器下载excel        ExcelUtil.buildExcelFile(filename, wb, response);        wb.close();        return "File downloaded successfully";

    }

    @ResponseBody    @RequestMapping("/upload")    public String excelFileUpload(MultipartFile file) throws IOException {        Workbook wb = null;        List<TRole> tRoleList = new ArrayList<>();        if (!ExcelUtil.isExcelXlsx(file.getOriginalFilename()) && !ExcelUtil.isExcelXls(file.getOriginalFilename())) {

            return "The file must be of excel type";        }        if (file.getOriginalFilename() == null || file.getOriginalFilename().equals("") || file.getSize() == 0) {            return "The file cannot be empty";        }        try {            if (ExcelUtil.isExcelXlsx(file.getOriginalFilename())) {                wb = new XSSFWorkbook(file.getInputStream());            } else {                wb = new HSSFWorkbook(file.getInputStream());            }            //获取第一张表(默认就设置成1张表吧)            Sheet sheet = wb.getSheetAt(0);            //获取行数            int rowsNum = sheet.getPhysicalNumberOfRows();            //遍历行            for (int i = 0; i < rowsNum; i++) {                //标题行省略                if (i == 0) {                    continue;                }                Row row = sheet.getRow(i);                //遍历每行的单元格//                for (int j=0;j<row.getPhysicalNumberOfCells();j++){//                    Cell cell = row.getCell(j);//                }                //这里我们直接操作具体的单元格                Integer id = Integer.valueOf(Double.valueOf(row.getCell(0).getNumericCellValue()).intValue());                String name = row.getCell(1).getStringCellValue();                Integer age = Integer.valueOf(Double.valueOf(row.getCell(2).getNumericCellValue()).intValue());                TRole tRole = new TRole(id, name, age);                tRoleList.add(tRole);            }

        } catch (IOException e) {            e.printStackTrace();        } finally {            wb.close();        }        return JSON.toJSONString(tRoleList);    }}

原文地址:https://www.cnblogs.com/hucheng1997/p/11426086.html

时间: 2024-11-03 10:23:08

Java完成POI的功能的相关文章

java通过POI技术操作Excel(2)----模板读取,录入数据

先来回顾下通常把java对Excel的操作分为以下功能:1.生成模板,导出模板:2.填充模板,录入数据:3:读取数据库数据,导出数据:在上一篇博文中,我简单记录了模板生成和导出,在这篇博文中,主要来记录--Excel文件导入,数据录入(仍然是以jsp+servlet为例) 既然要解决这个问题,那首先来分析下我们需要面对的有哪些需求需要实现: 1.Excel文件导入(这是最基础的,巧妇难为无米之炊,导入环节也是查了好久才完成的); 2.Excel文件中数据的格式判定,你要读取文件,如果文件中其实没

Java中读取Excel功能实现_POI

这里使用apache的poi进行读取excel 1,新建javaproject 项目:TestExcel 2,导入包 包下载地址:http://poi.apache.org/download.html#POI-3.10-FINAL 百度网盘下载:http://pan.baidu.com/s/1i365mQT 导入根目录下.lib.ooxml-lib下的所有jar 4,操作读取excel import java.io.File; import java.io.IOException; import

Java中Excel导入功能实现、excel导入公共方法_POI -

这是一个思路希望能帮助到大家:如果大家有更好的解决方法希望分享出来 公司导入是这样做的 每个到导入的地方 @Override public List<DataImportMessage> materialDataImport2(byte[] fileBytes, String fileName) { //return DataImport(fileBytes, fileName, "inv_m"); File file = FileUtils.getFileFromByte

java 使用 poi 解析excel

背景: web应用经常需要上传文件,有时候需要解析出excel中的数据,如果excel的格式没有问题,那就可以直接解析数据入库. 工具选择: 目前jxl和poi可以解析excel,jxl很早就停止维护了,只支持excel-2003也就是xls格式的文件: poi可支持xls和xlsx格式的文件,经过考察,poi的功能强大很多,所以选择这个工具解析excel.文件上传在之前的一个专题有所提及. 需要如下jar包,jar包见附件,也可在官网下载. 注意: 1. 不支持单元格合并的情况,默认表格格式规

java利用poi包 为excel生成超链接

转载自:http://www.blogjava.net/leekiang/archive/2008/10/21/235794.html 1,一个需求, 要求报表生成的Excel表格支持超链接.例如点击Excel内的公司名, 自动打开浏览器并连到该公司的网站上去.在Excel里面选中所需的单元格, 右键弹出属性, 选超链接就能输入相应的地址了,既然Excel支持超链接.那就没有什么借口说不能实现了.:). 翻了翻POI的文档, 很容易就找到了解决方案.在POI中让单元格实现超链接功能, 可以用Hy

Java使用POI读取和写入Excel指南

Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0.1版本来总结一下整个读取和写入Excel的过程,希望能帮助到需要的人 ^_^ 1. 准备工作 1.1 在项目中引入Apache POI相关类库 引入 Apache POI 和 Apache POI-OOXML 这两个类库,Maven坐标如下: <depe

JAVA使用POI获取Excel的列数与行数

Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 下面这篇文章给大家介绍了JAVA使用POI获取Excel列数和行数的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧. 前言 报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑.Java程序由于其跨平台特性,不能直接操纵Excel.因此,本文探讨一下POI视线Java程序

JAVA UI 拖拽功能

java GUI拖拽功能是很实用也相对高级一些的功能. 有一小部分的GUI控件支持他们有dragEnabled属性.这些JComponent包括:javax.swing.JColorChooserjavax.swing.JFileChooserjavax.swing.JListjavax.swing.JTablejavax.swing.JTreejavax.swing.text.JTextComponent 大部分的控件不支持没有这个属性,尤其是常用的jpanel和jframe. 一种简单的方法

java使用POI实现excel文件的读取,兼容后缀名xls和xlsx

需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </depen