• 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);
  • 相关阅读:
    【Codeforces 933A】A Twisty Movement
    【Codeforces 996B】World Cup
    【Codeforces 469B】Chat Online
    鼠标点击后的CSS3跑马灯效果
    CSS的相对定位和绝对定位
    CSS3制作的一款按钮特效
    单元测试小结
    JS对输入判断变化屏蔽中文输入法输入时连续触发事件的方法
    jquery的load方法
    MVC视图特性
  • 原文地址:https://www.cnblogs.com/hyblogs/p/10419983.html
Copyright © 2020-2023  润新知