Java导出excel

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);
原文地址:https://www.cnblogs.com/hyblogs/p/10419983.html