一、基本思想:
关于办公文档插件使用的基本思想:把办公文档的所有元素封装成普通的Java类,
程序员通过操作这些类达到操作办公文档目的。
二、apache-poi对excel操作对应的类:
- 一个excel文件-------------HSSFWorkbook类
- 页----------------HSSFSheet类
- 行----------------HSSFRow类
- 列----------------HSSFCell类
- 样式-------------HSSFCellStyle类
三、生成一个excel示例:
- 添加maven依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
- demo代码 :
public class Demo {
public static void main(String[] args) throws IOException {
//操作逻辑:文件---->页---->行----->列
//workbook对象对应的是一个excel文件
HSSFWorkbook workbook = new HSSFWorkbook();
//使用workbook对象创建 excel文件中的一页sheet
HSSFSheet sheet = workbook.createSheet();
//在页中创建一行,参数 int rownum: 在第几行创建,编号从0开始
HSSFRow row = sheet.createRow(0);
//在行里创建列,参数 column:第几列,也是从0开始
HSSFCell cell = row.createCell(0);
cell.setCellValue("学号");
cell= row.createCell(1);
cell.setCellValue("姓名");
cell=row.createCell(2);
cell.setCellValue("年龄");
//生成样式对象
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER); //居中
for (int i = 1; i <=10 ; i++) {
//循环一次写入一行数据
row=sheet.createRow(i); //第i行
cell=row.createCell(0); //(i,1) 第i行的第一列
cell.setCellValue("学号"+i);
cell= row.createCell(1); //(i,2) 第i行的第二列
cell.setCellValue("姓名:"+i);
cell=row.createCell(2); //(i,3)
cell.setCellValue("age:"+i);
cell.setCellStyle(cellStyle); //将第三列的样式设置为居中
}
//生成excel文件:
OutputStream os = new FileOutputStream("F:\\资源\\demo\\students.xls");//文件夹必须已经存在
workbook.write(os);
os.close();
workbook.close();
}
}
- 效果图:
四、解析一个excel文件实例:
- 思路:
- 1)将excel文件读取进入内存
- 2)将excel文件转换成workbook对象
- 3)获取excel文件中的第几页sheet,转换成SHHFSheet对象
- 4)遍历获取行(SHHFSheet)和列(SHHFRow)
package apachePoi;
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 java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* 解析excel文件
*
* @Author leiHua
* @Date 2022/10/14 12:31
*/
public class ParseExcelDemo {
public static void main(String[] args) throws IOException {
//将excel文件 转换成workbook对象
InputStream is = new FileInputStream("F:\\MyCode\\java\\我的项目\\crm-project\\crm\\src\\main\\webapp\\serverDir\\activityList.xls");
HSSFWorkbook workbook = new HSSFWorkbook(is);
//将excel文件中第一页信息封装成SheetAt对象
HSSFSheet sheet = workbook.getSheetAt(0);
HSSFRow row = null;
HSSFCell cell = null;
for (int i = 0; i <= sheet.getLastRowNum(); i++) { //getLastRowNum: 获取该页中最后一行的下标
row = sheet.getRow(i);
//遍历每行中的列
for (int j = 0; j < row.getLastCellNum(); j++) {
cell = row.getCell(j);
if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) { //如果类型是boolean
System.out.print(cell.getBooleanCellValue() + " ");
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA) { //如果是公式类型
System.out.print(cell.getCellFormula() + " ");
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) { //如果是字符串类型的
System.out.print(cell.getStringCellValue() + " ");
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { //数字类型
System.out.print(cell.getNumericCellValue() + " ");
} else {
System.out.print("" + " ");
}
}
System.out.println(); //换行
}
}
}
运行结果: