文章目录
首先需要导入jar包,请点击这里下载
我们知道
Excel
表格在2007
之后就不一样了,后缀名变为xlsx
,之前的后缀名为xls
,因此读取和写入的操作就对应着不同的方式,但是只是读取和写入的类不同了,思想还是一样的。 我们要知道一个Excel文件(工作簿)包含三部分,分别是工作表(sheet
),行(row
),列(cell
)
工作簿对应的类是
XSSFWorkbook
(2007之后),在2007之前对应的类是HSSFWorkbook
new XSSFWorkbook()
创建一个工作簿用于写入文件new XSSFWorkbook(java.io.InputStream inputstream)
创建一个工作簿,用于读取文件
XSSFFont createFont()
返回一个XSSFont
类的对象,主要用于设置字体用的XSSFSheet createSheet()
创建一个工作表XSSFSheet createSheet(String name)
创建一个工作表并且指定姓名XSSFCellStyle createCellStyle()
创建一个单元格风格类的一个对象,便于设置单元格的属性write(OutputStream out)
用于将文件写入到文件中close()
setSheetName(int sheetIx,String name)
为指定索引的工作表设置名称XSSFSheet getSheetAt(int index)
获取指定索引的工作表对象,这个是用来读取文件的时候用的 File file = new File("F:\\demo1.xlsx");
//创建输入流
FileInputStream inputStream = new FileInputStream(file);
//创建工作簿读取
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
XSSFWorkbook book=new XSSFWorkbook(); //创建工作簿
.....省略写入的内容
FileOutputStream out=new FileOutputStream("D:\\demo1.xlsx"); //创建输出流
book.write(out); //写入到指定的文件
book.close(); // 关闭
out.close();
工作表对应的类为
XSSFSheet
,2007之前对应的是HSSFSheet 一般工作表都是在工作簿基础上创建的,因此构造函数也用不到,所以这里就不多说了
int addMergedRegion(CellRangeAddress region)
合并单元格
XSSFRow createRow(int rownum)
创建一个行 rownum表示创建第几行,这是一个行的索引(0开始) 便于写入
XSSFRow getRow(int index)
获取指定索引的那一行,便于读取
int getLastRowNum()
获取文件中最后一行的索引,这个通常在读取的时候用到
int getFirsetRowNum()
获取文件第一行的索引
// 创建工作簿对象
XSSFWorkbook workbook = new HSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("第一张表"); //创建工作表对象
//合并单元格 CellRangeAddress cell=new CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
//这里表示合并第一行的1-10列
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 10));
XSSFWorkbook workbook = new HSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("第一张表"); //创建工作表对象
XSSFRow row=sheet.createRow(0); //创建第一行
行对应的类为
XSFFRow
,2007之前对应的是HSSFRow
XSSFCell createCell(int columnIndex)
创建一列 columnIndex表示列的索引(0开始)
short getFirstCellNum()
返回文件中第一个列的索引,便于以后读取
short getLastCellNum()
返回全部的列数(不是索引),这个和Sheet中getRowNum()方法不同,便于以后读取文件
XSSFCell getCell(int cellnum)
获取指定索引的那一列,便于以后的读取
XSSCellStyle getCellStyle()
获取单元格风格的对象
void setCellStyle(XSSFCellStyle style)
将设置的风格样式添加到单元格中,否则将不会起作用
列对应的类为
XSSFCell
,2007之前对应的是HSSFCell
常用的单元格的类型有字符串,数字,布尔值,空值,可以使用
XSSFCell
的int getCellType()
方法获取类型
CELL_TYPE_BLANK
空值CELL_TYPE_STRING
字符串CELL_TYPE_NUMERIC
数字(浮点值,整型)CELL_TYPE_BOOLEAN
布尔值(True,FALSE)int getCellType()
获取单元格类型 可以和常用的单元格类型进行比较,然后使用不同的读取方法读取
XSSFCellStyle getCellStyle()
获取单元格风格对象,便于后面设置单元格的风格
setCellValue(Object value)
设置单元格的内容,可以是任意类型的
java.util.Date getDateCellValue()
读取单元格的日期内容
String getStringCellValue()
读取单元格中的字符串内容
double getNumericCellValue()
读取单元格中的数字类型的内容
boolean getBooleanCellValue()
获取单元格中的布尔类型的内容
对应的类为
XSSFCellStyle
void setAlignment(HorizontalAlignment align)
设置水平对齐方式
void setVerticalAlignment(VerticalAlignment align)
设置垂直的对齐方式
void setTopBorderColor(XSSFColor color)
设置上边框的颜色(还有Left,right..)
void setFont(Font font)
设置字体 这里的Font是org.apache.poi.ss.usermodel.Font
void setBorderTop(BorderStyle border)
设置上边框的样式,在BorderStyle类中有很多的样式
void setRotation(short rotation)
设置文字的旋转度数
对应的类为
XSSFFont
void setBold(boolean bold)
是否设置加粗
void setItalic(boolean italic)
设置是否倾斜
void setUnderline(FontUnderline underline)
设置下划线
void setStrikeout(boolean strikeout)
设置是否带有删除线
void setColor(XSSFColor color)
设置字体的颜色,只需要调用XSSFColor静态颜色变量即可
void setFontHeight(double height)
设置字体高度
void setFontHeightInPoints(short height)
设置字号
void setFontName(java.lang.String name)
设置字体样式(黑体,楷体…)
import java.awt.Color;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.FontUnderline;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class TestDemo {
public static void main(String[] args) throws IOException {
XSSFWorkbook workbook = new XSSFWorkbook(); // 创建工作簿
XSSFSheet sheet = workbook.createSheet("第一个工作表"); // 创建一个工作表
XSSFCellStyle style = workbook.createCellStyle(); // 创建单元格风格对象
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 10)); // 合并第一行的单元格
style.setAlignment(HorizontalAlignment.CENTER); // 设置水平居中
style.setVerticalAlignment(VerticalAlignment.CENTER); // 设置垂直居中
XSSFFont font = workbook.createFont(); // 创建字体的对象
font.setFontName("黑体"); // 设置字体的样式为黑体
font.setFontHeightInPoints((short) 20); // 设置字体的大小
font.setBold(true); // 设置粗体
font.setItalic(true); // 设置倾斜
font.setColor(HSSFColor.RED.index); // 设置字体的颜色
font.setUnderline(FontUnderline.SINGLE); // 设置下划线
font.setStrikeout(false); // 设置不带下划线
style.setFont(font); // 将设置的字体添加到单元格样式中,显示出来
XSSFRow row1 = sheet.createRow(0); // 创建第一个行
XSSFCell cell1 = row1.createCell(0); // 创建第一行的第一列
cell1.setCellStyle(style); // 将上面定义的风格设置到这个单元格中,这个是必须有的,否则根本不起作用
cell1.setCellValue("员工信息表"); // 设置单元格的内容
// 设置第二行的前三列的值
XSSFRow row2 = sheet.createRow(1);
row2.createCell(0).setCellValue("姓名");
row2.createCell(1).setCellValue("性别");
row2.createCell(2).setCellValue("年龄");
// 设置第三行的前三列
XSSFRow row3 = sheet.createRow(2);
row3.createCell(0).setCellValue("陈加兵");
row3.createCell(1).setCellValue("男");
row3.createCell(2).setCellValue(22); // 设置数字
// 设置第四行的前三列
XSSFRow row4 = sheet.createRow(3);
row4.createCell(0).setCellValue("郑元梅");
row4.createCell(1).setCellValue("女");
row4.createCell(2).setCellValue(22); // 设置数字
// 创建输出流对象
FileOutputStream stream = new FileOutputStream(new File(
"F:\\demo2.xlsx"));
workbook.write(stream); // 写入文件
workbook.close(); // 关闭
stream.close();
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
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;
public class TestDemo1 {
public static void main(String[] args) throws IOException {
File file = new File("F:\\demo2.xlsx");
FileInputStream inputStream = new FileInputStream(file); // 创建输入流
XSSFWorkbook workbook = new XSSFWorkbook(inputStream); // 创建读取工作簿的对象
XSSFSheet sheet = workbook.getSheetAt(0); // 获取第一个工作表的对象
// 第一次循环取得所有的行的对象 getLastRowNum()是得到最后一行的索引
for (int i = 0; i <= sheet.getLastRowNum(); i++) {
XSSFRow row = sheet.getRow(i); // 获取每一行的对象
for (int j = 0; j < row.getLastCellNum(); j++) {
XSSFCell cell = row.getCell(j); // 获取每一行的每一列
int type = cell.getCellType(); // 获取每一个单元格对应的类型
switch (type) {
case XSSFCell.CELL_TYPE_BOOLEAN: //如果是布尔类型
boolean b=cell.getBooleanCellValue();
System.out.print(b + " ");
break;
case XSSFCell.CELL_TYPE_NUMERIC: //如果是数字类型
double d=cell.getNumericCellValue(); //获取值
System.out.print( d+ " ");
break;
case XSSFCell.CELL_TYPE_STRING: //如果是字符串类型的
String s=cell.getStringCellValue();
System.out.print( s+ " ");
case XSSFCell.CELL_TYPE_BLANK: //如果是空值
System.out.print(" ");
default:
break;
}
}
System.out.println();
}
workbook.close(); //关闭
inputStream.close();
}
}