`

POI学习笔记(一)

    博客分类:
  • java
阅读更多

项目中经常要解析和生成Excel文件,最常用的开源组件有poi与jxl。jxl是韩国人开发的,发行较早,但是更新的很慢,目前似乎还不支持excel2007。poi是apache下的一个子项目,poi应该是处理ms的office系列文档最好的组件了。poi3.6版本已经开始支持excel2007了。但是由于excel2007底层的实现似乎变成xml与excel2003底层存储发生了本质的变化,因此poi解析excel的类就存在差异了。

      现在简单的介绍下poi常用的接口。

      经常用的类一般都在org.apache.poi.hssf.usermodel(excel2003)或org.apache.poi.xssf.usermodel
(excel2007)。

  • 工作薄:  WorkBook是操作Excel的入口,HSSFWorkbook, XSSFWorkbook实现了该接口。
  • 页:Sheet表示工作薄的分页。HSSFSheet, XSSFChartSheet, XSSFDialogsheet, XSSFSheet实现了该接口。
  • Row:表示页中的一行。HSSFRow, XSSFRow实现了该接口。
  • Cell:行中的一个单元格。HSSFCell, XSSFCell实现了该接口。

从上面的介绍得知:页是通过工作薄对象创建的,行是通过页对象创建的,单元格是通过行对象创建的。接下来,我们就开始发掘poi的强大功能吧。

  1. 创建一个空白的工作薄
Java代码 复制代码
  1. import java.io.FileOutputStream;   
  2. import org.apache.poi.hssf.usermodel.HSSFWorkbook;   
  3. import org.apache.poi.ss.usermodel.Workbook;   
  4. import org.apache.poi.xssf.usermodel.XSSFWorkbook;   
  5.   
  6. //2003版本   
  7. Workbook wb = new HSSFWorkbook();   
  8. FileOutputStream fileOut = new FileOutputStream("workbook.xls");   
  9. wb.write(fileOut);   
  10.  fileOut.close();   
  11.   
  12. //2007版本   
  13. // Workbook wb = new XSSFWorkbook();   
  14. // FileOutputStream fileOut = new FileOutputStrea("workbook.xlsx");   
  15. // wb.write(fileOut);   
  16. // fileOut.close();  
import java.io.FileOutputStream;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

//2003版本
Workbook wb = new HSSFWorkbook();
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
 fileOut.close();

//2007版本
// Workbook wb = new XSSFWorkbook();
// FileOutputStream fileOut = new FileOutputStrea("workbook.xlsx");
// wb.write(fileOut);
// fileOut.close();

 注意:Workbook 是org.apache.poi.ss.usermodel包下的一个接口,注意与以前版本的不同,HSSFWorkbook和XSSFWorkbook实现了该接口,这样就达到了面前接口编程。下面的excel工具类中要用到此点知识。

 2. 创建两个空白页

 

 

Java代码 复制代码
  1. Workbook wb = new HSSFWorkbook();   
  2. //Workbook wb = new XSSFWorkbook();   
  3. Sheet sheet1 = wb.createSheet("new sheet");   
  4. Sheet sheet2 = wb.createSheet("second sheet");   
  5. FileOutputStream fileOut = new FileOutputStream("workbook.xls");   
  6. wb.write(fileOut);   
  7. fileOut.close();  
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();

 

3. 创建单元格

 

Java代码 复制代码
  1. public void createRow() throws Exception {   
  2.         Workbook wb = new HSSFWorkbook();   
  3.         // Workbook wb = new XSSFWorkbook();   
  4.         CreationHelper createHelper = wb.getCreationHelper();   
  5.         Sheet sheet = wb.createSheet("new sheet");   
  6.   
  7.         //创建一行并放一些单元格到该行中,行的索引是以0开始的   
  8.         Row row = sheet.createRow((short0);   
  9.         // 创建一个单元格并填充一个整数的值   
  10.         Cell cell = row.createCell(0);   
  11.         cell.setCellValue(1);   
  12.   
  13.         //链式写法   
  14.         row.createCell(1).setCellValue(1.2);   
  15.         row.createCell(2).setCellValue(   
  16.                 createHelper.createRichTextString("This is a string"));   
  17.         row.createCell(3).setCellValue(true);   
  18.   
  19.         //输出文件   
  20.         FileOutputStream fileOut = new FileOutputStream("workbook.xls");   
  21.         wb.write(fileOut);   
  22.         fileOut.close();   
  23.   
  24.     }  
public void createRow() throws Exception {
		Workbook wb = new HSSFWorkbook();
		// Workbook wb = new XSSFWorkbook();
		CreationHelper createHelper = wb.getCreationHelper();
		Sheet sheet = wb.createSheet("new sheet");

		//创建一行并放一些单元格到该行中,行的索引是以0开始的
		Row row = sheet.createRow((short) 0);
		// 创建一个单元格并填充一个整数的值
		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();

	}

 

 4. 创建日期单元格

 

Java代码 复制代码
  1. public void createDateCell() throws Exception {   
  2.         Workbook wb = new HSSFWorkbook();   
  3.         // Workbook wb = new XSSFWorkbook();   
  4.         CreationHelper createHelper = wb.getCreationHelper();   
  5.         Sheet sheet = wb.createSheet("new sheet");   
  6.   
  7.         // Create a row and put some cells in it. Rows are 0 based.   
  8.         Row row = sheet.createRow(0);   
  9.   
  10.         // Create a cell and put a date value in it. The first cell is not   
  11.         // styled   
  12.         // as a date.   
  13.         Cell cell = row.createCell(0);   
  14.         cell.setCellValue(new Date());   
  15.   
  16.         // we style the second cell as a date (and time). It is important to   
  17.         // create a new cell style from the workbook otherwise you can end up   
  18.         // modifying the built in style and effecting not only this cell but   
  19.         // other cells.   
  20.         CellStyle cellStyle = wb.createCellStyle();   
  21.         cellStyle.setDataFormat(createHelper.createDataFormat().getFormat(   
  22.                 "yyyy/MM/dd hh:mm"));   
  23.         cell = row.createCell(1);   
  24.         // cell.setCellValue(new Date());   
  25.         Date date = new Date();   
  26.   
  27.         cell.setCellValue(createHelper.createRichTextString(date.toString()));   
  28.         cell.setCellStyle(cellStyle);   
  29.   
  30.         // you can also set date as java.util.Calendar   
  31.         cell = row.createCell(2);   
  32.         cell.setCellValue(Calendar.getInstance());   
  33.         cell.setCellStyle(cellStyle);   
  34.   
  35.         // Write the output to a file   
  36.         FileOutputStream fileOut = new FileOutputStream("workbook.xls");   
  37.         wb.write(fileOut);   
  38.         fileOut.close();   
  39.   
  40.     }  
public void createDateCell() throws Exception {
		Workbook wb = new HSSFWorkbook();
		// Workbook wb = new XSSFWorkbook();
		CreationHelper createHelper = wb.getCreationHelper();
		Sheet sheet = wb.createSheet("new sheet");

		// Create a row and put some cells in it. Rows are 0 based.
		Row row = sheet.createRow(0);

		// Create a cell and put a date value in it. The first cell is not
		// styled
		// as a date.
		Cell cell = row.createCell(0);
		cell.setCellValue(new Date());

		// we style the second cell as a date (and time). It is important to
		// create a new cell style from the workbook otherwise you can end up
		// modifying the built in style and effecting not only this cell but
		// other cells.
		CellStyle cellStyle = wb.createCellStyle();
		cellStyle.setDataFormat(createHelper.createDataFormat().getFormat(
				"yyyy/MM/dd hh:mm"));
		cell = row.createCell(1);
		// cell.setCellValue(new Date());
		Date date = new Date();

		cell.setCellValue(createHelper.createRichTextString(date.toString()));
		cell.setCellStyle(cellStyle);

		// you can also set date as java.util.Calendar
		cell = row.createCell(2);
		cell.setCellValue(Calendar.getInstance());
		cell.setCellStyle(cellStyle);

		// Write the output to a file
		FileOutputStream fileOut = new FileOutputStream("workbook.xls");
		wb.write(fileOut);
		fileOut.close();

	}

 

5.  创建不同的单元格样式

 

Java代码 复制代码
  1. public void createCellType() throws Exception{   
  2.         Workbook wb = new HSSFWorkbook();   
  3.         Sheet sheet = wb.createSheet("new sheet");   
  4.         Row row = sheet.createRow((short)2);   
  5.         row.createCell(0).setCellValue(1.1);   
  6.         row.createCell(1).setCellValue(new Date());   
  7.         row.createCell(2).setCellValue(Calendar.getInstance());   
  8.         row.createCell(3).setCellValue("a string");   
  9.         row.createCell(4).setCellValue(true);   
  10.         row.createCell(5).setCellType(HSSFCell.CELL_TYPE_ERROR);   
  11.   
  12.         // Write the output to a file   
  13.         FileOutputStream fileOut = new FileOutputStream("workbook.xls");   
  14.         wb.write(fileOut);   
  15.         fileOut.close();   
  16.     }  
public void createCellType() throws Exception{
		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);

	    // Write the output to a file
	    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
	    wb.write(fileOut);
	    fileOut.close();
	}

 

6.  设置单元格水平垂直对齐方式

 

Java代码 复制代码
  1. public static void main(String[] args)  throws Exception {   
  2.         Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook();   
  3.   
  4.         Sheet sheet = wb.createSheet();   
  5.         Row row = sheet.createRow((short2);   
  6.         row.setHeightInPoints(30);   
  7.   
  8.         createCell(wb, row, (short0, XSSFCellStyle.ALIGN_CENTER, XSSFCellStyle.VERTICAL_BOTTOM);   
  9.         createCell(wb, row, (short1, XSSFCellStyle.ALIGN_CENTER_SELECTION, XSSFCellStyle.VERTICAL_BOTTOM);   
  10.         createCell(wb, row, (short2, XSSFCellStyle.ALIGN_FILL, XSSFCellStyle.VERTICAL_CENTER);   
  11.         createCell(wb, row, (short3, XSSFCellStyle.ALIGN_GENERAL, XSSFCellStyle.VERTICAL_CENTER);   
  12.         createCell(wb, row, (short4, XSSFCellStyle.ALIGN_JUSTIFY, XSSFCellStyle.VERTICAL_JUSTIFY);   
  13.         createCell(wb, row, (short5, XSSFCellStyle.ALIGN_LEFT, XSSFCellStyle.VERTICAL_TOP);   
  14.         createCell(wb, row, (short6, XSSFCellStyle.ALIGN_RIGHT, XSSFCellStyle.VERTICAL_TOP);   
  15.   
  16.         // Write the output to a file   
  17.         FileOutputStream fileOut = new FileOutputStream("xssf-align.xlsx");   
  18.         wb.write(fileOut);   
  19.         fileOut.close();   
  20.   
  21.     }   
  22.   
  23.     /**  
  24.      * Creates a cell and aligns it a certain way.  
  25.      *  
  26.      * @param wb     the workbook  
  27.      * @param row    the row to create the cell in  
  28.      * @param column the column number to create the cell in  
  29.      * @param halign the horizontal alignment for the cell.  
  30.      */  
  31.     private static void createCell(Workbook wb, Row row, short column, short halign, short valign) {   
  32.         Cell cell = row.createCell(column);   
  33.         cell.setCellValue(new XSSFRichTextString("Align It"));   
  34.         CellStyle cellStyle = wb.createCellStyle();   
  35.         cellStyle.setAlignment(halign);   
  36.         cellStyle.setVerticalAlignment(valign);   
  37.         cell.setCellStyle(cellStyle);   
  38.     }  
分享到:
评论
1 楼 cylove007 2010-07-07  
楼主这篇文章写得很详细,学习了,谢谢

相关推荐

    POI学习笔记详细说明

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

    POI学习笔记

    "POI学习笔记" POI(Apache POI)是一款流行的Java库,用于处理Microsoft Office文件格式,包括Excel、Word、PowerPoint等。POI提供了一个简洁和灵活的API,允许开发者轻松地读取、写入和操作Office文件。 POI的...

    POI的学习笔记

    ### POI学习笔记知识点解析 #### 一、POI简介 Apache POI是一个开源的Java API,用于处理Microsoft Office格式的文件,包括Excel (.xls, .xlsx), PowerPoint (.ppt, .pptx) 和 Word (.doc, .docx)。POI提供了一套...

    java学习笔记模版

    【Java学习笔记模版】 Java实习工程师在学习过程中,会涉及到许多关键知识点,尤其是在企业级开发的场景下。从给出的四天学习笔记来看,实习生正在逐步掌握Java Web开发的基础和核心技能。以下是对这些知识点的详细...

    软考中级网工考试学习笔记

    1、包括网工第五版较全面的学习笔记(近4万字)、常用检测命令实践图、协议神图、常见编码图、网工简单的100条知识点 2、笔记目录如: 第一章 计算机基础知识 一、数据表示 (一) 定点和浮点和整数 二、逻辑计算机 ...

    OA (ssh) 基本实现(poi 生成 Excel , struts2动态下载 mysql数据库文件) 学习笔记(含源代码)

    OA (ssh) 基本实现(poi 生成 Excel , struts2动态下载 mysql数据库文件) 学习笔记(含源代码) 借鉴 风中叶 老师的视频,写的文章,代码比较详实。 说了很多我的看法,和思考,做了充分的日志

    POI,读取文件工具类和笔记

    Apache POI 是一个开源项目,专门用于处理 Microsoft Office 格式的文件,如 Excel、...通过不断实践和学习,你可以利用 POI 完成更多复杂的任务,如处理复杂的公式、应用丰富的格式和样式,以及实现高性能的文件操作。

    Java操作EXCEL 学习笔记

    本学习笔记将深入探讨如何使用Apache POI库来实现Java对Excel的高效操作。 Apache POI是一个开源项目,提供了读写Microsoft Office格式文档的能力,包括Excel(.xlsx和.xls)。在Java中,我们可以借助POI库来创建、...

    java学习笔记

    Java学习笔记涵盖了大量的编程知识,主要集中在Java语言本身、数据库技术以及常见的企业级框架上。以下是对这些知识点的详细说明: 1. **Java基础**:Java是一种广泛使用的面向对象的编程语言,以其“一次编写,...

    Java最全学习资料+面试题+DOS命令+设计模式+Excel技巧+java学习笔记

    这份压缩包中的资源全面覆盖了Java的学习和应用,包括学习资料、面试题、DOS命令、设计模式以及Excel技巧和Java学习笔记。让我们逐一探讨这些知识点。 1. **Java学习资料**:Java学习资料通常包括基础语法、面向...

    百度地图学习笔记

    ### 百度地图学习笔记知识点总结 #### 一、初始化地图与设置地图状态 在进行任何操作之前,首先需要初始化百度地图 SDK,并设置地图的基本状态。以下为几个关键步骤: 1. **初始化 SDK:** - 在使用百度地图 SDK...

    Spring MVC 学习笔记 十二 PDF/Excel格式输出

    本学习笔记主要围绕Spring MVC的使用、配置和核心组件进行深入探讨,旨在帮助开发者更好地理解和掌握这一框架。 在Spring MVC中,Model代表业务逻辑和数据,View负责数据的展示,而Controller处理用户请求,协调...

    【狂神说】笔记(史上最全)含各类md笔记.zip

    【狂神说】笔记系列是全面且...这些笔记覆盖了IT领域的多个关键技能,对于想要系统学习和提升IT技术的人来说是一份宝贵的资料。通过阅读和实践这些笔记,开发者可以加深对各技术的理解,提高开发效率和项目管理水平。

    狂神说笔记_全.zip

    【狂神说笔记_全.zip】是一个包含狂神说系列的Java学习资源的压缩包,主要涉及了Java基础、Spring Boot、JavaWeb、微服务、分布式系统、消息队列、并发编程、前端技术、数据库以及容器化技术等多个IT领域的核心知识...

    jxl包的学习笔记。。。。。。

    本篇文章将深入探讨`jxl`包的学习和应用,通过一系列实例帮助你理解和掌握这个库的核心功能。 ### 1. 安装与引入 首先,你需要在项目中添加`jxl`库。如果你使用的是Maven,可以在`pom.xml`文件中添加以下依赖: `...

    基于知识图谱的兴趣点推送.zip

    DeepMove是一种结合了深度学习与知识图谱的推荐系统,它利用用户的历史轨迹数据和知识图谱中的信息,构建深度学习模型来预测用户的未来移动行为,从而进行POI推荐。 标签“知识图谱”表明了整个项目的核心技术。...

    Greatly_repository:Spring Boot 学习笔记

    Spring Boot 学习笔记 基础篇 #提升篇 15.SpringBoot之集成Shiro 16.SpringBoot之使用mybatis-generator自动生成代码 17.SpringBoot之使用lombok编码 18.SpringBoot之初始化数据 19.SpringBoot之使用POI开发Excel...

    自学前后端的全部资料笔记资源

    同时,JUnit(依赖于第25-28行)的引入意味着在学习过程中,测试驱动开发(TDD)也是一个重要的实践点,它能帮助确保代码的质量和可维护性。 自学前后端开发不仅仅局限于前端的HTML、CSS、JavaScript,还包括后端的...

    黑马乐优商城19天全套视频加配套笔记

    课程可能涵盖了从项目启动到完成的全过程,总计19天的学习内容,暗示着它是一个深度和广度并重的系统学习计划。 【描述】"黑马2018年最新项目 乐优商城全套19天视频(50到68)"进一步明确了这个课程的细节。这里的...

Global site tag (gtag.js) - Google Analytics