Poi——Excel表的基础操作(Poi入门_Day2)

本文详细介绍了使用Apache POI库进行Excel操作的方法,包括创建时间格式单元格、处理不同类型单元格内容、遍历工作簿及文本提取等核心技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

关于POI的基础的学习只有七节,为了方便大家的观看,在这里整理了一个目录,因为每一节都是层层递进的,所以如果有想看的小伙伴,推荐从第一节开始看。

学习进程

Poi——Excel表的基础操作(Poi入门_Day1)

创建一个时间格式的单元格

沿用前面学习的内容,现在在一个单元格塞一个时间格式的数据
代码:

package poi_2;

import java.io.FileOutputStream;
import java.util.Date;

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;

public class Demo1 {
	public static void main(String[] args) throws Exception {
		Workbook wb=new HSSFWorkbook();//创建一个新的工作簿
		Sheet sheet=wb.createSheet("第一个sheet页");//在这个工工作簿创建一个sheet页
		Row row=sheet.createRow(0);//创建第一行
		Cell cell=row.createCell(0);//创建第一列
		cell.setCellValue(new Date());//给单元格设置值
		FileOutputStream fileOut=new FileOutputStream("D:\\Cell.xls");
		wb.write(fileOut);
		fileOut.close();
	}
}

效果
在这里插入图片描述
改变单元格中的时间的样式
代码:

package poi_2;

import java.io.FileOutputStream;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public class Demo1 {
	public static void main(String[] args) throws Exception {
		Workbook wb=new HSSFWorkbook();//创建一个新的工作簿
		Sheet sheet=wb.createSheet("第一个sheet页");//在这个工工作簿创建一个sheet页
		Row row=sheet.createRow(0);//创建第一行
		Cell cell=row.createCell(0);//创建第一列
		cell.setCellValue(new Date());//给单元格设置值
		
		
		CreationHelper creationHelper=wb.getCreationHelper();
		CellStyle cellStyle=wb.createCellStyle();//设置单元格的样式
		cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-mm-dd hh:mm:ss"));//设置塞进的日期的类型
		cell=row.createCell(1);
		cell.setCellValue(new Date());
		cell.setCellStyle(cellStyle);//给这个单元格设置样式
		
		FileOutputStream fileOut=new FileOutputStream("D:\\Cell.xls");
		wb.write(fileOut);
		fileOut.close();
	}
}

效果
在这里插入图片描述

时间格式的输出的延展:
代码:

package poi_2;

import java.io.FileOutputStream;
import java.util.Calendar;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public class Demo1 {
	public static void main(String[] args) throws Exception {
		Workbook wb=new HSSFWorkbook();//创建一个新的工作簿
		Sheet sheet=wb.createSheet("第一个sheet页");//在这个工工作簿创建一个sheet页
		Row row=sheet.createRow(0);//创建第一行
		Cell cell=row.createCell(0);//创建第一列
		cell.setCellValue(new Date());//给单元格设置值
		
		
		CreationHelper creationHelper=wb.getCreationHelper();
		CellStyle cellStyle=wb.createCellStyle();//设置单元格的样式
		cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyy-mm-dd hh:mm:ss"));//设置塞进的日期的类型
		cell=row.createCell(1);
		cell.setCellValue(new Date());
		cell.setCellStyle(cellStyle);//给这个单元格设置样式
		
		//第二种时间格式的输入
		cell=row.createCell(2);
		cell.setCellValue(Calendar.getInstance());
		cell.setCellStyle(cellStyle);
		
		FileOutputStream fileOut=new FileOutputStream("D:\\Cell.xls");
		wb.write(fileOut);
		fileOut.close();
	}
}

效果:
在这里插入图片描述

处理不同内容格式的单元格

代码:

package poi_2;

import java.io.FileOutputStream;
import java.util.Date;

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


public class Demo2 {
	public static void main(String[] args) throws Exception {
		Workbook wb=new HSSFWorkbook();//创建一个新的工作簿
		Sheet sheet=wb.createSheet("第一个sheet页");//在这个工工作簿创建一个sheet页
		Row row=sheet.createRow(0);//创建第一行
		Cell cell=row.createCell(0);//创建第一列
		cell.setCellValue(new Date());//给单元格设置值
		
		row.createCell(1).setCellValue(1);
		row.createCell(2).setCellValue("字符串");
		row.createCell(3).setCellValue(true);
		row.createCell(4).setCellValue(HSSFCell.CELL_TYPE_NUMERIC);
		row.createCell(5).setCellValue(false);
		
		FileOutputStream fileOut=new FileOutputStream("D:\\Cell.xls");
		wb.write(fileOut);
		fileOut.close();
	}
}

效果图
在这里插入图片描述

遍历工作簿的行和列并获取单元格内容

定义一个输入流,前面我们学习的时候定义的是输出流,因为我们的最终的目的是为了把我们的数据用一个Excel表存起来,所以要把我们写的东西进行树春,输出的最终的地方就是我们的硬盘,现在我们是要进行数据的读取,所以我们需要定义一个输入流。
预先准备一个Excel
在这里插入图片描述

代码:

package poi_2;

import java.io.FileInputStream;
import java.io.InputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;


public class Demo3 {
	public static void main(String[] args) throws Exception {
		InputStream is=new FileInputStream("D:/text.xls");
		POIFSFileSystem fs=new POIFSFileSystem(is);
		HSSFWorkbook wb=new HSSFWorkbook(fs);
		HSSFSheet hssfSheet=wb.getSheetAt(0);//获取第一个工作页
		if (hssfSheet==null) {
			return;
		}
		//遍历行Row
		for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
			HSSFRow hssfRow=hssfSheet.getRow(rowNum);
			if (hssfRow==null) {
				continue;
			}
			//遍历具体的列
			for (int cellNum = 0; cellNum <= hssfRow.getLastCellNum(); cellNum++) {
				HSSFCell hssfCell=hssfRow.getCell(cellNum);
				if (hssfCell==null) {
					continue;
				}
				System.out.print(" "+getValue(hssfCell));
			}
			System.out.println();
		}
	
	}
	private static String getValue(HSSFCell hssfCell){
		//如果是boolean类型的值
		if (hssfCell.getCellType()==HSSFCell.CELL_TYPE_BOOLEAN) {
			return String.valueOf(hssfCell.getBooleanCellValue());
		}else if (hssfCell.getCellType()==HSSFCell.CELL_TYPE_NUMERIC) {
			return String.valueOf(hssfCell.getNumericCellValue());
		}else {
			return String.valueOf(hssfCell.getStringCellValue());
		}
	}
}

结果
在这里插入图片描述
有点像读取一个数据库,我们在数据库先获取一个结果集,再对这个结果集进行遍历,就能得到这个表中的所有的数据。

文本提取

直接获取一个工作簿中的所有的东西
代码:

package poi_2;

import java.io.FileInputStream;
import java.io.InputStream;

import org.apache.poi.hssf.extractor.ExcelExtractor;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

/**
 * 文本提取
 * @author Administrator
 *
 */
public class Demo4 {
	public static void main(String[] args) throws Exception {
		InputStream is=new FileInputStream("D:/text.xls");
		POIFSFileSystem fs=new POIFSFileSystem(is);
		HSSFWorkbook wb=new HSSFWorkbook(fs);//定义一个工作簿,这个工作簿是那个输入流获取到的
		
		ExcelExtractor  excelExtractor=new ExcelExtractor(wb);
		excelExtractor.setIncludeSheetNames(false);//不显示工作簿的名字
		System.out.println(excelExtractor.getText());
		
	}
}

效果:
在这里插入图片描述
如果把false的那个去掉,显示的效果是这样的。
在这里插入图片描述

它会自动提取我的每个sheet页中的内容,并把工作簿中的内容是来自哪个sheet的显示出来,因为我一开始选择的是false,并且另外两个sheet页中的东西是空的,因此在这里就没有显示,就像上上个图一样,只显示了第一个sheet中的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值