POI 5.2.2 版本 excel 转json,json转excel 工具类

添加依赖:

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.2.83</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.2</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-excelant</artifactId>
    <version>5.2.2</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.2</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>4.1.2</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>5.2.2</version>
</dependency>

 添加属性:

<properties>
     <java.version>1.8</java.version>
     <log4j2.version>2.17.1</log4j2.version>
</properties>

工具类:

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.*;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Set;


public class ExcelUtil {

    /**
     * 读取某一个单元格值
     *
     * @param cell
     * @return
     * @throws Exception
     */
    public static Object getCellValueByCell(Cell cell) throws Exception {
        //判断是否为null或空串
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat sdv = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
        if (cell == null || cell.toString().trim().equals("")) {
            return "";
        }
        Object value = null;
        CellType cellType = cell.getCellType();
        if (cell instanceof XSSFCell){
            if (CellType.BLANK == cellType) {
                value = null;
            } else if (CellType.BOOLEAN == cellType) {
                value = cell.getBooleanCellValue();
            } else if (CellType.ERROR == cellType) {
                value = cell.getErrorCellValue();
            } else if (CellType.FORMULA == cellType) {
                value = cell.getNumericCellValue();
            } else if (CellType.NUMERIC == cellType) {
                if (DateUtil.isCellDateFormatted(cell)) {
                    Date date = (Date) sdv.parse(cell.getDateCellValue().toString()); //将读出的时间进行格式转化,
                    value = sdf.format(date);//最终输出格式为 yyyy-MM-dd HH:mm:ss
                } else {
                    value = new DecimalFormat("0.########").format(cell.getNumericCellValue());
                }
            } else if (CellType.STRING == cellType) {
                value = cell.getStringCellValue() == null ? "" : cell.getStringCellValue().trim();
            } else {
                throw new Exception("不能识别类型!");
            }
        }
        if (cell instanceof HSSFCell){
            if (CellType.BLANK == cellType) {
                value = null;
            } else if (CellType.BOOLEAN == cellType) {
                value = cell.getBooleanCellValue();
            } else if (CellType.ERROR == cellType) {
                value = cell.getErrorCellValue();
            } else if (CellType.FORMULA == cellType) {
                value = cell.getNumericCellValue();
            } else if (CellType.NUMERIC == cellType) {
                if (DateUtil.isCellDateFormatted(cell)) {
                    Date date = (Date) sdv.parse(cell.getDateCellValue().toString()); //将读出的时间进行格式转化,
                    value = sdf.format(date);//最终输出格式为 yyyy-MM-dd HH:mm:ss
                } else {
                    value = new DecimalFormat("0.########").format(cell.getNumericCellValue());
                }
            } else if (CellType.STRING == cellType) {
                value = cell.getStringCellValue() == null ? "" : cell.getStringCellValue().trim();
            } else {
                throw new Exception("不能识别类型!");
            }
        }

        return value;
    }

    /**
     * 读取Excel文件转成json
     * @param path excel文件全路径
     * @return
     * @throws IOException
     */
    public static String readExcel(String path) throws IOException {
        JSONArray array = new JSONArray();
        InputStream is = null;
        Workbook workbook = null;
        try {
            is = new FileInputStream(path);
            workbook = create(is);
            //获得第一个工作表对象(ecxel中sheet的编号从0开始,0,1,2,3,....)
            Sheet sheet = workbook.getSheetAt(0);
            Row row = sheet.getRow(0);
            for (int i = 1; i <= sheet.getLastRowNum(); i++) { //从第二行开始读取数据,第一行数据为key,
                JSONObject object = new JSONObject();
                Row r = sheet.getRow(i); //第2行开始是数据行
                for (int j = 0; j < row.getLastCellNum(); j++) {
                    Cell cell = r.getCell(j);
                    object.put(getCellValueByCell(sheet.getRow(0).getCell(j)).toString(), getCellValueByCell(cell));
                }
                array.add(object);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            workbook.close();
            is.close();
        }
        return array.toString();
    }


    public static Workbook create(InputStream inp) throws IOException, InvalidFormatException {
        if (!inp.markSupported()) {
            inp = new PushbackInputStream(inp, 8);
        }
        return WorkbookFactory.create(inp);
    }

    /**
     * 根据jsonArray 导出excel
     * @param jsonString json数组
     * @param path  excel导出文件全路径
     * @throws IOException
     */
    public static void writeExcel(String jsonString,String path) throws IOException {
        Set<String> keys = null;
        // 创建HSSFWorkbook对象
        XSSFWorkbook wb = new XSSFWorkbook();
        // 创建HSSFSheet对象
        XSSFSheet sheet = wb.createSheet("sheet0");

        int roleNo = 0;
        int rowNo = 0;
        JSONArray jsonArray = JSONArray.parseArray(jsonString);
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject jsonObject =jsonArray.getJSONObject(i);
            // 创建HSSFRow对象
            XSSFRow row = sheet.createRow(roleNo++);
            // 创建HSSFCell对象
            if (keys == null) {
                //标题
                keys = jsonObject.keySet();
                for (String s : keys) {
                    XSSFCell cell = row.createCell(rowNo++);
                    cell.setCellValue(s);
                }
                rowNo = 0;
                row = sheet.createRow(roleNo++);
            }
            for (String s : keys) {
                XSSFCell cell = row.createCell(rowNo++);
                cell.setCellValue(jsonObject.getString(s));
            }
            rowNo = 0;
        }

        try (FileOutputStream output = new FileOutputStream(path)) {
            // 输出Excel文件
            wb.write(output);
            wb.close();
            output.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 根据jsonArray 导出excel
     * @param jsonObjectList json数组
     * @param path  excel导出文件全路径
     * @throws IOException
     */
    public static void writeExcel(List<JSONObject> jsonObjectList, String path) throws IOException {
        Set<String> keys = null;
        // 创建HSSFWorkbook对象
        XSSFWorkbook wb = new XSSFWorkbook();
        // 创建HSSFSheet对象
        XSSFSheet sheet = wb.createSheet("sheet0");

        int roleNo = 0;
        int rowNo = 0;
        for (int i = 0; i < jsonObjectList.size(); i++) {
            JSONObject jsonObject =jsonObjectList.get(i);
            // 创建HSSFRow对象
            XSSFRow row = sheet.createRow(roleNo++);
            // 创建HSSFCell对象
            if (keys == null) {
                //标题
                keys = jsonObject.keySet();
                for (String s : keys) {
                    XSSFCell cell = row.createCell(rowNo++);
                    cell.setCellValue(s);
                }
                rowNo = 0;
                row = sheet.createRow(roleNo++);
            }
            for (String s : keys) {
                XSSFCell cell = row.createCell(rowNo++);
                cell.setCellValue(jsonObject.getString(s));
            }
            rowNo = 0;
        }

        try (FileOutputStream output = new FileOutputStream(path)) {
            // 输出Excel文件
            wb.write(output);
            wb.close();
            output.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
注:下文中的 *** 代表文件名中的版本号。 # 【poi-ooxml-***.jar中文文档.zip】 中包含: 中文文档:【poi-ooxml-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【poi-ooxml-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【poi-ooxml-***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【poi-ooxml-***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【poi-ooxml-***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: poi-ooxml-***.jar中文文档.zip,java,poi-ooxml-***.jar,org.apache.poi,poi-ooxml,***,org.apache.poi.ooxml,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,apache,poi,ooxml,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【poi-ooxml-***.jar中文文档.zip】,再解压其中的 【poi-ooxml-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件; # Maven依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>***</version> </dependency> ``` # Gradle依赖: ``` Gradle: implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '***' Gradle (Short): implementation 'org.apache.poi:poi-ooxml:***' Gradle (Kotlin): implementation("org.apache.poi:poi-ooxml:***") ``` # 含有的 Java package(包)(此处仅列举3个): ``` org.apache.poi.ooxml org.apache.poi.ooxml.dev org.apache.poi.ooxml.extractor ...... ``` # 含有的 Java class(类)(此处仅列举3个): ``` org.apache.poi.ooxml.POIXMLDocument org.apache.poi.ooxml.POIXMLDocumentPart org.apache.poi.ooxml.POIXMLDocumentPart.RelationPart ...... ```
POI 5.2.2 是Apache POI的一个版本,它是用于读写和操作Microsoft Office格式文件的Java库。如果您要使用POI 5.2.2来操作Excel文件,可以按照以下步骤进行: 1. 下载POI 5.2.2 jar文件,可以从Apache的官网或者Maven仓库中下载。 2. 创建一个Java项目并将POI jar文件添加到项目的类路径中。 3. 在Java代码中使用POI API来读取和写入Excel文件。下面是一个简单的示例代码: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; import java.io.*; public class PoiExample { public static void main(String[] args) throws Exception { // Create a new Excel workbook XSSFWorkbook workbook = new XSSFWorkbook(); // Create a new sheet in the workbook XSSFSheet sheet = workbook.createSheet("Sheet1"); // Create a new row in the sheet XSSFRow row = sheet.createRow(0); // Create a new cell in the row and set the value XSSFCell cell = row.createCell(0); cell.setCellValue("Hello, World!"); // Write the workbook to a file FileOutputStream fileOut = new FileOutputStream("workbook.xlsx"); workbook.write(fileOut); fileOut.close(); // Clean up workbook.close(); } } ``` 这个示例程序创建了一个名为"Sheet1"的工作表,并在第一行第一列中添加了一个单元格,然后将工作簿写入到名为"workbook.xlsx"的文件中。 4. 运行代码并检查生成的Excel文件是否包含预期的内容。 以上就是使用POI 5.2.2来操作Excel文件的基本步骤。如果您需要操作其他类型的Microsoft Office格式文件,可以查看POI的官方文档以获取更多信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值