POI--HSSFSheet类

用POI来作成一个Sheet,可以用「HSSFSheet」类,该类构造器如下:

  • 新建Sheet

从构造器可以看出,虽然它有两个构建器,但都是protected的,所以要新建Sheet,只能通过Workbook。

在Workbook里新建Sheet时,使用「HSSFWorkbook」类的「createSheet」的方法。

HSSFWorkbook workbook = new HSSFWorkbook();//创建个空白的workbook
HSSFSheet sheet = workbook.createSheet();//创建个空白的sheet
  • 读取现有的Sheet

对于在Workbook已经存在的Sheet来说,可以用「HSSFWorkbook」类的「getSheet」方法来读取。使用方法如下:

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.getSheet("sheet1")//读取名称为sheet1的sheet

不用Sheet名而用Sheet的序列号来取得Sheet的话,可以用「HSSFWorkbook」类的「getSheetAt」方法。使用方法如下:

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.getSheetAt(1);//读取序号为1的sheet(第二张sheet)
package linkin;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class Linkin
{
	public static void main(String[] args)
	{
		HSSFWorkbook workbook = new HSSFWorkbook();

		workbook.createSheet();//创建workbook的sheet
		workbook.createSheet();
		workbook.createSheet("test");

		FileOutputStream out = null;
		try
		{
			out = new FileOutputStream("sample.xls");
			workbook.write(out);
			System.out.println("OK");
		}
		catch (IOException e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			try
			{
				out.close();
			}
			catch (IOException e)
			{
				System.out.println(e.toString());
			}
		}

	}

}

从生成的excel可以看出,如果没有设定Sheet名,会从0开始默认设定为Sheet0,Sheet1等,设定为test的话,则可以创建test这样的Sheet。

  • Workbook复制Sheet

要复制Workbook里现有的Sheet来创建新的Sheet,可以使用「HSSFWorkbook」类的「cloneSheet」方法。cloneSheet方法需要传入一个参数,也就是要指定要复制的Sheet序列号。

package linkin;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class Linkin
{
	public static void main(String[] args)
	{

		FileInputStream in = null;
		HSSFWorkbook workbook = null;

		try
		{
			in = new FileInputStream("sample.xls");
			POIFSFileSystem fs = new POIFSFileSystem(in);
			workbook = new HSSFWorkbook(fs);
		}
		catch (IOException e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			try
			{
				in.close();
			}
			catch (IOException e)
			{
				System.out.println(e.toString());
			}
		}

		workbook.cloneSheet(0);
		workbook.cloneSheet(1);

		FileOutputStream out = null;
		try
		{
			out = new FileOutputStream("sample1.xls");
			workbook.write(out);
			System.out.println("OK");
		}
		catch (IOException e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			try
			{
				out.close();
			}
			catch (IOException e)
			{
				System.out.println(e.toString());
			}
		}

	}

}

执行后打开「sample1.xls」文件,可以看出,两个Sheet被成功复制。被复制的Sheet名格式是「原Sheet名(序列号)」。顺便一提的是,如果你手动在Excel里进行复制的话,被复制的Sheet名的格式是「原Sheet名 (序列号)」。也就是原Sheet名和(序列号)之间有一个半角空格。

  • Workbook删除Sheet

要从Workbook里删除Sheet,可以使用「HSSFWorkbook」类的方法「removeSheetAt」。

如果不知道序列号的话,也可以通过「HSSFWorkbook」类的方法「getSheetIndex」,设定Sheet名来取得序列号。

如下代码生成一个Workbook,再在其中创建三个Sheet,最后再把名为「Sheet1」的Sheet删除。

package linkin;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class Linkin
{
	public static void main(String[] args)
	{

		HSSFWorkbook workbook = new HSSFWorkbook();

		workbook.createSheet();
		workbook.createSheet();
		workbook.createSheet();

		workbook.removeSheetAt(workbook.getSheetIndex("Sheet1"));

		System.out.println("Sheet0 = " + workbook.getSheetIndex("Sheet0"));
		System.out.println("Sheet2 = " + workbook.getSheetIndex("Sheet2"));

		FileOutputStream out = null;
		try
		{
			out = new FileOutputStream("sample.xls");
			workbook.write(out);
		}
		catch (IOException e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			try
			{
				out.close();
			}
			catch (IOException e)
			{
				System.out.println(e.toString());
			}
		}

	}

}

我们发现中间的Sheet被删除后,后面的Sheet序列号会往前移一个,总之会维持从0开始的整数顺序。

  • 改变sheet的名称

要改变现有Sheet或刚新建Sheet的名称,可以用「HSSFWorkbook」类的「setSheetName」方法。

package linkin;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class Linkin
{
	public static void main(String[] args)
	{

		HSSFWorkbook workbook = new HSSFWorkbook();

		workbook.createSheet();
		workbook.createSheet();

		workbook.setSheetName(0, "test");//更改sheet0的名字为test
		workbook.setSheetName(1, "测试");//更改sheet1的名字为“测试”设置为utf-16

		FileOutputStream out = null;
		try
		{
			out = new FileOutputStream("sample.xls");
			workbook.write(out);
			System.out.println("OK");
		}
		catch (IOException e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			try
			{
				out.close();
			}
			catch (IOException e)
			{
				System.out.println(e.toString());
			}
		}

	}

}
  • 设定列宽度

如果想在工作表里指定列宽度的话,可以使用「HSSFSheet」类的「setColumnWidth」方法。

package linkin;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class Linkin
{
	public static void main(String[] args)
	{

		FileInputStream in = null;
		HSSFWorkbook workbook = null;

		try
		{
			in = new FileInputStream("sample.xls");
			POIFSFileSystem fs = new POIFSFileSystem(in);
			workbook = new HSSFWorkbook(fs);
		}
		catch (IOException e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			try
			{
				in.close();
			}
			catch (IOException e)
			{
				System.out.println(e.toString());
			}
		}

		HSSFSheet sheet = workbook.getSheetAt(0);

		short[] width = new short[3];

		for (int i = 0; i < 3; i++)
		{
			width[i] = sheet.getColumnWidth((short) i);
			System.out.println(i + "列宽度:" + width[i]);
		}
		//循环获取0,1,2的宽度,将第二列的宽度赋给第0,1列
		sheet.setColumnWidth((short) 0, width[2]);
		sheet.setColumnWidth((short) 1, width[2]);

		FileOutputStream out = null;
		try
		{
			out = new FileOutputStream("sample2.xls");
			workbook.write(out);
		}
		catch (IOException e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			try
			{
				out.close();
			}
			catch (IOException e)
			{
				System.out.println(e.toString());
			}
		}

	}

}
  • 指定默认的列宽度

一个Excel文件新生成时,有自己默认的列宽度,当然我们也可以用POI来指定默认的列宽度。

指定默认的列宽度用「HSSFSheet」类的「setDefaultColumnWidth」方法。

要取得原来的默认列宽度,使用「getDefaultColumnWidth」方法。

package linkin;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class Linkin
{
	public static void main(String[] args)
	{

		 HSSFWorkbook workbook = new HSSFWorkbook();
		    HSSFSheet sheet = workbook.createSheet();

		    sheet.setDefaultColumnWidth((short)5);//将默认的列宽设为5个文字大小

		    FileOutputStream out = null;
		    try{
		      out = new FileOutputStream("sample2.xls");
		      workbook.write(out);
		    }catch(IOException e){
		      System.out.println(e.toString());
		    }finally{
		      try {
		        out.close();
		      }catch(IOException e){
		        System.out.println(e.toString());
		      }
		    }

	}

}
  • 调整工作表Sheet的显示比例

有时我们可能会手动去调整工作表Sheet的显示比例,用POI同样也能做到这一点。这时我们可以使用「HSSFSheet」类的「setZoom」方法。 关于这个方法多说几句:public void setZoom(int numerator, int denominator)

(int numerator, int denominator)参数,这样就可以指定显示比例了,指定方法是用”numerator”÷”denominator”,比方说,「setZoom(2, 1)」就是设定为200%的比例,「setZoom(3, 4)」就是设定为75%的比例。

package linkin;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class Linkin
{
	public static void main(String[] args)
	{

		 FileInputStream in = null;
		    HSSFWorkbook workbook = null;

		    try{
		      in = new FileInputStream("sample.xls");
		      POIFSFileSystem fs = new POIFSFileSystem(in);
		      workbook = new HSSFWorkbook(fs);
		    }catch(IOException e){
		      System.out.println(e.toString());
		    }finally{
		      try{
		        in.close();
		      }catch (IOException e){
		        System.out.println(e.toString());
		      }
		    }

		    HSSFSheet sheet = workbook.getSheetAt(0);//取得序号为0的sheet
		    sheet.setZoom(2, 1);//改变sheet的显示比例为200%

		    FileOutputStream out = null;
		    try{
		      out = new FileOutputStream("sample2.xls");
		      workbook.write(out);
		    }catch(IOException e){
		      System.out.println(e.toString());
		    }finally{
		      try {
		        out.close();
		      }catch(IOException e){
		        System.out.println(e.toString());
		      }
		    }

	}

}
  • 合并单元格

现在再看看如果将指定的单元格进行合并操作。用POI进行合并操作,使用「HSSFSheet」类的「addMergedRegion」方法。

public int addMergedRegion(Region region)--过时

public int addMergedRegion(CellRangeAddress cellRangeAddress)--没过时

参数(Region region),合并范围必须使用「Region」类来指定,关于「Region」类的介绍如下。

extends java.lang.Object implements java.lang.Comparable

「Region」类的构造方法

public Region(int rowFrom, short colFrom, int rowTo, short colTo)// rowFrom起始行号, colFrom起始列号,rowTo结束行号,colTo结束列号。指定范围时,从左上的单元格到右下的单元格指定,比方像下面这样:Region(1, (short)1, 2, (short)3)

package linkin;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class Linkin
{
	public static void main(String[] args)
	{
		FileInputStream in = null;
		HSSFWorkbook workbook = null;

		try
		{
			in = new FileInputStream("sample.xls");
			POIFSFileSystem fs = new POIFSFileSystem(in);
			workbook = new HSSFWorkbook(fs);
		}
		catch (IOException e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			try
			{
				in.close();
			}
			catch (IOException e)
			{
				System.out.println(e.toString());
			}
		}

		HSSFSheet sheet = workbook.getSheetAt(0);

		sheet.addMergedRegion(new Region(1, (short) 1, 2, (short) 3));//从第2行第2列开始并到第3行,第4列

		FileOutputStream out = null;
		try
		{
			out = new FileOutputStream("sample2.xls");
			workbook.write(out);
		}
		catch (IOException e)
		{
			System.out.println(e.toString());
		}
		finally
		{
			try
			{
				out.close();
			}
			catch (IOException e)
			{
				System.out.println(e.toString());
			}
		}

	}

}

时间: 2024-08-08 09:40:41

POI--HSSFSheet类的相关文章

POI工具类

package com.ysq.ssm.poi; import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFFont;import org.apache.poi.hssf.usermodel.HSSFPalette;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.user

poi 工具类

<!--POI--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifa

使用Apache POI导出Excel小结--导出XLS格式文档

使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI导出Excel小结--导出XLSX格式文档 使用Apache POI导出Excel--大数量导出 导出XLS格式文档 做企业应用项目难免会有数据导出到Excel的需求,最近在使用其,并对导出Excel封装成工具类开放出来供大家参考.关于Apache POI Excel基本的概念与操作我在这里就不啰嗦

Excel poi API基础教程!

原文转子: http://blog.csdn.net/yellowd1/article/details/44628701 登录|注册     yellowd1的专栏 目录视图 摘要视图 订阅 程序员12月书讯,写书评领书啦~        Swift 问题与解答        免费的知识库,你的知识库 POI教程 2015-03-25 22:07 700人阅读 评论(0) 收藏 举报 分类: Java(41) 目录(?)[+] 文章转载自:易百教程 [http:/www.yiibai.com]

POI操作EXCEL(二)

原文转自:http://www.tqcto.com/article/code/295025.html java当初把核心处理设成Unicode,带来的好处是另代码适应了多语言环境.然而由于老外的英语只有26个字母,有些情况下,一些程序员用8 位的byte处理,一不小心就去掉了CJK的高位.或者是由于习惯在程序中采用硬编码,还有多种原因,使得许多java应用在CJK的处理上很烦恼.还好 在POI HSSF中考虑到这个问题,可以设置encoding为双字节. POI可以到www.apache.org

【Java POI】1、Java POI的使用

很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告.有时,一个应用程序甚至希望将Excel文件作为输入数据.例如,一个公司开发的应用程序将财务部门需要所有输出生成自己的Excel. 任何Java程序员愿意将MS Office文件的输出,可以使用预定义和只读API来做到. 什么是Apache POI? Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件.这由Apache软件基金会开发使用Java分布式设计或修改Mi

[Utils]POI实现excel导入导出

1.分析excel 2.poi工具类 import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.s

使用poi导出Excel

很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告.有时,一个应用程序甚至希望将Excel文件作为输入数据. 常见的java Excel  API Java Aspose Cells Java Aspose Cells 是一种纯粹的Java授权的Excel API,开发和供应商Aspose发布.这个API的最新版本是8.1.2,发布于2014年7月,是一个丰富而厚重的API(普通Java类和AWT类的组合)设计,可以读.写和操纵电子表格Excel的组件.此API常见用

POI样式

5.POI样式 在Excel应用中,会需要用到各种样式,包括单元格背景色.边框.高度.宽度.内容相对位置.字体格式.字体大小.字体颜色等等.POI提供了一系列的样式,能满足我们一般开发中的需求. 5.1 POI样式相关类 POI设置Excel样式主要通过以下几个相关类: 参数 说明 HSSFCellStyle POI样式类 HSSFFont 字体样式类 HSSFColor 颜色类 HSSFBorderFormatting 边框样式类 HSSFCellStyle是最基本的样式类.HSSFCellS

Apache POI使用详解

Apache POI使用详解 1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 Microsoft Office文档的功能. (2)POI结构说明 包名称说明 HSSF提供读写Microsoft Excel XLS格式档案的功能. XSSF提供读写Microsoft Excel OOXM