POI操作Excel

编译环境:IntelliJ IDEA
poi-ooxml 3.15版本的jar包(下面是jar包地址)
https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml/3.15

第一个问题:如何使用POI创建Excel表格并将内容输入到Excel表格?

	 	//创建工作簿  XSSF代表10版的Excel(HSSF是03版的Excel)
        XSSFWorkbook wb = new XSSFWorkbook();
		//使用工作簿创建工作表
       XSSFSheet sheet = wb.createSheet("此处是sheet表名");
       
       /*  此处包含一系列对表格内容的操作,合并下方第五六问下的代码放入此处即可*/
       

       //上面设置好了内容,我们当然是要输出到某个文件的,输出就需要有输出流
         File file = new File("E:/2010.xlsx");  
         //判断该文件是否存在,若不存在则创建该文件
         if(!file.exists()){
             file.createNewFile();
         }
         //创建一个向 file文件中写入数据的文件输出流(输入流输出流是以程序为中心的)
         FileOutputStream fos= new FileOutputStream(file); 
        //向指定文件写入内容
         wb.write(fos);
         fos.close();

好,上面我们已经创建好了一个Excel表格,并且具备了向该表格输入数据的能力
POI操作Excel_第1张图片
这就是上面程序创建好的表格(我的Excel还没激活,嘿嘿)

第二个问题:如何向Excel表格中输入内容?
在这里解释一下,虽然这个表格看上去所有的单元格都有,其实对于程序来说是空白的,因为我们只创建了一张空表,所以实际是这样子的
POI操作Excel_第2张图片
(我用马赛克涂的,嘻嘻)
接下来就是创建行并且创建单元格(所有的行和单元格都是创建后才有的)
下标从0开始,0代表第一行也代表第一列。

   //创建第一行
   XSSFRow row = sheet.createRow(0);
   //在行中创建第一列(就是创建了一个单元格)
    XSSFCell cell  = row.createCell(0);
    //设置该单元格的内容
    cell.setCellValue("加油!");

POI操作Excel_第3张图片
这是上述代码运行的效果

第三个问题,怎么合并单元格? (这跟第二个问题下的代码无关)

  // 那我们先创建三行三列
  for (int i = 0 ; i < 3 ; i++){
            XSSFRow row = sheet.createRow(i);
            for(int j = 0 ; j < 3 ; j++){
                row.createCell(j);
            }
   }
   //合并第一行第二行第一列,即合并(0,0)和(1,0)两个单元格
    //四个参数为(起始行,终止行,起始列,终止列)
    sheet.addMergedRegion(new CellRangeAddress(0,1,0,0));
    //合并第三行第一列第二列第三列,即合并(2,0)和(2,1)、(2,2)三个单元格
    sheet.addMergedRegion(new CellRangeAddress(2,2,0,2));

POI操作Excel_第4张图片
这是效果图。

第四个问题:如何给合并行设置数据?
直接给(起始行,起始列)这个坐标的位置赋值就可以啦。

        //给第一个合并格赋值
        sheet.getRow(0).getCell(0).setCellValue("你好!");
        //给第二个合并格赋值
        sheet.getRow(2).getCell(0).setCellValue("Hello!");

POI操作Excel_第5张图片
这是效果图。

第五个问题:我想要数据在中间,而不是在边上怎么处理?
那这个就要设置单元格的格式了,这个应该放在创建单元格之前,和第三四问的代码合并起来就是:

    //设置单元格风格
    XSSFCellStyle style = wb.createCellStyle();
    //设置边框
    style.setBorderTop(BorderStyle.THIN);    //上边框
    style.setBorderBottom(BorderStyle.THIN); //下边框
    style.setBorderLeft(BorderStyle.THIN);   //左边框
    style.setBorderRight(BorderStyle.THIN);  //右边框
    //设置文字水平居中
    style.setAlignment(HorizontalAlignment.CENTER);
    //设置文字垂直居中
    style.setVerticalAlignment(VerticalAlignment.CENTER);
    //=======================================================
    //=======================================================
    //创建三行三列
    for (int i = 0 ; i < 3 ; i++){
        XSSFRow row = sheet.createRow(i);
        for(int j = 0 ; j < 3 ; j++){
            row.createCell(j).setCellStyle(style); //为每个单元格设置风格(可用if语句选择设置)
        }
    }
    //合并第一行第二行第一列,即合并(0,0)和(1,0)两个单元格
    sheet.addMergedRegion(new CellRangeAddress(0,1,0,0));
    //合并第三行第一列第二列第三列,即合并(2,0)和(2,1)、(2,2)三个单元格
    sheet.addMergedRegion(new CellRangeAddress(2,2,0,2));

    //给第一个合并格赋值
    sheet.getRow(0).getCell(0).setCellValue("你好!");
    //给第二个合并格赋值
    sheet.getRow(2).getCell(0).setCellValue("Hello!");

POI操作Excel_第6张图片
这是效果图

第六个问题:如何设置行高?
现在举个例子,还是上述代码,我要第三行数据的高度增加,不那么窄。

//增加第三行行高,单位是px
 sheet.getRow(2).setHeightInPoints(20);

POI操作Excel_第7张图片

第七个问题:我把第一个的“你好!”改成很长的“你好!加油!”,会发现单元格盛不下数据。
POI操作Excel_第8张图片
那就要设置宽度了。

     //getPhysicalNumberOfCells()代表这行有多少包含数据的列
      for(int i=0;i

POI操作Excel_第9张图片
第一行设置宽度以后,下面对应的行的宽度也会随之发生变化。

最后,放几个异常在这里:
POI操作Excel_第10张图片
说明Excel表格打开了没关,每次运行代码的时候都要把这个Excel表格关掉。
POI操作Excel_第11张图片
这个说明在合并单元格的时候重复了,比如合并了(1,0)(1,1),
后面又合并(1,1)(1,2)。因为(1,1)已经被合并过一次了,再重复合并就会出错。

POI操作Excel_第12张图片
这个问题就是还没创建某个单元格就操作它。比如上面我创建了3行,然后我操作
sheet.getRow(3).getCell(0).setCellValue("===");就会报错,因为我只创建了3行,getRow(i)中i的最大值只能是2。

如果有错误欢迎指出~~

你可能感兴趣的:(POI操作Excel)