java操作Excle

转载:https://blog.csdn.net/w893932747/article/details/89354979

福利:

直接可用的导出,自己根据下边的讲解自行修改,不修改直接用也可以!

https://blog.csdn.net/w893932747/article/details/89370894

 

一、POI简介:

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。

HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。

二、POI结构说明

包名称说明

  1. HSSF提供读写Microsoft Excel XLS格式档案的功能。
  2. XSSF提供读写Microsoft Excel OOXML XLSX格式档案的功能。
  3. HWPF提供读写Microsoft Word DOC格式档案的功能。
  4. HSLF提供读写Microsoft PowerPoint格式档案的功能。
  5. HDGF提供读Microsoft Visio格式档案的功能。
  6. HPBF提供读Microsoft Publisher格式档案的功能。

HSMF提供读Microsoft Outlook格式档案的功能。

三、POI常用类说明

               类名                               说明

       HSSFWorkbook           Excel的文档对象

       HSSFSheet                  Excel的表单

       HSSFRow                    Excel的行

       HSSFCell                     Excel的格子单元

       HSSFFont                    Excel字体

       HSSFDataFormat        格子单元的日期格式

       HSSFHeader               Excel文档Sheet的页眉

       HSSFFooter                Excel文档Sheet的页脚

       HSSFCellStyle            格子单元样式

       HSSFDateUtil             日期

       HSSFPrintSetup         打印

       HSSFErrorConstants   错误信息表

四、Excel的基本操作

  • 得到Excel常用对象
    //获得Excel对象
    @Test
    public void testExcel1(){
        try {
            //获取系统文档
            POIFSFileSystem fspoi=new POIFSFileSystem(new FileInputStream("/Users/wangjun/temp/demo1.xls"));
            //创建工作薄对象
            HSSFWorkbook workbook=new HSSFWorkbook(fspoi);
            //创建工作表对象
            HSSFSheet sheet=workbook.getSheet("sheet1");
            //得到Excel表格
            HSSFRow row = sheet.getRow(1);
            //得到Excel工作表指定行的单元格
            HSSFCell cell = row.getCell(1);
            System.out.println(cell);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • 创建Excel文档
    //创建Excel对象
    @Test
    public void testExcel2() throws IOException {
        //创建工作薄对象
        HSSFWorkbook workbook=new HSSFWorkbook();//这里也可以设置sheet的Name
        //创建工作表对象
        HSSFSheet sheet = workbook.createSheet();
        //创建工作表的行
        HSSFRow row = sheet.createRow(0);//设置第一行,从零开始
        row.createCell(2).setCellValue("aaaaaaaaaaaa");//第一行第三列为aaaaaaaaaaaa
        row.createCell(0).setCellValue(new Date());//第一行第一列为日期
        workbook.setSheetName(0,"sheet的Name");//设置sheet的Name
 
        //文档输出
        FileOutputStream out = new FileOutputStream("/Users/wangjun/temp/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString() +".xls");
        workbook.write(out);
        out.close();
    }
  • 创建Excel文档,添加摘要信息

这个信息添加完是有的,但是在mac下一直找不到怎么查看,有知道的童鞋希望不吝赐教,我是放到Win中查看的。

    //创建文档摘要信息
    @Test
    public void testExcel3() throws IOException {
        //创建HSSFWorkbook工作薄对象
        HSSFWorkbook workbook=new HSSFWorkbook();
        //创建HSSFSheet对象
        HSSFSheet sheet=workbook.createSheet("sheet1");
        //创建行的单元格,从0开始
        HSSFRow row = sheet.createRow(0);
        //创建单元格,从0开始
        HSSFCell cell = row.createCell(0);
        cell.setCellValue("a");
        //一下为简写
        row.createCell(1).setCellValue("aa");
        row.createCell(2).setCellValue("aaa");
        row.createCell(3).setCellValue("aaaa");
 
        //创建文档信息
        workbook.createInformationProperties();
        //获取DocumentSummaryInformation对象
        DocumentSummaryInformation documentSummaryInformation = workbook.getDocumentSummaryInformation();
        documentSummaryInformation.setCategory("类别:Excel文件");//类别
        documentSummaryInformation.setManager("管理者:王军");//管理者
        documentSummaryInformation.setCompany("公司:Action");//公司
 
        //文档输出
        FileOutputStream out = new FileOutputStream("/Users/wangjun/temp/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString() +".xls");
        workbook.write(out);
        out.close();
    }
  • 创建批注
    //创建批注
    @Test
    public void testExcel4() throws IOException {
        //创建Excel工作薄对象
        HSSFWorkbook workbook=new HSSFWorkbook();
        //创建Excel工作表对象
        HSSFSheet sheet = workbook.createSheet("wj");
        HSSFPatriarch patr = sheet.createDrawingPatriarch();
        //创建批注位置(row1-row3:直接理解为高度,col1-col2:直接理解为宽度)
        HSSFClientAnchor anchor = patr.createAnchor(0, 0, 0, 0, 5, 1, 8, 3);
        //创建批注
        HSSFComment comment = patr.createCellComment(anchor);
        //设置批注内容
        comment.setString(new HSSFRichTextString("这是一个批注段落!"));
        //设置批注作者
        comment.setAuthor("wangjun");
        //设置批注默认显示
        comment.setVisible(true);
        HSSFCell cell = sheet.createRow(2).createCell(1);
        cell.setCellValue("测试");
        //把批注赋值给单元格
        cell.setCellComment(comment);
 
        //文档输出
        FileOutputStream out = new FileOutputStream("/Users/wangjun/temp/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString() +".xls");
        workbook.write(out);
        out.close();
    }

创建批注位置HSSFPatriarch.createAnchor(dx1, dy1, dx2, dy2, col1, row1, col2, row2)方法参数说明:

  1. dx1 第1个单元格中x轴的偏移量
  2. dy1 第1个单元格中y轴的偏移量
  3. dx2 第2个单元格中x轴的偏移量
  4.  dy2 第2个单元格中y轴的偏移量
  5. col1 第1个单元格的列号
  6. row1 第1个单元格的行号
  7. col2 第2个单元格的列号
  8. row2 第2个单元格的行号
  • 创建页眉和页脚
    //创建页眉页脚
    @Test
    public void testExcel5() throws IOException {
        //创建Excel工作薄对象
        HSSFWorkbook workbook=new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Test");// 创建工作表(Sheet)
        HSSFHeader header =sheet.getHeader();//得到页眉
        header.setLeft("页眉左边");
        header.setRight("页眉右边");
        header.setCenter("页眉中间");
        HSSFFooter footer =sheet.getFooter();//得到页脚
        footer.setLeft("页脚左边");
        footer.setRight("页脚右边");
        footer.setCenter("页脚中间");
 
        //文档输出
        FileOutputStream out = new FileOutputStream("/Users/wangjun/temp/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString() +".xls");
        workbook.write(out);
        out.close();
    }

五、Excel的单元格操作

    //Excel的单元格操作
    @Test
    public void testExcel6() throws IOException {
        //创建Excel工作薄对象
        HSSFWorkbook workbook=new HSSFWorkbook();
        //创建Excel工作表对象
        HSSFSheet sheet = workbook.createSheet("wj");
        //创建行的单元格,从0开始
        HSSFRow row = sheet.createRow(0);
        //创建单元格
        HSSFCell cell=row.createCell(0);
        //设置值
        cell.setCellValue(new Date());
        //创建单元格样式
        HSSFCellStyle style=workbook.createCellStyle();
        style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
        cell.setCellStyle(style);
        //设置保留2位小数--使用Excel内嵌的格式
        HSSFCell cell1 = row.createCell(1);
        cell1.setCellValue(12.3456789);
        style=workbook.createCellStyle();
        style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
        cell1.setCellStyle(style);
        //设置货币格式--使用自定义的格式
        HSSFCell cell2 = row.createCell(2);
        cell2.setCellValue(12345.6789);
        style=workbook.createCellStyle();
        style.setDataFormat(workbook.createDataFormat().getFormat("¥#,##0"));
        cell2.setCellStyle(style);
        //设置百分比格式--使用自定义的格式
        HSSFCell cell3 = row.createCell(3);
        cell3.setCellValue(0.123456789);
        style=workbook.createCellStyle();
        style.setDataFormat(workbook.createDataFormat().getFormat("0.00%"));
        cell3.setCellStyle(style);
        //设置中文大写格式--使用自定义的格式
        HSSFCell cell4 = row.createCell(4);
        cell4.setCellValue(12345);
        style=workbook.createCellStyle();
        style.setDataFormat(workbook.createDataFormat().getFormat("[DbNum2][$-804]0"));
        cell4.setCellStyle(style);
        //设置科学计数法格式--使用自定义的格式
        HSSFCell cell5 = row.createCell(5);
        cell5.setCellValue(12345);
        style=workbook.createCellStyle();
        style.setDataFormat(workbook.createDataFormat().getFormat("0.00E+00"));
        cell5.setCellStyle(style);
 
        //文档输出
        FileOutputStream out = new FileOutputStream("/Users/wangjun/temp/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString() +".xls");
        workbook.write(out);
        out.close();
    }

 HSSFDataFormat.getFormat和HSSFDataFormat.getBuiltinFormat的区别: 

       当使用Excel内嵌的(或者说预定义)的格式时,直接用HSSFDataFormat.getBuiltinFormat静态方法即可。当使用自己定义的格式时,必须先调用HSSFWorkbook.createDataFormat(),因为这时在底层会先找有没有匹配的内嵌FormatRecord,如果没有就会新建一个FormatRecord,所以必须先调用这个方法,然后你就可以用获得的HSSFDataFormat实例的getFormat方法了,当然相对而言这种方式比较麻烦,所以内嵌格式还是用HSSFDataFormat.getBuiltinFormat静态方法更加直接一些。


合并单元格

    //合并单元格
    @Test
    public void testExcel7() throws IOException {
        //创建Excel工作薄对象
        HSSFWorkbook workbook=new HSSFWorkbook();
        //创建Excel工作表对象
        HSSFSheet sheet = workbook.createSheet("wj");
        //创建行的单元格,从0开始
        HSSFRow row = sheet.createRow(0);
        //创建单元格
        HSSFCell cell=row.createCell(0);
        //设置值
        cell.setCellValue(new Date());
        //合并列
        cell.setCellValue("合并列");
        CellRangeAddress region=new CellRangeAddress(0, 0, 0, 5);
        sheet.addMergedRegion(region);
        //合并行
        HSSFCell cell1 = row.createCell(6);
        cell1.setCellValue("合并行");
        region=new CellRangeAddress(0, 5, 6, 6);
        sheet.addMergedRegion(region);
 
        //文档输出
        FileOutputStream out = new FileOutputStream("/Users/wangjun/temp/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString() +".xls");
        workbook.write(out);
        out.close();
    }

CellRangeAddress对象其实就是表示一个区域,其构造方法如下:

CellRangeAddress(firstRow, lastRow, firstCol, lastCol),参数的说明:

  1. firstRow 区域中第一个单元格的行号
  2. lastRow 区域中最后一个单元格的行号
  3. firstCol 区域中第一个单元格的列号
  4. lastCol 区域中最后一个单元格的列号

提示: 即使你没有用CreateRow和CreateCell创建过行或单元格,也完全可以直接创建区域然后把这一区域合并,Excel的区域合并信息是单独存储的,和RowRecord、ColumnInfoRecord不存在直接关系。

(3)单元格对齐

  1. HSSFCell cell=row.createCell(0);
  2. cell.setCellValue("单元格对齐");
  3. HSSFCellStyle style=workbook.createCellStyle();
  4. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
  5. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
  6. style.setWrapText(true);//自动换行
  7. style.setIndention((short)5);//缩进
  8. style.setRotation((short)60);//文本旋转,这里的取值是从-90到90,而不是0-180度。
  9. cell.setCellStyle(style);

  水平对齐相关参数

  1. 如果是左侧对齐就是 HSSFCellStyle.ALIGN_FILL;
  2. 如果是居中对齐就是 HSSFCellStyle.ALIGN_CENTER;
  3. 如果是右侧对齐就是 HSSFCellStyle.ALIGN_RIGHT;
  4. 如果是跨列举中就是 HSSFCellStyle.ALIGN_CENTER_SELECTION;
  5. 如果是两端对齐就是 HSSFCellStyle.ALIGN_JUSTIFY;
  6. 如果是填充就是 HSSFCellStyle.ALIGN_FILL;

  垂直对齐相关参数

  1. 如果是靠上就是 HSSFCellStyle.VERTICAL_TOP;
  2. 如果是居中就是 HSSFCellStyle.VERTICAL_CENTER;
  3. 如果是靠下就是 HSSFCellStyle.VERTICAL_BOTTOM;
  4. 如果是两端对齐就是 HSSFCellStyle.VERTICAL_JUSTIFY;

(4)使用边框

    边框和其他单元格设置一样也是调用CellStyle接口,CellStyle有2种和边框相关的属性,分别是:

 

边框相关属性说明范例
Border+ 方向边框类型BorderLeft, BorderRight 等
方向 +BorderColor边框颜色TopBorderColor,BottomBorderColor 等
  1. HSSFCell cell=row.createCell(1);
  2. cell.setCellValue("设置边框");
  3. HSSFCellStyle style=workbook.createCellStyle();
  4. style.setBorderTop(HSSFCellStyle.BORDER_DOTTED);//上边框
  5. style.setBorderBottom(HSSFCellStyle.BORDER_THICK);//下边框
  6. style.setBorderLeft(HSSFCellStyle.BORDER_DOUBLE);//左边框
  7. style.setBorderRight(HSSFCellStyle.BORDER_SLANTED_DASH_DOT);//右边框
  8. style.setTopBorderColor(HSSFColor.RED.index);//上边框颜色
  9. style.setBottomBorderColor(HSSFColor.BLUE.index);//下边框颜色
  10. style.setLeftBorderColor(HSSFColor.GREEN.index);//左边框颜色
  11. style.setRightBorderColor(HSSFColor.PINK.index);//右边框颜色
  12. cell.setCellStyle(style);

其中边框类型分为以下几种

边框范例图对应的静态值
HSSFCellStyle. BORDER_DOTTED
HSSFCellStyle. BORDER_HAIR
HSSFCellStyle. BORDER_DASH_DOT_DOT
HSSFCellStyle. BORDER_DASH_DOT
HSSFCellStyle. BORDER_DASHED
HSSFCellStyle. BORDER_THIN
HSSFCellStyle. BORDER_MEDIUM_DASH_DOT_DOT
HSSFCellStyle. BORDER_SLANTED_DASH_DOT
HSSFCellStyle. BORDER_MEDIUM_DASH_DOT
HSSFCellStyle. BORDER_MEDIUM_DASHED
HSSFCellStyle. BORDER_MEDIUM
HSSFCellStyle. BORDER_THICK
HSSFCellStyle. BORDER_DOUBLE

(5)设置字体

  1. HSSFCell cell = row.createCell(1);
  2. cell.setCellValue("设置字体");
  3. HSSFCellStyle style = workbook.createCellStyle();
  4. HSSFFont font = workbook.createFont();
  5. font.setFontName("华文行楷");//设置字体名称
  6.  font.setFontHeightInPoints((short)28);//设置字号
  7. font.setColor(HSSFColor.RED.index);//设置字体颜色
  8. font.setUnderline(FontFormatting.U_SINGLE);//设置下划线
  9. font.setTypeOffset(FontFormatting.SS_SUPER);//设置上标下标
  10. font.setStrikeout(true);//设置删除线
  11. style.setFont(font);
  12. cell.setCellStyle(style);

下划线选项值:

        单下划线 FontFormatting.U_SINGLE

        双下划线 FontFormatting.U_DOUBLE

        会计用单下划线 FontFormatting.U_SINGLE_ACCOUNTING

        会计用双下划线 FontFormatting.U_DOUBLE_ACCOUNTING

        无下划线 FontFormatting.U_NONE

上标下标选项值:

        上标 FontFormatting.SS_SUPER

        下标 FontFormatting.SS_SUB

        普通,默认值 FontFormatting.SS_NONE

(6)背景和纹理

  1. HSSFCellStyle style = workbook.createCellStyle();
  2. style.setFillForegroundColor(HSSFColor.GREEN.index);//设置图案颜色
  3. style.setFillBackgroundColor(HSSFColor.RED.index);//设置图案背景色
  4. style.setFillPattern(HSSFCellStyle.SQUARES);//设置图案样式
  5. cell.setCellStyle(style);

图案样式及其对应的值:

 

 


     

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值