POI实现Excel导入导出
程序员文章站
2022-07-05 11:37:17
我们知道要创建一张excel你得知道excel由什么组成,比如说sheet也就是一个工作表格,例如一行,一个单元格,单元格格式,单元格内容格式…这些都对应着poi里面的一个类。 一个excel表格: HSSFWorkbook wb = new HSSFWorkbook(); 一个工作表格(sheet ......
我们知道要创建一张excel你得知道excel由什么组成,比如说sheet也就是一个工作表格,例如一行,一个单元格,单元格格式,单元格内容格式…这些都对应着poi里面的一个类。
一个excel表格:
HSSFWorkbook wb = new HSSFWorkbook(); |
一个工作表格(sheet):
HSSFSheet sheet = wb.createSheet("测试表格"); |
一行(row):
HSSFRow row1 = sheet.createRow(0); |
一个单元格(cell):
HSSFCell cell2 = row2.createCell((short)0) |
单元格格式(cellstyle):
HSSFCellStyle style4 = wb.createCellStyle() |
单元格内容格式()
HSSFDataFormat format= wb.createDataFormat();
1:首先创建一个po对象
package entity; public class Student { private int no; private String name; private int age; private String grage; public Student(int no, String name, int age, String grage) { super(); this.no = no; this.name = name; this.age = age; this.grage = grage; } public int getNo() { return no; } public void setNo(int no) { this.no = no; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGrage() { return grage; } public void setGrage(String grage) { this.grage = grage; } }
2实现导出的功能:
1 package demo; 2 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 import java.sql.SQLException; 6 import java.util.ArrayList; 7 import java.util.Date; 8 import java.util.List; 9 10 import org.apache.poi.hssf.usermodel.HSSFCell; 11 import org.apache.poi.hssf.usermodel.HSSFCellStyle; 12 import org.apache.poi.hssf.usermodel.HSSFDataFormat; 13 import org.apache.poi.hssf.usermodel.HSSFRow; 14 import org.apache.poi.hssf.usermodel.HSSFSheet; 15 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 16 import org.apache.poi.hssf.util.Region; 17 import org.apache.poi.ss.usermodel.Font; 18 19 import entity.Student; 20 21 public class Export_demo { 22 public static void main(String[] args) { 23 export(); 24 } 25 26 public static void export(){ 27 List<Student> studens=new ArrayList<Student>(); 28 for (int i = 1; i <=20; i++) { 29 Student s=new Student(i, "a"+i, 20+i-20, "三年级"); 30 studens.add(s); 31 } 32 33 HSSFWorkbook wb = new HSSFWorkbook();//创建一个excel文件 34 HSSFSheet sheet=wb.createSheet("学生信息");//创建一个工作薄 35 sheet.setColumnWidth((short)3, 20* 256); //---》设置单元格宽度,因为一个单元格宽度定了那么下面多有的单元格高度都确定了所以这个方法是sheet的 36 sheet.setColumnWidth((short)4, 20* 256); //--->第一个参数是指哪个单元格,第二个参数是单元格的宽度 37 sheet.setDefaultRowHeight((short)300); // ---->有得时候你想设置统一单元格的高度,就用这个方法 38 HSSFDataFormat format= wb.createDataFormat(); //--->单元格内容格式 39 HSSFRow row1 = sheet.createRow(0); //--->创建一行 40 // 四个参数分别是:起始行,起始列,结束行,结束列 (单个单元格) 41 sheet.addMergedRegion(new Region(0, (short) 0, 0, (short)5));//可以有合并的作用 42 HSSFCell cell1 = row1.createCell((short)0); //--->创建一个单元格 43 cell1.setCellValue("学生信息总览"); 44 45 46 sheet.addMergedRegion(new Region(1, (short) 0, 1, (short)0)); 47 HSSFRow row2= sheet.createRow(1); ////创建第二列 标题 48 HSSFCell fen = row2.createCell((short)0); //--->创建一个单元格 49 fen.setCellValue("编号/属性 "); 50 HSSFCell no = row2.createCell((short)1); //--->创建一个单元格 51 no.setCellValue("姓名 "); 52 HSSFCell age = row2.createCell((short)2); //--->创建一个单元格 53 age.setCellValue("年龄 "); 54 HSSFCell grage = row2.createCell((short)3); //--->创建一个单元格 55 grage.setCellValue("年级 "); 56 57 for (int i = 0; i <studens .size(); i++) { 58 sheet.addMergedRegion(new Region(1+i+1, (short) 0, 1+i+1, (short)0)); 59 HSSFRow rows= sheet.createRow(1+i+1); ////创建第二列 标题 60 HSSFCell fens = rows.createCell((short)0); //--->创建一个单元格 61 fens.setCellValue(studens.get(i).getNo()); 62 HSSFCell nos = rows.createCell((short)1); //--->创建一个单元格 63 nos.setCellValue(studens.get(i).getName()); 64 HSSFCell ages = rows.createCell((short)2); //--->创建一个单元格 65 ages.setCellValue(studens.get(i).getAge()); 66 HSSFCell grages = rows.createCell((short)3); //--->创建一个单元格 67 grages.setCellValue(studens.get(i).getGrage()); 68 } 69 FileOutputStream fileOut = null; 70 try{ 71 fileOut = new FileOutputStream("d:\\studens.xls"); 72 wb.write(fileOut); 73 //fileOut.close(); 74 System.out.print("OK"); 75 }catch(Exception e){ 76 e.printStackTrace(); 77 } 78 finally{ 79 if(fileOut != null){ 80 try { 81 fileOut.close(); 82 } catch (IOException e) { 83 // TODO Auto-generated catch block 84 e.printStackTrace(); 85 } 86 } 87 } 88 } 89 }
效果图:
3实现导入的功能:
1 package demo; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.InputStream; 6 import java.text.SimpleDateFormat; 7 import java.util.ArrayList; 8 import java.util.Date; 9 import java.util.List; 10 11 import org.apache.poi.hssf.usermodel.HSSFCell; 12 import org.apache.poi.hssf.usermodel.HSSFDateUtil; 13 import org.apache.poi.hssf.usermodel.HSSFRow; 14 import org.apache.poi.hssf.usermodel.HSSFSheet; 15 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 16 import org.apache.poi.poifs.filesystem.POIFSFileSystem; 17 18 import entity.Student; 19 20 public class Import_demo { 21 private static POIFSFileSystem fs;//poi文件流 22 private static HSSFWorkbook wb;//获得execl 23 private static HSSFRow row;//获得行 24 private static HSSFSheet sheet;//获得工作簿 25 26 public static void main(String[] args) throws FileNotFoundException { 27 InputStream in= new FileInputStream("d:\\studens.xls"); 28 imports(in); 29 } 30 31 public static void imports(InputStream in ){ 32 String str = ""; 33 try { 34 fs = new POIFSFileSystem(in); 35 wb = new HSSFWorkbook(fs); 36 sheet=wb.getSheetAt(0); 37 //int rowfirst=sheet.getFirstRowNum(); 38 int rowend=sheet.getLastRowNum(); 39 for (int i = 2; i <=rowend; i++) { 40 row=sheet.getRow(i); 41 //System.out.println(row.get); 42 int colNum = row.getPhysicalNumberOfCells();//一行总列数 43 int j = 0; 44 while (j < colNum) { 45 str += getCellFormatValue(row.getCell((short) j)).trim() + "-"; 46 j++; 47 } 48 System.out.println(str); 49 str=""; 50 } 51 } catch (Exception e) { 52 // TODO: handle exception 53 } 54 } 55 56 private static String getCellFormatValue(HSSFCell cell) { 57 String cellvalue = ""; 58 if (cell != null) { 59 // 判断当前Cell的Type 60 switch (cell.getCellType()) { 61 // 如果当前Cell的Type为NUMERIC 62 case HSSFCell.CELL_TYPE_NUMERIC: 63 case HSSFCell.CELL_TYPE_FORMULA: { 64 // 判断当前的cell是否为Date 65 if (HSSFDateUtil.isCellDateFormatted(cell)) { 66 Date date = cell.getDateCellValue(); 67 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 68 cellvalue = sdf.format(date); 69 } 70 // 如果是纯数字 71 else { 72 // 取得当前Cell的数值 73 cellvalue = String.valueOf(cell.getNumericCellValue()); 74 } 75 break; 76 } 77 // 如果当前Cell的Type为STRIN 78 case HSSFCell.CELL_TYPE_STRING: 79 // 取得当前的Cell字符串 80 cellvalue = cell.getRichStringCellValue().getString(); 81 break; 82 // 默认的Cell值 83 default: 84 cellvalue = " "; 85 } 86 } else { 87 cellvalue = ""; 88 } 89 return cellvalue; 90 } 91 92 }
效果:
代码和jar宝下载路径
下一篇: Laravel中9个不经常用的小技巧汇总