`
hellonickco
  • 浏览: 50566 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类

[翻译]POI3.5 HSSF 和XSSF Excel操作快速入门手册 1[附下载]

阅读更多

写在前面

想尽快的使用HSSFXSSF对电子表格进行操作吗?这个指南正是您所需要的。现在稳定的POI的版本为3.6。但最近在查阅POI的资料时发现,虽然资料很多,但是大都局限于2.x的版本,3.x中文资料比较少,查阅apache网站的时候发现了这份文档,看着不错,就翻译了一下,希望能够对大家有所帮助。由于时间仓促难免有翻译不当之处,还望不吝赐教,费神指正,感激不尽!

                                                     岑坚(高凯)

                                                   cenjian@taobao.com

                                                    2010-08-08

目录

添加POI支持... 5

创建新工作簿... 5

创建新sheet... 5

创建单元格... 5

新建一个时间格式的单元格... 6

处理不同内容格式的单元格... 7

遍历列和单元格... 7

获得单元格内的内容... 8

文本提取... 9

处理单元格边框... 10

填充色和颜色操作... 11

合并单元格... 12

字体的处理... 12

自定义颜色... 14

读取和重写工作簿... 15

在单元格中使用换行... 15

创建用户自定义数据格式... 16

Sheet页自适应页面大小... 17

设定打印区域... 17

设置脚注页码... 18

使用便捷函数... 18

上下移动一行... 19

将sheet页设定为默认选中... 19

设置sheet页放大倍率... 20

拆分和冻结窗格... 20

重复列和行... 21

页眉和页脚... 21

绘制图形... 22

设置图形样式... 23

图形和Graphics2d... 24

提纲... 25

图像处理... 26

关联范围和关联单元格... 27

为单元格添加注释... 30

根据内容调整单元格的宽度... 31

超级链接... 31

数据验证... 33

嵌入其他资源对象... 35

 

 

 

添加POI支持

 

鉴于现在大部分应用是以Maven作为构建,可在pom.xml中加入POImaven依赖,但是maven现在只支持到3.1版本,对3.5版本还不提供支持。

<dependency>

<groupId>poi</groupId>

   <artifactId>poi</artifactId>

   <version>3.1-FINAL</version>

</dependency>

 

因此可以直接在Apache 官网下载POI3.5版本,作为reference library加入工程中

创建新工作簿

Workbook wb = new HSSFWorkbook();

    FileOutputStream fileOut = new FileOutputStream("workbook.xls");

    wb.write(fileOut);

    fileOut.close();

 

    Workbook wb = new XSSFWorkbook();

FileOutputStream fileOut = new FileOutputStream("workbook.xlsx");

    wb.write(fileOut);

fileOut.close();

 

创建新sheet页

    Workbook wb = new HSSFWorkbook();

    //Workbook wb = new XSSFWorkbook();

    Sheet sheet1 = wb.createSheet("new sheet");

    Sheet sheet2 = wb.createSheet("second sheet");

    FileOutputStream fileOut = new FileOutputStream("workbook.xls");

    wb.write(fileOut);

    fileOut.close();

 

创建单元格

    Workbook wb = new HSSFWorkbook();

    //Workbook wb = new XSSFWorkbook();

    CreationHelper createHelper = wb.getCreationHelper();

    Sheet sheet = wb.createSheet("new sheet");

 

//创建一列,在其中加入多个单元格,列索引号从0开始,单元格的索引号也是从0

//开始

    Row row = sheet.createRow((short)0);[1]

    //创建一个单元格,并在其中加入内容.

    Cell cell = row.createCell(0);

    cell.setCellValue(1);

 

    // 上面的多行代码可以采用下面的一行代码的方式完成

    row.createCell(1).setCellValue(1.2);

    row.createCell(2).setCellValue(

         createHelper.createRichTextString("This is a string"));

    row.createCell(3).setCellValue(true);

 

    //将输出流写入一个文件

    FileOutputStream fileOut = new FileOutputStream("workbook.xls");

    wb.write(fileOut);

    fileOut.close();

                   

新建一个时间格式的单元格

    //Workbook wb = new XSSFWorkbook();

    CreationHelper createHelper = wb.getCreationHelper();

    Sheet sheet = wb.createSheet("new sheet");

 

   //创建一列,在其中加入多个单元格,列索引号从0开始,单元格的索引号也是从0

//开始

    Row row = sheet.createRow(0);

 

    //创建一个单元格,并在其中加入内容.  第一个单元格的内容不设置为日期时间格式

    Cell cell = row.createCell(0);

    cell.setCellValue(new Date());

 

//我们将第二个单元格设置成日期(和时间)格式。对这个文件来说创建一个新的单//元格格式非常重要,除非您能够不用内置的格式来渲染所有的单元格

    CellStyle cellStyle = wb.createCellStyle();

    cellStyle.setDataFormat(

    createHelper.createDataFormat().getFormat("m/d/yy h:mm"));

    cell = row.createCell(1);

    cell.setCellValue(new Date());

    cell.setCellStyle(cellStyle);

 

    //也可以用java.util.Calendar来设置单元格格式

    cell = row.createCell(2);

    cell.setCellValue(Calendar.getInstance());

    cell.setCellStyle(cellStyle);

 

    // 将输出流写入一个文件

    FileOutputStream fileOut = new FileOutputStream("workbook.xls");

    wb.write(fileOut);

fileOut.close();

 

处理不同内容格式的单元格

    Workbook wb = new HSSFWorkbook();

    Sheet sheet = wb.createSheet("new sheet");

    Row row = sheet.createRow((short)2);

    row.createCell(0).setCellValue(1.1);

    row.createCell(1).setCellValue(new Date());

    row.createCell(2).setCellValue(Calendar.getInstance());

    row.createCell(3).setCellValue("a string");

    row.createCell(4).setCellValue(true);

    row.createCell(5).setCellType(HSSFCell.CELL_TYPE_ERROR);

 

    //将输出流写入一个文件

    FileOutputStream fileOut = new FileOutputStream("workbook.xls");

    wb.write(fileOut);

fileOut.close();

 

遍历列和单元格

       有些时候您仅希望遍历一个sheet页中所有的列或是一列中所有的单元格。这可以用一个简单的for循环来实现。

   幸运的是,这非常简单。Row对象定义了一个CellIterator内部类用来处理单元格的遍历(可以通过调用row.cellIterator() 来获得Iterator 对象),另外,Sheet 对象提供了一个rowIterator()方法对所有列进行遍历

   除此之外,Sheet Row对象都实现了java.lang.Iterable 接口,因此如果您用的是Java 1.5 及以上版本,您可以简单的调用内置的“foreach”来实现。请看:

        Sheet sheet = wb.getSheetAt(0);

        for (Iterator<Row> rit = sheet.rowIterator(); rit.hasNext(); ) {

               Row row = rit.next();

               for (Iterator<Cell> cit = row.cellIterator(); cit.hasNext(); ) {

                       Cell cell = cit.next();

                       // Do something here

               }

        }

使用Java1.5 foreach 循环遍历列和单元格

有时候您仅希望遍历一个sheet页中所有的列或是一列中所有的单元格。如果您使用的是java1.5或是以上版本,那么这将十分的方便,因为它支持新的 foreach 循环。

幸运的是,这非常的简单。Sheet Row对象都实现了java.lang.Iterable 接口支持foreach 循环。对Row对象来说它支持通过调用CellIterator内部类用来处理单元格的遍历,对于Sheet对象来说它提供了一个rowIterator()方法对所有列进行遍历。

        Sheet sheet = wb.getSheetAt(0);

        for (Row row : sheet) {

               for (Cell cell : row) {

                       // Do something here

               }

        }

 

获得单元格内的内容

要想获得单元格内的内容,您首先要要知道单元格内容的格式(比如您想获得从字符格式的单元格内获得一个数字,您将得到的是NumberFormatException错误)。因此,您将希望能够切换到该单元格格式,然后为获得该单元格内容调用合适的getter方法。

在以下的代码中我们将对一个sheet页中的所有单元格进行遍历,并打印出单元格的引用和内容。

// import org.apache.poi.ss.usermodel.*;

 

Sheet sheet1 = wb.getSheetAt(0);

for (Row row : sheet1) {

        for (Cell cell : row) {

               CellReference cellRef = new CellReference(row.getRowNum(), cell.getCellNum());

               System.out.print(cellRef.formatAsString());

               System.out.print(" - ");

              

               switch(cell.getCellType()) {

      case Cell.CELL_TYPE_STRING:

        System.out.println(cell.getRichStringCellValue().getString());

        break;

      case Cell.CELL_TYPE_NUMERIC:

        if(DateUtil.isCellDateFormatted(cell)) {

          System.out.println(cell.getDateCellValue());

        } else {

          System.out.println(cell.getNumericCellValue());

        }

        break;

      case Cell.CELL_TYPE_BOOLEAN:

        System.out.println(cell.getBooleanCellValue());

        break;

      case Cell.CELL_TYPE_FORMULA:

        System.out.println(cell.getCellFormula());

        break;

      default:

        System.out.println();

               }

        }

}

 

文本提取

对于大多数的文本提取需求,标准的ExcelExtractor类应该能够满足您所有的需求。

        InputStream inp = new FileInputStream("workbook.xls");

        HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp));

        ExcelExtractor extractor = new ExcelExtractor(wb);

 

        extractor.setFormulasNotResults(true);

        extractor.setIncludeSheetNames(false);

        String text = extractor.getText();

对于特殊的文本提取,比如将xls文件内容写入csv文件,可以参考:
/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java
文件

单元格的各种对齐方式

    public static void main(String[] args)  throws Exception {

        Workbook wb = new XSSFWorkbook(); //或者是 new HSSFWorkbook();

 

        Sheet sheet = wb.createSheet();

        Row row = sheet.createRow((short) 2);

        row.setHeightInPoints(30);

 

        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);

 

        //将输出流写入一个文件

        FileOutputStream fileOut = new FileOutputStream("xssf-align.xlsx");

        wb.write(fileOut);

        fileOut.close();

 

    }

 

    /**

     *创建一个单元格并为其设定指定的对齐方式.

     *

     * @param wb       工作簿

     * @param row     单元格所在的列

     * @param column 单元格所在的行索引号

     * @param halign 单元格的水平对齐方式.

     */

    private static void createCell(Workbook wb, Row row, short column, short halign, short valign) {

        Cell cell = row.createCell(column);

        cell.setCellValue(new XSSFRichTextString("Align It"));

        CellStyle cellStyle = wb.createCellStyle();

        cellStyle.setAlignment(halign);

        cellStyle.setVerticalAlignment(valign);

        cell.setCellStyle(cellStyle);

    }

                   

如何处理边框

    Workbook wb = new HSSFWorkbook();

    Sheet sheet = wb.createSheet("new sheet");

 

   //创建一列,在其中加入多个单元格,列索引号从0开始,单元格的索引号也是从0

//开始.

    Row row = sheet.createRow(1);

 

    //创建一个单元格,并在其中加入内容.

    Cell cell = row.createCell(1);

    cell.setCellValue(4);

 

    //设置单元格边框为四周环绕.

    CellStyle style = wb.createCellStyle();

    style.setBorderBottom(CellStyle.BORDER_THIN);

    style.setBottomBorderColor(IndexedColors.BLACK.getIndex());

    </

 

我的博客地址:www.aitawo.com

2
0
分享到:
评论
1 楼 hoolycat 2011-07-15  
附件下载的链接呢?

相关推荐

    POI3.5 HSSF 和XSSF Excel操作快速入门手册.pdf

    ### POI3.5 HSSF 和XSSF Excel操作快速入门手册 #### 一、简介 Apache POI 是一个用于读写Microsoft Office格式文件的Java API,包括但不限于Excel、Word等。其中,HSSF用于处理Excel 97-2003格式(.xls),而XSSF则...

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

    ### POI3.5 HSSF 和 XSSF Excel 操作快速入门手册 #### 一、POI简介与背景 Apache POI 是一个强大的 Java API,用于处理 Microsoft Office 格式的文件,包括 Excel 和 Word。其中,HSSF 和 XSSF 分别是 POI 提供的...

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

    本手册是POI操作Excel文件的快速入门指南,旨在帮助开发者快速掌握使用HSSF和XSSF进行Excel文件操作的基本方法。通过阅读和实践本手册中的内容,用户可以学会如何添加POI支持、创建新工作簿、创建新的sheet页、操作...

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

    在本文中,我们将重点关注如何使用POI 3.5版本中的HSSF和XSSF库来读写Excel文件。 HSSF(Horizontally Stored Sheet Format)是POI针对旧版BIFF格式(Excel 97-2007)的API,而XSSF(XML Spreadsheet Format)则是...

    POI3.5-HSSF-和XSSF-Excel操作快速入门

    ### POI3.5-HSSF和XSSF-Excel操作快速入门 #### 一、简介与背景 Apache POI是Java编程语言中一个强大的工具包,用于处理Microsoft Office格式的文件,包括Excel、Word和PowerPoint等。POI的HSSF组件主要用于处理...

    Apache POI HSSF和XSSF读写EXCEL总结

    Apache POI HSSF和XSSF读写EXCEL总结

    Apache 1. POI HSSF和XSSF读写EXCEL总结.pdf

    。Apache 1.。POI HSSF和XSSF读写EXCEL总结.pdf

    Apache 1. POI HSSF和XSSF读写EXCEL总结.docx

    。Apache 1.。POI HSSF和XSSF读写EXCEL总结.docx

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

    在本文中,我们将深入探讨如何使用POI库中的HSSF和XSSF组件来读取和写入Excel文件,这两种组件分别用于处理.xls(97-2003版Excel格式)和.xlsx(2007及更高版本的Office Open XML格式)。 首先,让我们了解HSSF...

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

    在"poi-3.8-POI-HSSF和POI-XSSF和SXSSF.rar"这个压缩包中,主要涵盖了POI项目对Excel文件处理的三个关键组件:HSSF、XSSF和SXSSF。 1. HSSF (Horrible Spreadsheet Format):这是POI项目早期开发的一个API,用于...

    POI操作Excel详解,HSSF和XSSF

    它提供了两种主要的接口,HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format),分别用于处理老版本的.BIFF8格式(Excel 97-2003)和较新的.XLSX XML格式(Excel 2007及以上版本)。 **HSSF** 是...

    poi3.5API文档

    在POI 3.5中,主要关注的是HSSF(Horizontally SpreadSheet Format)和XSSF(XML SpreadSheet Format)两个组件,分别用于处理老版的.xls Excel文件和新版的.xlsx Excel文件。这两个组件提供了工作簿(Workbook)、...

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

    ### Apache POI HSSF and XSSF 快速指南帮助文档 API poi-3.15 #### 一、Apache POI 概述 Apache POI 是一个用于读取和写入 Microsoft Office 格式文件(如 Word 和 Excel)的开源 Java 库。它支持多种格式,包括...

    org.apache.poi.hssf.converter,office转html所需包

    Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel(.xls 和 .xlsx)、Word(.doc 和 .docx)以及PowerPoint(.ppt 和 .pptx)。在Java环境中,Apache POI 提供了丰富的API,使得开发者能够...

    poi最新3.5API

    - **HSSF和XSSF**: POI 3.5支持两种类型的Excel文件,即旧版的.HSSF(Horrible Spreadsheet Format)用于处理BIFF8格式的.xls文件,而.XSSF则用于处理OOXML格式的.xlsx文件。这两种API都提供了创建、读取和修改工作...

    POI 3.14 读excel hssf && xssf

    Apache POI提供了HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format)两个主要组件,分别用于读写旧版的.BIFF8格式(Excel 97-2007)和OOXML(Office Open XML)格式的Excel文件。 在HSSF中,...

    POI-3.5(很不错的共两部分)

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。这个项目在Java环境中提供了API,使得开发者能够创建、修改和读取这些文件。标题提到的“POI-3.5(很不错的共两...

    poi3.5.jar

    总的来说,Apache POI 3.5 jar包提供了全面的工具集,使得Java开发者能够方便地处理Microsoft Office文件,特别是在Excel的旧版和OOXML格式之间进行操作。通过这些库,开发者可以创建应用程序,读取、分析、编辑和...

    poi3.5的jar包

    POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 结构:  HSSF - 提供读写Microsoft Excel格式档案的功能。  XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。  HWPF - 提供读写...

    poi使用说明

    POI_3.8_API.CHM; POI3.5_HSSF_和XSSF_Excel操作快速入门手册.pdf; poi-bin-3.9-20121203.zip; poi使用总结.txt; POI整理.doc;

Global site tag (gtag.js) - Google Analytics