• POI操作Excel详解,HSSF和XSSF两种方式


    HSSF方式:

      1 package com.tools.poi.lesson1;
      2 
      3 import java.io.FileInputStream;
      4 import java.io.FileNotFoundException;
      5 import java.io.FileOutputStream;
      6 import java.io.IOException;
      7 import java.text.ParseException;
      8 import java.text.SimpleDateFormat;
      9 import java.util.ArrayList;
     10 import java.util.List;
     11 
     12 import org.apache.poi.hssf.usermodel.HSSFCell;
     13 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
     14 import org.apache.poi.hssf.usermodel.HSSFRow;
     15 import org.apache.poi.hssf.usermodel.HSSFSheet;
     16 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
     17 import org.apache.poi.hssf.util.HSSFColor;
     18 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
     19 import org.apache.poi.ss.usermodel.Cell;
     20 import org.apache.poi.ss.usermodel.CellStyle;
     21 
     22 import com.tools.poi.bean.Student;
     23 
     24 public class ExcelUtilWithHSSF {
     25     public static void main(String[] args) {
     26         try {
     27             getExcelAsFile("aaa");
     28         } catch (FileNotFoundException e) {
     29             e.printStackTrace();
     30         } catch (IOException e) {
     31             e.printStackTrace();
     32         }
     33         
     34         
     35 //        try {
     36 //            CreateExcelDemo1();
     37 //        } catch (ParseException e) {
     38 //            e.printStackTrace();
     39 //        }
     40         
     41         
     42     }
     43     
     44     /**
     45      * 得到Excel,并解析内容
     46      * @param file
     47      * @throws FileNotFoundException
     48      * @throws IOException
     49      */
     50     public static void getExcelAsFile(String file) throws FileNotFoundException, IOException{
     51         //1.得到Excel常用对象
     52 //        POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("d:/FTP/test.xls"));
     53         POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("d:/FTP/new1.xls"));
     54         //2.得到Excel工作簿对象
     55         HSSFWorkbook wb = new HSSFWorkbook(fs);
     56         //3.得到Excel工作表对象
     57         HSSFSheet sheet = wb.getSheetAt(0);
     58         //总行数
     59         int trLength = sheet.getLastRowNum();
     60         //4.得到Excel工作表的行
     61         HSSFRow row = sheet.getRow(0);
     62         //总列数
     63         int tdLength = row.getLastCellNum();
     64         //5.得到Excel工作表指定行的单元格
     65         HSSFCell cell = row.getCell((short)1);
     66         //6.得到单元格样式
     67         CellStyle cellStyle = cell.getCellStyle();
     68         for(int i=0;i<trLength;i++){
     69             //得到Excel工作表的行
     70             HSSFRow row1 = sheet.getRow(i);
     71             for(int j=0;j<tdLength;j++){
     72                 
     73             //得到Excel工作表指定行的单元格
     74             HSSFCell cell1 = row1.getCell(j);
     75             
     76             /**
     77              * 为了处理:Excel异常Cannot get a text value from a numeric cell
     78              * 将所有列中的内容都设置成String类型格式
     79              */
     80             if(cell1!=null){
     81                   cell1.setCellType(Cell.CELL_TYPE_STRING);
     82              }
     83             
     84             //获得每一列中的值
     85             System.out.print(cell1.getStringCellValue()+"			");
     86             }
     87             System.out.println();
     88         }
     89     }
     90     
     91     
     92     /**
     93      * 创建Excel,并写入内容
     94      */
     95     public static void CreateExcel(){
     96         
     97         //1.创建Excel工作薄对象
     98         HSSFWorkbook wb = new HSSFWorkbook();
     99         //2.创建Excel工作表对象     
    100         HSSFSheet sheet = wb.createSheet("new Sheet");
    101         //3.创建Excel工作表的行   
    102         HSSFRow row = sheet.createRow(6);
    103         //4.创建单元格样式
    104         CellStyle cellStyle =wb.createCellStyle();
    105           // 设置这些样式
    106         cellStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
    107         cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    108         cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    109         cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    110         cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
    111         cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
    112         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    113           
    114           
    115           
    116         //5.创建Excel工作表指定行的单元格
    117         row.createCell(0).setCellStyle(cellStyle);
    118         //6.设置Excel工作表的值
    119         row.createCell(0).setCellValue("aaaa");
    120         
    121         row.createCell(1).setCellStyle(cellStyle);
    122         row.createCell(1).setCellValue("bbbb");
    123         
    124         
    125         //设置sheet名称和单元格内容
    126         wb.setSheetName(0,"第一张工作表");
    127         //设置单元格内容    cell.setCellValue("单元格内容");
    128         
    129         // 最后一步,将文件存到指定位置
    130                 try
    131                 {
    132                     FileOutputStream fout = new FileOutputStream("E:/students.xls");
    133                     wb.write(fout);
    134                     fout.close();
    135                 }
    136                 catch (Exception e)
    137                 {
    138                     e.printStackTrace();
    139                 }
    140     }
    141     
    142     /**
    143      * 创建Excel的实例
    144      * @throws ParseException 
    145      */
    146     public static void CreateExcelDemo1() throws ParseException{
    147         List list = new ArrayList();
    148         SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");
    149         Student user1 = new Student(1, "张三", 16,true, df.parse("1997-03-12"));
    150         Student user2 = new Student(2, "李四", 17,true, df.parse("1996-08-12"));
    151         Student user3 = new Student(3, "王五", 26,false, df.parse("1985-11-12"));
    152         list.add(user1);
    153         list.add(user2);
    154         list.add(user3);
    155         
    156         
    157         // 第一步,创建一个webbook,对应一个Excel文件
    158                 HSSFWorkbook wb = new HSSFWorkbook();
    159                 // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
    160                 HSSFSheet sheet = wb.createSheet("学生表一");
    161                 // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
    162                 HSSFRow row = sheet.createRow((int) 0);
    163                 // 第四步,创建单元格,并设置值表头 设置表头居中
    164                 HSSFCellStyle style = wb.createCellStyle();
    165                 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
    166 
    167                 HSSFCell cell = row.createCell((short) 0);
    168                 cell.setCellValue("学号");
    169                 cell.setCellStyle(style);
    170                 cell = row.createCell((short) 1);
    171                 cell.setCellValue("姓名");
    172                 cell.setCellStyle(style);
    173                 cell = row.createCell((short) 2);
    174                 cell.setCellValue("年龄");
    175                 cell.setCellStyle(style);
    176                 cell = row.createCell((short) 3);
    177                 cell.setCellValue("性别");
    178                 cell.setCellStyle(style);
    179                 cell = row.createCell((short) 4);
    180                 cell.setCellValue("生日");
    181                 cell.setCellStyle(style);
    182 
    183                 // 第五步,写入实体数据 实际应用中这些数据从数据库得到,
    184 
    185                 for (int i = 0; i < list.size(); i++)
    186                 {
    187                     row = sheet.createRow((int) i + 1);
    188                     Student stu = (Student) list.get(i);
    189                     // 第四步,创建单元格,并设置值
    190                     row.createCell((short) 0).setCellValue((double) stu.getId());
    191                     row.createCell((short) 1).setCellValue(stu.getName());
    192                     row.createCell((short) 2).setCellValue((double) stu.getAge());
    193                     row.createCell((short)3).setCellValue(stu.getSex()==true?"男":"女");
    194                     cell = row.createCell((short) 4);
    195                     cell.setCellValue(new SimpleDateFormat("yyyy-mm-dd").format(stu
    196                             .getBirthday()));
    197                 }
    198                 // 第六步,将文件存到指定位置
    199                 try
    200                 {
    201                     FileOutputStream fout = new FileOutputStream("E:/students.xls");
    202                     wb.write(fout);
    203                     fout.close();
    204                 }
    205                 catch (Exception e)
    206                 {
    207                     e.printStackTrace();
    208                 }
    209         
    210         
    211         
    212     }
    213 }

    XSSF方式:

      1 package com.tools.poi.lesson1;
      2 
      3 import java.io.File;
      4 import java.io.FileInputStream;
      5 import java.io.FileNotFoundException;
      6 import java.io.FileOutputStream;
      7 import java.io.IOException;
      8 import java.io.InputStream;
      9 import java.io.OutputStream;
     10 import java.text.ParseException;
     11 import java.text.SimpleDateFormat;
     12 import java.util.ArrayList;
     13 import java.util.List;
     14 
     15 import org.apache.poi.hssf.usermodel.HSSFCell;
     16 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
     17 import org.apache.poi.hssf.usermodel.HSSFRow;
     18 import org.apache.poi.hssf.usermodel.HSSFSheet;
     19 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
     20 import org.apache.poi.hssf.util.HSSFColor;
     21 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
     22 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
     23 import org.apache.poi.ss.usermodel.Cell;
     24 import org.apache.poi.ss.usermodel.CellStyle;
     25 import org.apache.poi.ss.usermodel.Row;
     26 import org.apache.poi.ss.usermodel.Sheet;
     27 import org.apache.poi.ss.usermodel.Workbook;
     28 import org.apache.poi.ss.usermodel.WorkbookFactory;
     29 import org.apache.poi.ss.util.WorkbookUtil;
     30 
     31 import com.tools.poi.bean.Student;
     32 
     33 public class ExcelUtilWithXSSF {
     34     public static void main(String[] args) {
     35         try {
     36             getExcelAsFile("d:/FTP/系统报表.xls");
     37         } catch (FileNotFoundException e) {
     38             e.printStackTrace();
     39         } catch (IOException e) {
     40             e.printStackTrace();
     41         } catch (InvalidFormatException e) {
     42             e.printStackTrace();
     43         }
     44         
     45         
     46 //        try {
     47 //            CreateExcelDemo1();
     48 //        } catch (ParseException e) {
     49 //            e.printStackTrace();
     50 //        }
     51         
     52         
     53     }
     54     
     55     /**
     56      * 得到Excel,并解析内容  对2007及以上版本 使用XSSF解析
     57      * @param file
     58      * @throws FileNotFoundException
     59      * @throws IOException
     60      * @throws InvalidFormatException 
     61      */
     62     public static void getExcelAsFile(String file) throws FileNotFoundException, IOException, InvalidFormatException{
     63 //        //1.得到Excel常用对象
     64 //        POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("d:/FTP/new1.xls"));
     65 //        //2.得到Excel工作簿对象
     66 //        HSSFWorkbook wb = new HSSFWorkbook(fs);
     67 
     68         
     69         
     70         InputStream ins = null;   
     71         Workbook wb = null;   
     72             ins=new FileInputStream(new File(file));   
     73             //ins= ExcelService.class.getClassLoader().getResourceAsStream(filePath);   
     74             wb = WorkbookFactory.create(ins);   
     75             ins.close();   
     76         
     77         
     78         //3.得到Excel工作表对象
     79         Sheet sheet = wb.getSheetAt(0);
     80         //总行数
     81         int trLength = sheet.getLastRowNum();
     82         //4.得到Excel工作表的行
     83         Row row = sheet.getRow(0);
     84         //总列数
     85         int tdLength = row.getLastCellNum();
     86         //5.得到Excel工作表指定行的单元格
     87         Cell cell = row.getCell((short)1);
     88         //6.得到单元格样式
     89         CellStyle cellStyle = cell.getCellStyle();
     90 
     91         for(int i=5;i<trLength;i++){
     92             //得到Excel工作表的行
     93             Row row1 = sheet.getRow(i);
     94             for(int j=0;j<tdLength;j++){
     95             //得到Excel工作表指定行的单元格
     96             Cell cell1 = row1.getCell(j);
     97             /**
     98              * 为了处理:Excel异常Cannot get a text value from a numeric cell
     99              * 将所有列中的内容都设置成String类型格式
    100              */
    101             if(cell1!=null){
    102                   cell1.setCellType(Cell.CELL_TYPE_STRING);
    103              }
    104             
    105             if(j==5&&i<=10){
    106                 cell1.setCellValue("1000");
    107             }
    108             
    109             //获得每一列中的值
    110             System.out.print(cell1+"                   ");
    111             }
    112             System.out.println();
    113         }
    114         
    115         //将修改后的数据保存
    116         OutputStream out = new FileOutputStream(file);
    117                 wb.write(out);
    118     }
    119     
    120     
    121     /**
    122      * 创建Excel,并写入内容
    123      */
    124     public static void CreateExcel(){
    125         
    126         //1.创建Excel工作薄对象
    127         HSSFWorkbook wb = new HSSFWorkbook();
    128         //2.创建Excel工作表对象     
    129         HSSFSheet sheet = wb.createSheet("new Sheet");
    130         //3.创建Excel工作表的行   
    131         HSSFRow row = sheet.createRow(6);
    132         //4.创建单元格样式
    133         CellStyle cellStyle =wb.createCellStyle();
    134           // 设置这些样式
    135         cellStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
    136         cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    137         cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    138         cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    139         cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
    140         cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
    141         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    142           
    143           
    144           
    145         //5.创建Excel工作表指定行的单元格
    146         row.createCell(0).setCellStyle(cellStyle);
    147         //6.设置Excel工作表的值
    148         row.createCell(0).setCellValue("aaaa");
    149         
    150         row.createCell(1).setCellStyle(cellStyle);
    151         row.createCell(1).setCellValue("bbbb");
    152         
    153         
    154         //设置sheet名称和单元格内容
    155         wb.setSheetName(0,"第一张工作表");
    156         //设置单元格内容    cell.setCellValue("单元格内容");
    157         
    158         // 最后一步,将文件存到指定位置
    159                 try
    160                 {
    161                     FileOutputStream fout = new FileOutputStream("E:/students.xls");
    162                     wb.write(fout);
    163                     fout.close();
    164                 }
    165                 catch (Exception e)
    166                 {
    167                     e.printStackTrace();
    168                 }
    169     }
    170     
    171     /**
    172      * 创建Excel的实例
    173      * @throws ParseException 
    174      */
    175     public static void CreateExcelDemo1() throws ParseException{
    176         List list = new ArrayList();
    177         SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");
    178         Student user1 = new Student(1, "张三", 16,true, df.parse("1997-03-12"));
    179         Student user2 = new Student(2, "李四", 17,true, df.parse("1996-08-12"));
    180         Student user3 = new Student(3, "王五", 26,false, df.parse("1985-11-12"));
    181         list.add(user1);
    182         list.add(user2);
    183         list.add(user3);
    184         
    185         
    186         // 第一步,创建一个webbook,对应一个Excel文件
    187                 HSSFWorkbook wb = new HSSFWorkbook();
    188                 // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
    189                 HSSFSheet sheet = wb.createSheet("学生表一");
    190                 // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
    191                 HSSFRow row = sheet.createRow((int) 0);
    192                 // 第四步,创建单元格,并设置值表头 设置表头居中
    193                 HSSFCellStyle style = wb.createCellStyle();
    194                 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
    195 
    196                 HSSFCell cell = row.createCell((short) 0);
    197                 cell.setCellValue("学号");
    198                 cell.setCellStyle(style);
    199                 cell = row.createCell((short) 1);
    200                 cell.setCellValue("姓名");
    201                 cell.setCellStyle(style);
    202                 cell = row.createCell((short) 2);
    203                 cell.setCellValue("年龄");
    204                 cell.setCellStyle(style);
    205                 cell = row.createCell((short) 3);
    206                 cell.setCellValue("性别");
    207                 cell.setCellStyle(style);
    208                 cell = row.createCell((short) 4);
    209                 cell.setCellValue("生日");
    210                 cell.setCellStyle(style);
    211 
    212                 // 第五步,写入实体数据 实际应用中这些数据从数据库得到,
    213 
    214                 for (int i = 0; i < list.size(); i++)
    215                 {
    216                     row = sheet.createRow((int) i + 1);
    217                     Student stu = (Student) list.get(i);
    218                     // 第四步,创建单元格,并设置值
    219                     row.createCell((short) 0).setCellValue((double) stu.getId());
    220                     row.createCell((short) 1).setCellValue(stu.getName());
    221                     row.createCell((short) 2).setCellValue((double) stu.getAge());
    222                     row.createCell((short)3).setCellValue(stu.getSex()==true?"男":"女");
    223                     cell = row.createCell((short) 4);
    224                     cell.setCellValue(new SimpleDateFormat("yyyy-mm-dd").format(stu
    225                             .getBirthday()));
    226                 }
    227                 // 第六步,将文件存到指定位置
    228                 try
    229                 {
    230                     FileOutputStream fout = new FileOutputStream("E:/students.xls");
    231                     wb.write(fout);
    232                     fout.close();
    233                 }
    234                 catch (Exception e)
    235                 {
    236                     e.printStackTrace();
    237                 }
    238         
    239         
    240         
    241     }
    242 }
  • 相关阅读:
    Mac电脑maven安装与配置
    解决Mac OS X中IDEA启动慢以及debug卡死问题
    如何在Mac上启用root用户或更改root密码
    mac文本编辑器软件,五大适用于Mac修订的文本编辑器,nodepad++替代软件
    mac系统到10.14以上,navicat无法打开,一直显示已损坏解决办法
    mac苹果电脑AppleID注册或者登录appstore时提示:您没有完整填写表格,请输入您的出生年份的解决方法
    mac苹果电脑使用相关,开发环境配置指南(持续更新)
    bitmap to base64
    Multiple actions were found that match the request in Web Api
    vue get attribute value
  • 原文地址:https://www.cnblogs.com/sunny-sl/p/7794249.html
Copyright © 2020-2023  润新知