`
davidxiaozhi
  • 浏览: 241447 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

EXCEL POI学习笔记 xssf (一)

阅读更多

1.创建一个工作薄

 

        //创建一个工作薄
        XSSFWorkbook wb = new XSSFWorkbook();
        //创建一个电子表格createSheet
        XSSFSheet sheet = wb.createSheet("创建一个带名字的电子表格");
        //XSSFSheet sheet = wb.createSheet();//调用默认构造创建电子表格
        //创建第三行,行和列都是从0开始计算的
        XSSFRow row = sheet.createRow((short) 2);
        row.setHeightInPoints(30);//设置行高30
        //1-8行的列宽为256像素 15在这里表示一个像素
        for (int i = 0; i < 8; i++) {
            //column width is set in units of 1/256th of a character width
            sheet.setColumnWidth(i, 256 * 15);
        }

 

2.输出到文件或者流

 

        FileOutputStream fileOut = new FileOutputStream("E:/temp/study/xssf-align.xlsx");
        wb.write(fileOut);
        fileOut.close();
 

 

3.对单元格进行对齐居中设置

 

        createCell(wb, row, (short) 0, XSSFCellStyle.ALIGN_CENTER, XSSFCellStyle.VERTICAL_BOTTOM);
        createCell(wb, row, (short) 1, XSSFCellStyle.ALIGN_CENTER_SELECTION, XSSFCellStyle.VERTICAL_BOTTOM);
        createCell(wb, row, (short) 2, XSSFCellStyle.ALIGN_FILL, XSSFCellStyle.VERTICAL_CENTER);
        createCell(wb, row, (short) 3, XSSFCellStyle.ALIGN_GENERAL, XSSFCellStyle.VERTICAL_CENTER);
        createCell(wb, row, (short) 4, XSSFCellStyle.ALIGN_JUSTIFY, XSSFCellStyle.VERTICAL_JUSTIFY);
        createCell(wb, row, (short) 5, XSSFCellStyle.ALIGN_LEFT, XSSFCellStyle.VERTICAL_TOP);
        createCell(wb, row, (short) 6, XSSFCellStyle.ALIGN_RIGHT, XSSFCellStyle.VERTICAL_TOP);

    private static void createCell(XSSFWorkbook wb, XSSFRow row, short column,
            short halign, short valign) {
        XSSFCell cell = row.createCell(column);
        cell.setCellValue(new XSSFRichTextString("Align It"));
        //=======创建单元格样式:开始===========
        CellStyle cellStyle = wb.createCellStyle();
        cellStyle.setAlignment(halign);
        cellStyle.setVerticalAlignment(valign);
        //=======创建单元格样式:结束===========
        cell.setCellStyle(cellStyle);
    }
 

 

4.最大化的使用Workbook

   (1) 使用模板,例如 单元格样式和数字格式化等重复使用的最后使用全局对象

 

    /**
     * 创建样式库.
     */
    private static Map<String, XSSFCellStyle> createStyles(XSSFWorkbook wb){
        Map<String, XSSFCellStyle> styles = new HashMap<String, XSSFCellStyle>();
        XSSFDataFormat fmt = wb.createDataFormat();

        XSSFCellStyle style1 = wb.createCellStyle();
        style1.setAlignment(XSSFCellStyle.ALIGN_RIGHT);
        style1.setDataFormat(fmt.getFormat("0.0%"));
        styles.put("percent", style1);

        XSSFCellStyle style2 = wb.createCellStyle();
        style2.setAlignment(XSSFCellStyle.ALIGN_CENTER);
        style2.setDataFormat(fmt.getFormat("0.0X"));
        styles.put("coeff", style2);

        XSSFCellStyle style3 = wb.createCellStyle();
        style3.setAlignment(XSSFCellStyle.ALIGN_RIGHT);
        style3.setDataFormat(fmt.getFormat("$#,##0.00"));
        styles.put("currency", style3);

        XSSFCellStyle style4 = wb.createCellStyle();
        style4.setAlignment(XSSFCellStyle.ALIGN_RIGHT);
        style4.setDataFormat(fmt.getFormat("mmm dd"));
        styles.put("date", style4);

        XSSFCellStyle style5 = wb.createCellStyle();
        XSSFFont headerFont = wb.createFont();
        headerFont.setBold(true);
        style5.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style5.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
        style5.setFont(headerFont);
        styles.put("header", style5);

        return styles;
    }

   使用样式库

   private static void generate(Writer out, Map<String, XSSFCellStyle> styles) throws Exception {

        Random rnd = new Random();
        Calendar calendar = Calendar.getInstance();

        SpreadsheetWriter sw = new SpreadsheetWriter(out);
        sw.beginSheet();

        //创建头部行
        sw.insertRow(0);
        int styleIndex = styles.get("header").getIndex();
        sw.createCell(0, "Title", styleIndex);
        sw.createCell(1, "% Change", styleIndex);
        sw.createCell(2, "Ratio", styleIndex);
        sw.createCell(3, "Expenses", styleIndex);
        sw.createCell(4, "Date", styleIndex);

        sw.endRow();

        //插入数据行
        for (int rownum = 1; rownum < 100000; rownum++) {
            sw.insertRow(rownum);

            sw.createCell(0, "Hello, " + rownum + "!");
            sw.createCell(1, (double)rnd.nextInt(100)/100, styles.get("percent").getIndex());
            sw.createCell(2, (double)rnd.nextInt(10)/10, styles.get("coeff").getIndex());
            sw.createCell(3, rnd.nextInt(10000), styles.get("currency").getIndex());
            sw.createCell(4, calendar, styles.get("date").getIndex());

            sw.endRow();

            calendar.roll(Calendar.DAY_OF_YEAR, 1);
        }
        sw.endSheet();
    }

5  创建各种类型的单元格(数字类型,富文本类型,日期类型,公式,超级连接)

 

        // 创建数字类型的单元格
        Cell cell = row.createCell((short)0);
        cell.setCellValue(1);
        row.createCell(1).setCellValue(1.2);
        //创建单元格并接设置值为简单字符串
        row.createCell(2).setCellValue("This is a string cell");
        //创建单元格并接设置值为富文本
        RichTextString str = creationHelper.createRichTextString("Apache");
        Font font = wb.createFont();
        font.setItalic(true);
        font.setUnderline(Font.U_SINGLE);
        str.applyFont(font);
        row.createCell(3).setCellValue(str);

        //创建boolean类型的单元格
        row.createCell(4).setCellValue(true);
        //创建单元格,当前单元的值是通过公式得到的 formula
        row.createCell(5).setCellFormula("SUM(A1:B1)");
        //创建日期类型的单元格并接进行格式化
        CellStyle style = wb.createCellStyle();
        style.setDataFormat(creationHelper.createDataFormat().getFormat("m/d/yy h:mm"));
        cell = row.createCell(6);
        cell.setCellValue(new Date());
        cell.setCellStyle(style);
        //创建超级类型的单元格
        row.createCell(7).setCellFormula("SUM(A1:B1)");                    cell.setCellFormula("HYPERLINK(\"http://google.com\",\"Google\")");


 6.自定义单元格的数据格式

 

        Workbook wb = new XSSFWorkbook();  //or new HSSFWorkbook();
        Sheet sheet = wb.createSheet("format sheet");
        DataFormat format = wb.createDataFormat();
        Row row = sheet.createRow(0);
        Cell cell = row.createCell(0);
        cell.setCellValue(11111.25);
        //创建单元格样式
        CellStyle style = wb.createCellStyle();   
        style.setDataFormat(format.getFormat("0.0"));
        cell.setCellStyle(style);
        
        row = sheet.createRow(1);
        cell = row.createCell(0);
        cell.setCellValue(11111.25);
        style = wb.createCellStyle();
        style.setDataFormat(format.getFormat("#,##0.0000"));
        cell.setCellStyle(style);
 

7.在单元格上添加注释

 

        CreationHelper factory = wb.getCreationHelper();

        Sheet sheet = wb.createSheet();
        //创建单元格1
        Cell cell1 = sheet.createRow(3).createCell(5);
        cell1.setCellValue("F4");
        //单元格1添加注释
        Drawing drawing = sheet.createDrawingPatriarch();
        ClientAnchor anchor = factory.createClientAnchor();
        Comment comment1 = drawing.createCellComment(anchor);
        RichTextString str1 = factory.createRichTextString("Hello, World!");
        comment1.setString(str1);
        comment1.setAuthor("Apache POI");
        cell1.setCellComment(comment1);
        //创建单元格2
        Cell cell2 = sheet.createRow(2).createCell(2);
        cell2.setCellValue("C3");
        //给单元格2添加注释
        Comment comment2 = drawing.createCellComment(anchor);
        RichTextString str2 = factory.createRichTextString("XSSF can set cell comments");
        //设置注释字体的样式
        Font font = wb.createFont();
        font.setFontName("Arial");
        font.setFontHeightInPoints((short)14);
        font.setBoldweight(Font.BOLDWEIGHT_BOLD);
        font.setColor(IndexedColors.RED.getIndex());
        str2.applyFont(font);

        comment2.setString(str2);
        comment2.setAuthor("Apache POI");
        comment2.setColumn(2);
        comment2.setRow(2);
 

 

8.我们知道excel中可以内嵌各种数据,下面演示如何提取各种类型的数据

 

    public static void main(String[] args) throws Exception {
        XSSFWorkbook workbook = new XSSFWorkbook(args[0]);
        for (PackagePart pPart : workbook.getAllEmbedds()) {
            String contentType = pPart.getContentType();
            // Excel Workbook - either binary or OpenXML
            if (contentType.equals("application/vnd.ms-excel")) {//offic 2003 excel
                HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(pPart.getInputStream());
            }
            // Excel Workbook - OpenXML file format
            else if (contentType.equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) {//offic 2007 excel
                XSSFWorkbook embeddedWorkbook = new XSSFWorkbook(pPart.getInputStream());
            }
            // Word Document - binary (OLE2CDF) file format
            else if (contentType.equals("application/msword")) {//offic 2003 word
                HWPFDocument document = new HWPFDocument(pPart.getInputStream());
            }
            // Word Document - OpenXML file format
            else if (contentType.equals("application/vnd.openxmlformats-officedocument.wordprocessingml.document")) {
                XWPFDocument document = new XWPFDocument(pPart.getInputStream());
            }
            // PowerPoint Document - binary file format
            else if (contentType.equals("application/vnd.ms-powerpoint")) {
                HSLFSlideShow slideShow = new HSLFSlideShow(pPart.getInputStream());
            }
            // PowerPoint Document - OpenXML file format
            else if (contentType.equals("application/vnd.openxmlformats-officedocument.presentationml.presentation")) {
                OPCPackage docPackage = OPCPackage.open(pPart.getInputStream());
                XSLFSlideShow slideShow = new XSLFSlideShow(docPackage);
            }
            // Any other type of embedded object.
            else {
                System.out.println("Unknown Embedded Document: " + contentType);
                InputStream inputStream = pPart.getInputStream();
            }
        }
    }
 

 

9.单元格背景色的设值

 

        // Aqua background
        //创建样式
        CellStyle style = wb.createCellStyle();
        //设值添加背景色
        style.setFillBackgroundColor(IndexedColors.AQUA.getIndex());
        style.setFillPattern(CellStyle.BIG_SPOTS);

        Cell cell = row.createCell((short) 1);
        cell.setCellValue(new XSSFRichTextString("X"));
        cell.setCellStyle(style);

        // Orange "foreground", foreground being the fill foreground not the font color.
        //创建样式
        style = wb.createCellStyle();
        //设值添加背景色 style.setFillForegroundColor(IndexedColors.ORANGE.getIndex());
        style.setFillPattern(CellStyle.SOLID_FOREGROUND);
        cell = row.createCell((short) 2);
        cell.setCellValue(new XSSFRichTextString("X"));
        cell.setCellStyle(style);
 

 

10.设置打印时内容为一页演示,设置页眉页脚

 

    //设置打印格式化为一页显示
    public static void main(String[]args) throws Exception {
        Workbook wb = new XSSFWorkbook();  //or new HSSFWorkbook();
        Sheet sheet = wb.createSheet("format sheet");
        PrintSetup ps = sheet.getPrintSetup();
        //设置自动换行
        sheet.setAutobreaks(true);
        
        ps.setFitHeight((short) 1);
        ps.setFitWidth((short) 1);

        // Create various cells and rows for spreadsheet.

        FileOutputStream fileOut = new FileOutputStream("E:/temp/study/fitSheetToOnePage.xlsx");
        wb.write(fileOut);
        fileOut.close();

    }

  //在页脚设置当前页编号

        Footer footer = sheet.getFooter();
        //&P == current page number
        //&N == page numbers
        footer.setRight("Page &P of &N");

        //设置页头
        Header firstHeader=((XSSFSheet)sheet).getFirstHeader();
        //&F == workbook file name
        firstHeader.setLeft("&F ......... first header");

 11.在单元格中创建各种类型的超级链接、合并单元格操作、在单元格中实现在动换行。

 

        CreationHelper createHelper = wb.getCreationHelper();
        //超级链接的样式,蓝色并接默认有下划线
        CellStyle hlink_style = wb.createCellStyle();
        Font hlink_font = wb.createFont();
        hlink_font.setUnderline(Font.U_SINGLE);
        hlink_font.setColor(IndexedColors.BLUE.getIndex());
        hlink_style.setFont(hlink_font);
        //创建链接到http://poi.apache.org/的超级链接
        Cell cell;
        Sheet sheet = wb.createSheet("Hyperlinks");
        //URL
        cell = sheet.createRow(0).createCell((short)0);
        cell.setCellValue("URL Link");
        Hyperlink link = createHelper.createHyperlink(Hyperlink.LINK_URL);
        link.setAddress("http://poi.apache.org/");
        cell.setHyperlink(link);
        cell.setCellStyle(hlink_style);

        //链接指定目录的文件
        cell = sheet.createRow(1).createCell((short)0);
        cell.setCellValue("File Link");
        link = createHelper.createHyperlink(Hyperlink.LINK_FILE);
        link.setAddress("c://link1.xls");
        cell.setHyperlink(link);
        cell.setCellStyle(hlink_style);

        //调用本地客户端发送邮件
        cell = sheet.createRow(2).createCell((short)0);
        cell.setCellValue("Email Link");
        link = createHelper.createHyperlink(Hyperlink.LINK_EMAIL);
        //note, if subject contains white spaces, make sure they are url-encoded
        link.setAddress("mailto:poi@apache.org?subject=Hyperlinks");
        cell.setHyperlink(link);
        cell.setCellStyle(hlink_style);

        //link to a place in this workbook

        //创建一个定位到Target Sheet'!A1的链接
        Sheet sheet2 = wb.createSheet("Target Sheet");
        sheet2.createRow(0).createCell((short)0).setCellValue("Target Cell");

        cell = sheet.createRow(3).createCell((short)0);
        cell.setCellValue("Worksheet Link");
        Hyperlink link2 = createHelper.createHyperlink(Hyperlink.LINK_DOCUMENT);
        link2.setAddress("'Target Sheet'!A1");//连接到Target Sheet a1单元格
        cell.setHyperlink(link2);
        cell.setCellStyle(hlink_style);
 

 

         Row row = sheet.createRow((short) 1);
        Cell cell = row.createCell((short) 1);
        cell.setCellValue(new XSSFRichTextString("This is a test of merging"));
        //(行,行,列,列)  合并单元格
        sheet.addMergedRegion(new CellRangeAddress(5, 7, 1, 2));//第二行 二到三列
 

 

        //单元格中实现自动换行
        Cell cell = row.createCell(2);
        cell.setCellValue("Use \n with word wrap on to create a new line");

        //to enable newlines you need set a cell styles with wrap=true
        CellStyle cs = wb.createCellStyle();
        cs.setWrapText(true);//开启自动换行需要setWrapText(true)
        cell.setCellStyle(cs);
 

12 待续

 

 

 

分享到:
评论
4 楼 lyndan 2013-01-07  
public static void main(String args[]){
System.out.println("做个小测试");
}


3 楼 lijunwyf41 2012-07-23  
XSSFWorkbook 这个类在哪个包里面?能不能把你所引用的包也上传?我下载最新的,没有XSSFWorkbook 这个类,
2 楼 haldis 2012-07-12  
有完整的例子吗?谢谢
1 楼 huwei117 2011-08-12  
学习了,谢谢!

相关推荐

    Apache POI HSSF和XSSF读写EXCEL总结

    Apache POI HSSF和XSSF读写EXCEL总结

    poi操作Excel,HSSF,XSSF两种方式(.xls与.xlsx)导入导出

    总结来说,Apache POI的HSSF和XSSF组件为Java开发者提供了一个强大且灵活的工具,用于处理Excel文件。它们使得在Java应用程序中读写Excel变得非常简单,无论是传统的.xls文件还是现代的.xlsx文件。通过学习和掌握...

    poi excel poi excel poi excel

    Jakarta POI 是 Apache POI 的早期项目名称,它提供了一组 API 来处理 Microsoft Office 文件格式,特别是针对 Excel(`.xls` 和 `.xlsx`)和 Word(`.doc` 和 `.docx`)文件。Apache POI 项目主要由以下几个子项目...

    poi-3.8-POI-HSSF和POI-XSSF和SXSSF.rar

    Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint。在"poi-3.8-POI-HSSF和POI-XSSF和SXSSF.rar"这个压缩包中,主要涵盖了POI项目对Excel文件处理的三个关键组件:HSSF、...

    POI 3.14 读excel hssf && xssf

    标题中的"POI 3.14 读excel hssf && xssf"指的是Apache POI库的3.14版本,这是一个广泛使用的Java API,用于处理Microsoft Office格式的文件,特别是Excel。Apache POI提供了HSSF(Horrible Spreadsheet Format)和...

    POI学习笔记详细说明

    POI学习笔记第二版更详细的POI学习笔记第二版更详细的

    excelpoi学习代码

    在Java编程领域,Apache POI库是一个非常重要的工具,它允许开发者读取、写入以及修改Microsoft Office格式的文件,包括Excel。标题“excelpoi学习代码”表明我们将探讨如何使用Apache POI处理Excel文件。描述虽简洁...

    poi.xssf导出

    XSSF是POI提供的一种处理Excel 2007及以上版本(.xlsx文件)的API。 首先,我们来看`ProductListExport.java`。这个文件很可能包含了主要的Excel导出逻辑。在Java程序中,导出Excel通常涉及以下几个步骤: 1. **...

    Excel POI 工具类

    在Java开发中,Apache POI 是一个非常流行的库,它允许程序员创建、修改和显示Microsoft Office格式的文件,特别是Excel工作簿(.xlsx 和 .xls 文件)。本篇将深入探讨"Excel POI 工具类",这个工具类旨在简化日常的...

    org.apache.poi JAR包 Java

    import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook;

    excelpoi导入导出功能

    Apache POI是一个强大的库,它允许开发者使用Java来读取、写入和修改Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。本项目提供的"excelpoi导入导出功能"就是基于Apache POI实现的,它支持使用注解进行数据...

    Apache POI HSSF and XSSF 快速指南帮助文档 API poi-3.15

    Apache POI 是一个用于读取和写入 Microsoft Office 格式文件(如 Word 和 Excel)的开源 Java 库。它支持多种格式,包括旧版的二进制格式(例如 .xls 文件)和较新的基于 XML 的格式(例如 .xlsx 文件)。本指南将...

    poi log4j excel poi log4j excel poi log4j excel

    poi log4j excel poi log4j excel poi log4j excel poi log4j excel poi log4j excel poi log4j excel poi log4j excel

    POI生成Excel POI操作Excel POI读取Excel POI类库

    Apache POI是一个强大的Java库,专门用于处理...通过lib.rar和Poi02.rar中的示例代码,你可以更深入地了解和学习POI操作Excel的具体实现。在实践中,结合这些资源,你将能够熟练地在Java Web项目中集成Excel处理功能。

    java导出excel POI jar包

    在POI中,XMLBeans用于处理OOXML(Office Open XML)格式的Excel文件,提供了一种将XML数据映射到Java对象的方式。 `poi-3.15-beta1.jar`是POI主库,包含了处理HSSF(旧版的.xls文件)和XSSF(新版本的.xlsx文件)...

    POI3.5_HSSF_和XSSF_Excel操作快速入门手册

    Apache POI项目提供了HSSF和XSSF两个模块,分别用于操作旧版的Excel文件(.xls)和新版的Excel文件(.xlsx)。HSSF代表Horrible Spreadsheet Format,是针对Excel 97-2003文件格式的实现;而XSSF代表XML Spreadsheet...

    POI导出Excel文件

    Apache POI是一个流行的Java库,用于读取和写入Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。这个实例提供了两种方法来导出Excel文件:通过Servlet和通过main方法。这两种方法都是在Java环境中操作...

    excel poi接口使用方法

    在Java开发中,处理Excel数据是一项常见的任务,Apache POI库提供了一种高效且灵活的方式来读写Microsoft Office格式的文件,包括Excel。本篇文章将详细探讨如何使用POI接口,特别是HSSF(Horizontally Spanned ...

    excelPOI写的小程序 学习用

    在这个"excelPOI写的小程序 学习用"项目中,我们可以看到开发者使用Excel POI库来创建了一个小程序,目的是为了学习如何在Java环境中操作Excel文档。 首先,让我们了解一下Excel POI的基本概念。POI提供了HSSF...

Global site tag (gtag.js) - Google Analytics