apache-poi操作excel文档示例

一、基本思想:

关于办公文档插件使用的基本思想:把办公文档的所有元素封装成普通的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(); //换行
        }
    }
}

运行结果:在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值