1. 下载jar包:
官方下载:http://poi.apache.org/download.html这里可以下载到它的最新版本和文档。
2. 将jar包加入到项目中:
将下载好的jar包加入到WEBINFO目录下的lib文件夹中,Eclipse用户选中jar包然后右击选择Build Path选项, Idea用户选中jar包然后右击选择Add as Library选项即可。
3.解释操作步骤:
首先,我们应该要知道的是,一个Excel文件对应一个workbook(工作簿),一个workbook中有多个sheet(工作表)组成,一个sheet是由多个行(row)和列(cell)组成。那么我们用poi要导出一个Excel表格
的正确顺序应该是:
1、用HSSFWorkbook打开或者创建“Excel文件对象”(工作簿)
2、用HSSFWorkbook对象返回或者创建Sheet对象(工作簿)
3、用Sheet对象返回行对象,用行对象得到Cell对象(行)
4、对Cell对象读写。(列)
5、将生成的HSSFWorkbook放入HttpServletResponse中响应到前端页面
代码如下:
/** * */ package excel; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; /** * @author hy * @date 2019-02-18 15:06:34 * */ public class OutExcel { public static void main(String[] args) { //第一行数据,一般用来存字段的名称 String title="姓名,性别,年龄,身高,联系方式"; //分割title String titString[]=title.split(","); List<String> contentList =new ArrayList<String>(); contentList.add("张三,男,16岁,170cm,13112341234"); contentList.add("李四 ,男,18岁,172cm,13012341234"); contentList.add("王五 ,女,17岁,165cm,13612349999"); contentList.add("赵六,男,20岁,178cm,18633330000"); contentList.add("孙七,女,16岁,168cm,15512341234"); String[] strArray=new String[contentList.size()]; /*String[][] strArray=new String[5][5]; //第二行数据 strArray[0][0]="张三"; strArray[0][1]="男"; strArray[0][2]="16岁"; strArray[0][3]="170cm"; strArray[0][4]="13112341234"; //第三行数据 strArray[1][0]="李四"; strArray[1][1]="男"; strArray[1][2]="18岁"; strArray[1][3]="172cm"; strArray[1][4]="13012341234"; //第四行数据 strArray[2][0]="王五"; strArray[2][1]="女"; strArray[2][2]="17岁"; strArray[2][3]="165cm"; strArray[2][4]="13612349999"; //第五行数据 strArray[3][0]="赵六"; strArray[3][1]="男"; strArray[3][2]="20岁"; strArray[3][3]="178cm"; strArray[3][4]="18633330000"; //第六行数据 strArray[4][0]="孙七"; strArray[4][1]="女"; strArray[4][2]="16岁"; strArray[4][3]="168cm"; strArray[4][4]="15512341234";*/ //setup1:创建工作簿 HSSFWorkbook hswk =new HSSFWorkbook(); //setup2:创建工作簿的样式 HSSFCellStyle cellStyle=hswk.createCellStyle(); //创建excel样式 cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框 cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框 cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框 cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框 cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中 cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 //setup3:在工作簿创建一个工作表,并取名sheet1,设置单元格长度,高度 HSSFSheet hs =hswk.createSheet("sheet1"); hs.setDefaultColumnWidth( (short) 15 ); //设置单元格的宽度 //hs.setDefaultRowHeight((short) 256); //设置单元格的高度(貌似不起作用,后续研究。。。) // hs.setDefaultRowHeightInPoints(15); //setup4:在工作表中创建第一行,并根据标题长度设置列值,并将标题放入其中,加入样式 HSSFRow hsr =hs.createRow(0);//创建第0行 hsr.setHeightInPoints(20); //单独设置行高 for (int i = 0; i < titString.length; i++) { HSSFCell hc=hsr.createCell((short) i); hc.setCellValue(new HSSFRichTextString(titString[i].toString())); hc.setCellStyle(cellStyle); } //setup5:创建数据 for (int m = 0;m < contentList.size(); m++) { HSSFRow hrdata =hs.createRow(m+1);//(依次增加)设置数据的第一行(excel的第二行,前面标题占着一行) strArray=contentList.get(m).split(","); for (int n = 0; n < strArray.length; n++) { HSSFCell hc=hrdata.createCell((short) n); //(依次增加)数据的第一列,excel的第一列 System.out.println(strArray[n].toString()); hc.setCellValue(new HSSFRichTextString(strArray[n].toString())); hc.setCellStyle(cellStyle); } } /*for (int m = 0; m < strArray.length; m++) { HSSFRow hrdata =hs.createRow(m+1);//(依次增加)设置数据的第一行(excel的第二行,前面标题占着一行) for (int n = 0; n < strArray[m].length; n++) { HSSFCell hc=hrdata.createCell((short) n); //(依次增加)数据的第一列,excel的第一列 hc.setCellValue(new HSSFRichTextString(strArray[m][n])); hc.setCellStyle(cellStyle); } }*/ //输出Excel文件到磁盘目录 FileOutputStream output; try { output = new FileOutputStream("d:\\workbook.xlsx"); try { hswk.write(output); } catch (IOException e) { e.printStackTrace(); } try { output.flush(); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } } }
运行截图:
这两个方法设置没有效果,后续研究。。。。。。。目前使用单个行设置,放在循环里循环一次。(setHeightInPoints(20))
hs.setDefaultRowHeight((short) 256); hs.setDefaultRowHeightInPoints(15);