poi 读与写

poi和easyEccel

  • 对象的区别,文件后缀

  • xls行数最多65536 HSSFWorkbook 写速度快,但是读写数量有限

  • xlsx行数最多65536 更多 XSSFWorkbook 耗内存 速度慢,读写量大

  • 谨记最后记得关闭流,避免耗费内存
    poi 读与写_第1张图片
    poi 读与写_第2张图片

  • 生成表格

package com.liang.poi;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.joda.time.DateTime;
import org.junit.Test;

import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class poiTestWrite {
    @Test//poi-execl写
    public void testWrite03() throws IOException {
        String PATH = "D:\\IdeaStudySpace\\poi";
        //创建一个工作薄
        Workbook workbook = new HSSFWorkbook();
        //创建一个工作表
        Sheet sheet = workbook.createSheet();
        //创建一个行
        Row row1 = sheet.createRow(0);
        //创建一个单元格
        Cell cell11 = row1.createCell(0);
        cell11.setCellValue("梁伟浩");

        Cell cell12 = row1.createCell(1);
        cell12.setCellValue("周末学习poi");

        //第二行
        Row row2 = sheet.createRow(1);
        Cell cell21 = row2.createCell(0);
        cell21.setCellValue("学习时间");
        //(2,2)
        Cell cell22 = row2.createCell(1);
        String time = new DateTime().toString("yyyy年mm月dd日 HH时mm分ss秒");
        cell22.setCellValue(time);
        //生成表(io流)
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "梁伟浩学习poi03.xls");
        //输出
        workbook.write(fileOutputStream);
        //关闭流
        fileOutputStream.close();

        System.out.println("io文件输出成功!!!!!!!!!!2022-12-10");

    }

    @Test
    public void testWrite07() throws IOException {
        String PATH = "D:\\IdeaStudySpace\\poi";
        //创建一个工作薄
        Workbook workbook = new XSSFWorkbook();
        //创建一个工作表
        Sheet sheet = workbook.createSheet();
        //创建一个行
        Row row1 = sheet.createRow(0);
        //创建一个单元格
        Cell cell11 = row1.createCell(0);
        cell11.setCellValue("梁伟浩");

        Cell cell12 = row1.createCell(1);
        cell12.setCellValue("周末学习poi");

        //第二行
        Row row2 = sheet.createRow(1);
        Cell cell21 = row2.createCell(0);
        cell21.setCellValue("学习时间");
        //(2,2)
        Cell cell22 = row2.createCell(1);
        String time = new SimpleDateFormat("yyyy年mm月dd日 HH时mm分ss秒").format(new Date());
        cell22.setCellValue(time);
        //生成表(io流)
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "梁伟浩学习poi07.xls");
        //输出
        workbook.write(fileOutputStream);
        //关闭流
        fileOutputStream.close();

        System.out.println("io文件输出成功!!!!!!!!!!2022-12-10");

    }

    @Test
    public void testWrite03BigData() throws IOException {
       long beginTIME = System.currentTimeMillis();
        String PATH = "D:\\IdeaStudySpace\\poi";
        //创建一个工作薄
        Workbook workbook = new HSSFWorkbook();
        //创建一个工作表
        Sheet sheet = workbook.createSheet();
        for (int rowNum = 0; rowNum < 65536; rowNum++) {
            Row row = sheet.createRow(rowNum);
            for (int cellrow = 0; cellrow < 10;cellrow++) {
                Cell cell = row.createCell(cellrow);
                cell.setCellValue(cellrow);
            }
        }
        System.out.println("over");
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "testWrite03BigData.xls");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        long endTIME = System.currentTimeMillis();
        System.out.println((double) endTIME-beginTIME/1000);//秒 时间差
        System.out.println("io文件输出成功!!!!!!!!!!2022-12-10");

    }

    @Test
    public void testWrite07BigData() throws IOException {
        long beginTIME = System.currentTimeMillis();
        String PATH = "D:\\IdeaStudySpace\\poi";
        //创建一个工作薄
        Workbook workbook = new XSSFWorkbook();
        //创建一个工作表
        Sheet sheet = workbook.createSheet();
        for (int rowNum = 0; rowNum < 65537; rowNum++) {
            Row row = sheet.createRow(rowNum);
            for (int cellrow = 0; cellrow < 10;cellrow++) {
                Cell cell = row.createCell(cellrow);
                cell.setCellValue(cellrow);
            }
        }
        System.out.println("over");
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "testWrite07BigData.xls");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        long endTIME = System.currentTimeMillis();
        System.out.println((double) endTIME-beginTIME/1000);//秒 时间差
        System.out.println("io文件输出成功!!!!!!!!!!2022-12-10");

    }
}

  • 读取表格

    @Test  //poi-execl读
    public void poiTestRead1() throws IOException {

        //获取文件流
        FileInputStream fileInputStream = new FileInputStream(PATH + "梁伟浩学习poi03.xls");
        //1。创建一个工作薄
        Workbook workbook = new HSSFWorkbook(fileInputStream);
        //2.得到表
        Sheet sheetAt = workbook.getSheetAt(0);
        //3.得到行
        Row row = sheetAt.getRow(0);
        //4.得到列  得到第一行第一列的值
        Cell cell = row.getCell(1);

        //获取字符串getStringCellValue
        //读取值注意类型,不然会报错  case判断
        System.out.println(cell.getStringCellValue());
        fileInputStream.close();

        //生成表(io流)
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "梁伟浩学习poi07.xls");
        //输出
        workbook.write(fileOutputStream);
        //关闭流
        fileOutputStream.close();

        System.out.println("io文件输出成功!!!!!!!!!!2022-12-10");

    }
  • 读取的时候注意类型判断
package com.kuang;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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.junit.Test;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;

public class ExcelTest {

	String path = "D:\\狂神说Java\\【狂神】小专题\\POI-EasyExcel\\Bilibili-狂神说java\\kuang-poi\\";

	@Test
	public void testFormula() throws Exception{

		InputStream is = new FileInputStream(path + "计算公式.xls");

		Workbook workbook = new HSSFWorkbook(is);
		Sheet sheet = workbook.getSheetAt(0);

		// 读取第五行第一列
		Row row = sheet.getRow(4);
		Cell cell = row.getCell(0);

		//公式计算器
		FormulaEvaluator formulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) workbook);

		// 输出单元内容
		int cellType = cell.getCellType();
		switch (cellType) {
			case Cell.CELL_TYPE_FORMULA://2

				//得到公式
				String formula = cell.getCellFormula();
				System.out.println(formula);

				CellValue evaluate = formulaEvaluator.evaluate(cell);
				//String cellValue = String.valueOf(evaluate.getNumberValue());
				String cellValue = evaluate.formatAsString();
				System.out.println(cellValue);

				break;
		}
	}

	@Test
	public void testRead03() throws Exception{
		InputStream is = new FileInputStream(path+"狂神观众统计表03.xls");

		Workbook workbook = new HSSFWorkbook(is);
		Sheet sheet = workbook.getSheetAt(0);

		// 读取第一行第一列
		Row row = sheet.getRow(0);
		Cell cell = row.getCell(0);

		// 输出单元内容
		System.out.println(cell.getStringCellValue());

		// 操作结束,关闭文件
		is.close();
	}

	@Test
	public void testRead07() throws Exception{
		InputStream is = new FileInputStream(path+"/狂神观众统计表07.xlsx");

		Workbook workbook = new XSSFWorkbook(is);
		Sheet sheet = workbook.getSheetAt(0);

		// 读取第一行第一列
		Row row = sheet.getRow(0);
		Cell cell = row.getCell(0);

		// 输出单元内容
		System.out.println(cell.getStringCellValue());

		// 操作结束,关闭文件
		is.close();
	}

	@Test
	public void testCellType() throws Exception {

		InputStream is = new FileInputStream(path+"/会员消费商品明细表.xls");
		Workbook workbook = new HSSFWorkbook(is);
		Sheet sheet = workbook.getSheetAt(0);

		// 读取标题所有内容
		Row rowTitle = sheet.getRow(0);
		if (rowTitle != null) {// 行不为空
			// 读取cell
			int cellCount = rowTitle.getPhysicalNumberOfCells();
			for (int cellNum = 0; cellNum < cellCount; cellNum++) {
				Cell cell = rowTitle.getCell(cellNum);
				if (cell != null) {
					int cellType = cell.getCellType();
					String cellValue = cell.getStringCellValue();
					System.out.print(cellValue + "|");
				}
			}
			System.out.println();
		}

		// 读取商品列表数据
		int rowCount = sheet.getPhysicalNumberOfRows();
		for (int rowNum = 1; rowNum < rowCount; rowNum++) {

			Row rowData = sheet.getRow(rowNum);
			if (rowData != null) {// 行不为空

				// 读取cell
				int cellCount = rowTitle.getPhysicalNumberOfCells();
				for (int cellNum = 0; cellNum < cellCount; cellNum++) {

					System.out.print("【" + (rowNum + 1) + "-" + (cellNum + 1) + "】");

					Cell cell = rowData.getCell(cellNum);
					if (cell != null) {

						int cellType = cell.getCellType();

						//判断单元格数据类型
						String cellValue = "";
						switch (cellType) {
							case HSSFCell.CELL_TYPE_STRING://字符串
								System.out.print("【STRING】");
								cellValue = cell.getStringCellValue();
								break;

							case HSSFCell.CELL_TYPE_BOOLEAN://布尔
								System.out.print("【BOOLEAN】");
								cellValue = String.valueOf(cell.getBooleanCellValue());
								break;

							case HSSFCell.CELL_TYPE_BLANK://System.out.print("【BLANK】");
								break;

							case HSSFCell.CELL_TYPE_NUMERIC:
								System.out.print("【NUMERIC】");
								//cellValue = String.valueOf(cell.getNumericCellValue());

								if (HSSFDateUtil.isCellDateFormatted(cell)) {//日期
									System.out.print("【日期】");
									Date date = cell.getDateCellValue();
									cellValue = new DateTime(date).toString("yyyy-MM-dd");
								} else {
									// 不是日期格式,则防止当数字过长时以科学计数法显示
									System.out.print("【转换成字符串】");
									cell.setCellType(HSSFCell.CELL_TYPE_STRING);
									cellValue = cell.toString();
								}
								break;

							case Cell.CELL_TYPE_ERROR:
								System.out.print("【数据类型错误】");
								break;
						}

						System.out.println(cellValue);
					}
				}
			}
		}

		is.close();
	}

	@Test
	public void testWrite03() throws IOException {

		// 创建新的Excel 工作簿
		Workbook workbook = new HSSFWorkbook();

		// 在Excel工作簿中建一工作表,其名为缺省值 Sheet0
		//Sheet sheet = workbook.createSheet();

		// 如要新建一名为"会员登录统计"的工作表,其语句为:
		Sheet sheet = workbook.createSheet("狂神观众统计表");

		// 创建行(row 1)
		Row row1 = sheet.createRow(0);

		// 创建单元格(col 1-1)
		Cell cell11 = row1.createCell(0);
		cell11.setCellValue("今日新增关注");

		// 创建单元格(col 1-2)
		Cell cell12 = row1.createCell(1);
		cell12.setCellValue(999);

		// 创建行(row 2)
		Row row2 = sheet.createRow(1);

		// 创建单元格(col 2-1)
		Cell cell21 = row2.createCell(0);
		cell21.setCellValue("统计时间");

		//创建单元格(第三列)
		Cell cell22 = row2.createCell(1);
		String dateTime = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
		cell22.setCellValue(dateTime);

		// 新建一输出文件流(注意:要先创建文件夹)
		FileOutputStream out = new FileOutputStream(path+"狂神观众统计表03.xls");
		// 把相应的Excel 工作簿存盘
		workbook.write(out);
		// 操作结束,关闭文件
		out.close();
        
		System.out.println("文件生成成功");
	}

	@Test
	public void testWrite07() throws IOException {

		// 创建新的Excel 工作簿, 只有对象变了
		Workbook workbook = new XSSFWorkbook();

		// 如要新建一名为"会员登录统计"的工作表,其语句为:
		Sheet sheet = workbook.createSheet("狂神观众统计表");

		// 创建行(row 1)
		Row row1 = sheet.createRow(0);

		// 创建单元格(col 1-1)
		Cell cell11 = row1.createCell(0);
		cell11.setCellValue("今日新增关注");

		// 创建单元格(col 1-2)
		Cell cell12 = row1.createCell(1);
		cell12.setCellValue(666);

		// 创建行(row 2)
		Row row2 = sheet.createRow(1);

		// 创建单元格(col 2-1)
		Cell cell21 = row2.createCell(0);
		cell21.setCellValue("统计时间");

		//创建单元格(第三列)
		Cell cell22 = row2.createCell(1);
		String dateTime = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
		cell22.setCellValue(dateTime);

		// 新建一输出文件流(注意:要先创建文件夹)
		FileOutputStream out = new FileOutputStream(path+"狂神观众统计表07.xlsx");
		// 把相应的Excel 工作簿存盘
		workbook.write(out);
		// 操作结束,关闭文件
		out.close();

		System.out.println("文件生成成功");
	}

	@Test
	public void testWrite03BigData() throws IOException {
		//记录开始时间
		long begin = System.currentTimeMillis();

		//创建一个SXSSFWorkbook
		Workbook workbook = new HSSFWorkbook();

		//创建一个sheet
		Sheet sheet = workbook.createSheet();

		//xls文件最大支持65536行
		for (int rowNum = 0; rowNum < 65536; rowNum++) {
			//创建一个行
			Row row = sheet.createRow(rowNum);
			for (int cellNum = 0; cellNum < 10; cellNum++) {//创建单元格
				Cell cell = row.createCell(cellNum);
				cell.setCellValue(cellNum);
			}
		}

		System.out.println("done");
		FileOutputStream out = new FileOutputStream(path+"bigdata03.xls");
		workbook.write(out);
		// 操作结束,关闭文件
		out.close();

		//记录结束时间
		long end = System.currentTimeMillis();
		System.out.println((double)(end - begin)/1000);
	}

	@Test
	public void testWrite07BigData() throws IOException {
		//记录开始时间
		long begin = System.currentTimeMillis();

		//创建一个XSSFWorkbook
		Workbook workbook = new XSSFWorkbook();

		//创建一个sheet
		Sheet sheet = workbook.createSheet();

		//xls文件最大支持65536行
		for (int rowNum = 0; rowNum < 100000; rowNum++) {
			//创建一个行
			Row row = sheet.createRow(rowNum);
			for (int cellNum = 0; cellNum < 10; cellNum++) {//创建单元格
				Cell cell = row.createCell(cellNum);
				cell.setCellValue(cellNum);
			}
		}

		System.out.println("done");
		FileOutputStream out = new FileOutputStream(path+"bigdata07.xlsx");
		workbook.write(out);
		// 操作结束,关闭文件
		out.close();

		//记录结束时间
		long end = System.currentTimeMillis();
		System.out.println((double)(end - begin)/1000);

	}

	@Test
	public void testWrite07BigDataFast() throws IOException {
		//记录开始时间
		long begin = System.currentTimeMillis();

		//创建一个SXSSFWorkbook
		Workbook workbook = new SXSSFWorkbook();

		//创建一个sheet
		Sheet sheet = workbook.createSheet();

		//xls文件最大支持65536行
		for (int rowNum = 0; rowNum < 100000; rowNum++) {
			//创建一个行
			Row row = sheet.createRow(rowNum);
			for (int cellNum = 0; cellNum < 10; cellNum++) {//创建单元格
				Cell cell = row.createCell(cellNum);
				cell.setCellValue(cellNum);
			}
		}

		System.out.println("done");
		FileOutputStream out = new FileOutputStream(path+"bigdata07-fast.xlsx");
		workbook.write(out);
		// 操作结束,关闭文件
		out.close();

		//清除临时文件
		((SXSSFWorkbook)workbook).dispose();

		//记录结束时间
		long end = System.currentTimeMillis();
		System.out.println((double)(end - begin)/1000);
	}

}
  • xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.kuang</groupId>
    <artifactId>kuang-poi</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--xls(03)-->
        <!--<dependency>-->
            <!--<groupId>org.apache.poi</groupId>-->
            <!--<artifactId>poi</artifactId>-->
            <!--<version>3.9</version>-->
        <!--</dependency>-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.7</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
        <!--xlsx(07)-->
        <!--<dependency>-->
            <!--<groupId>org.apache.poi</groupId>-->
            <!--<artifactId>poi-ooxml</artifactId>-->
            <!--<version>3.9</version>-->
        <!--</dependency>-->

        <!--日期格式化工具-->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.10.1</version>
        </dependency>

        <!--test-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
    
</project>

你可能感兴趣的:(java,学习笔记,java,开发语言)