HSSFSheet类 详细解析实例

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


  • 新建Sheet
从构造器可以看出,虽然它有两个构建器,但都是protected的,所以要新建Sheet,只能通过Workbook。
在Workbook里新建Sheet时,使用「HSSFWorkbook」类的「createSheet」的方法。
[java]  view plain  copy
  1. HSSFWorkbook workbook = new HSSFWorkbook();//创建个空白的workbook  
  2. HSSFSheet sheet = workbook.createSheet();//创建个空白的sheet  

  • 读取现有的Sheet
对于在Workbook已经存在的Sheet来说,可以用「HSSFWorkbook」类的「getSheet」方法来读取。使用方法如下:
[java]  view plain  copy
  1. HSSFWorkbook workbook = new HSSFWorkbook();  
  2. HSSFSheet sheet = workbook.getSheet("sheet1")//读取名称为sheet1的sheet  

不用Sheet名而用Sheet的序列号来取得Sheet的话,可以用「HSSFWorkbook」类的「getSheetAt」方法。使用方法如下:
[java]  view plain  copy
  1. HSSFWorkbook workbook = new HSSFWorkbook();  
  2. HSSFSheet sheet = workbook.getSheetAt(1);//读取序号为1的sheet(第二张sheet)  

[java]  view plain  copy
  1. package linkin;  
  2.   
  3.   
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  8. import org.apache.poi.poifs.filesystem.POIFSFileSystem;  
  9.   
  10.   
  11. public class Linkin  
  12. {  
  13.     public static void main(String[] args)  
  14.     {  
  15.         HSSFWorkbook workbook = new HSSFWorkbook();  
  16.   
  17.   
  18.         workbook.createSheet();//创建workbook的sheet  
  19.         workbook.createSheet();  
  20.         workbook.createSheet("test");  
  21.   
  22.   
  23.         FileOutputStream out = null;  
  24.         try  
  25.         {  
  26.             out = new FileOutputStream("sample.xls");  
  27.             workbook.write(out);  
  28.             System.out.println("OK");  
  29.         }  
  30.         catch (IOException e)  
  31.         {  
  32.             System.out.println(e.toString());  
  33.         }  
  34.         finally  
  35.         {  
  36.             try  
  37.             {  
  38.                 out.close();  
  39.             }  
  40.             catch (IOException e)  
  41.             {  
  42.                 System.out.println(e.toString());  
  43.             }  
  44.         }  
  45.   
  46.   
  47.     }  
  48.   
  49.   
  50. }  




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


  • Workbook复制Sheet
要复制Workbook里现有的Sheet来创建新的Sheet,可以使用「HSSFWorkbook」类的「cloneSheet」方法。cloneSheet方法需要传入一个参数,也就是要指定要复制的Sheet序列号。
[java]  view plain  copy
  1. package linkin;  
  2.   
  3.   
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  8. import org.apache.poi.poifs.filesystem.POIFSFileSystem;  
  9.   
  10.   
  11. public class Linkin  
  12. {  
  13.     public static void main(String[] args)  
  14.     {  
  15.   
  16.   
  17.         FileInputStream in = null;  
  18.         HSSFWorkbook workbook = null;  
  19.   
  20.   
  21.         try  
  22.         {  
  23.             in = new FileInputStream("sample.xls");  
  24.             POIFSFileSystem fs = new POIFSFileSystem(in);  
  25.             workbook = new HSSFWorkbook(fs);  
  26.         }  
  27.         catch (IOException e)  
  28.         {  
  29.             System.out.println(e.toString());  
  30.         }  
  31.         finally  
  32.         {  
  33.             try  
  34.             {  
  35.                 in.close();  
  36.             }  
  37.             catch (IOException e)  
  38.             {  
  39.                 System.out.println(e.toString());  
  40.             }  
  41.         }  
  42.   
  43.   
  44.         workbook.cloneSheet(0);  
  45.         workbook.cloneSheet(1);  
  46.   
  47.   
  48.         FileOutputStream out = null;  
  49.         try  
  50.         {  
  51.             out = new FileOutputStream("sample1.xls");  
  52.             workbook.write(out);  
  53.             System.out.println("OK");     
  54.         }  
  55.         catch (IOException e)  
  56.         {  
  57.             System.out.println(e.toString());  
  58.         }  
  59.         finally  
  60.         {  
  61.             try  
  62.             {  
  63.                 out.close();  
  64.             }  
  65.             catch (IOException e)  
  66.             {  
  67.                 System.out.println(e.toString());  
  68.             }  
  69.         }  
  70.   
  71.   
  72.     }  
  73.   
  74.   
  75. }  


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

  • Workbook删除Sheet
要从Workbook里删除Sheet,可以使用「HSSFWorkbook」类的方法「removeSheetAt」。
如果不知道序列号的话,也可以通过「HSSFWorkbook」类的方法「getSheetIndex」,设定Sheet名来取得序列号。
如下代码生成一个Workbook,再在其中创建三个Sheet,最后再把名为「Sheet1」的Sheet删除。
[java]  view plain  copy
  1. package linkin;  
  2.   
  3.   
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  8. import org.apache.poi.poifs.filesystem.POIFSFileSystem;  
  9.   
  10.   
  11. public class Linkin  
  12. {  
  13.     public static void main(String[] args)  
  14.     {  
  15.   
  16.   
  17.         HSSFWorkbook workbook = new HSSFWorkbook();  
  18.   
  19.   
  20.         workbook.createSheet();  
  21.         workbook.createSheet();  
  22.         workbook.createSheet();  
  23.   
  24.   
  25.         workbook.removeSheetAt(workbook.getSheetIndex("Sheet1"));  
  26.   
  27.   
  28.         System.out.println("Sheet0 = " + workbook.getSheetIndex("Sheet0"));  
  29.         System.out.println("Sheet2 = " + workbook.getSheetIndex("Sheet2"));  
  30.   
  31.   
  32.         FileOutputStream out = null;  
  33.         try  
  34.         {  
  35.             out = new FileOutputStream("sample.xls");  
  36.             workbook.write(out);  
  37.         }  
  38.         catch (IOException e)  
  39.         {  
  40.             System.out.println(e.toString());  
  41.         }  
  42.         finally  
  43.         {  
  44.             try  
  45.             {  
  46.                 out.close();  
  47.             }  
  48.             catch (IOException e)  
  49.             {  
  50.                 System.out.println(e.toString());  
  51.             }  
  52.         }  
  53.   
  54.   
  55.     }  
  56.   
  57.   
  58. }  


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

  • 改变sheet的名称
要改变现有Sheet或刚新建Sheet的名称,可以用「HSSFWorkbook」类的「setSheetName」方法。
[java]  view plain  copy
  1. package linkin;  
  2.   
  3.   
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  8. import org.apache.poi.poifs.filesystem.POIFSFileSystem;  
  9.   
  10.   
  11. public class Linkin  
  12. {  
  13.     public static void main(String[] args)  
  14.     {  
  15.   
  16.   
  17.         HSSFWorkbook workbook = new HSSFWorkbook();  
  18.   
  19.   
  20.         workbook.createSheet();  
  21.         workbook.createSheet();  
  22.   
  23.   
  24.         workbook.setSheetName(0"test");//更改sheet0的名字为test  
  25.         workbook.setSheetName(1"测试");//更改sheet1的名字为“测试”设置为utf-16  
  26.   
  27.   
  28.         FileOutputStream out = null;  
  29.         try  
  30.         {  
  31.             out = new FileOutputStream("sample.xls");  
  32.             workbook.write(out);  
  33.             System.out.println("OK");  
  34.         }  
  35.         catch (IOException e)  
  36.         {  
  37.             System.out.println(e.toString());  
  38.         }  
  39.         finally  
  40.         {  
  41.             try  
  42.             {  
  43.                 out.close();  
  44.             }  
  45.             catch (IOException e)  
  46.             {  
  47.                 System.out.println(e.toString());  
  48.             }  
  49.         }  
  50.   
  51.   
  52.     }  
  53.   
  54.   
  55. }  

  • 设定列宽度
如果想在工作表里指定列宽度的话,可以使用「HSSFSheet」类的「setColumnWidth」方法。 
[java]  view plain  copy
  1. package linkin;  
  2.   
  3.   
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7.   
  8.   
  9. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  10. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  11. import org.apache.poi.poifs.filesystem.POIFSFileSystem;  
  12.   
  13.   
  14. public class Linkin  
  15. {  
  16.     public static void main(String[] args)  
  17.     {  
  18.   
  19.   
  20.         FileInputStream in = null;  
  21.         HSSFWorkbook workbook = null;  
  22.   
  23.   
  24.         try  
  25.         {  
  26.             in = new FileInputStream("sample.xls");  
  27.             POIFSFileSystem fs = new POIFSFileSystem(in);  
  28.             workbook = new HSSFWorkbook(fs);  
  29.         }  
  30.         catch (IOException e)  
  31.         {  
  32.             System.out.println(e.toString());  
  33.         }  
  34.         finally  
  35.         {  
  36.             try  
  37.             {  
  38.                 in.close();  
  39.             }  
  40.             catch (IOException e)  
  41.             {  
  42.                 System.out.println(e.toString());  
  43.             }  
  44.         }  
  45.   
  46.   
  47.         HSSFSheet sheet = workbook.getSheetAt(0);  
  48.   
  49.   
  50.         short[] width = new short[3];  
  51.   
  52.   
  53.         for (int i = 0; i < 3; i++)  
  54.         {  
  55.             width[i] = sheet.getColumnWidth((short) i);  
  56.             System.out.println(i + "列宽度:" + width[i]);  
  57.         }  
  58.         //循环获取0,1,2的宽度,将第二列的宽度赋给第0,1列  
  59.         sheet.setColumnWidth((short0, width[2]);  
  60.         sheet.setColumnWidth((short1, width[2]);  
  61.   
  62.   
  63.         FileOutputStream out = null;  
  64.         try  
  65.         {  
  66.             out = new FileOutputStream("sample2.xls");  
  67.             workbook.write(out);  
  68.         }  
  69.         catch (IOException e)  
  70.         {  
  71.             System.out.println(e.toString());  
  72.         }  
  73.         finally  
  74.         {  
  75.             try  
  76.             {  
  77.                 out.close();  
  78.             }  
  79.             catch (IOException e)  
  80.             {  
  81.                 System.out.println(e.toString());  
  82.             }  
  83.         }  
  84.   
  85.   
  86.     }  
  87.   
  88.   
  89. }  

  • 指定默认的列宽度
一个Excel文件新生成时,有自己默认的列宽度,当然我们也可以用POI来指定默认的列宽度。 
指定默认的列宽度用「HSSFSheet」类的「setDefaultColumnWidth」方法。 
要取得原来的默认列宽度,使用「getDefaultColumnWidth」方法。 
[java]  view plain  copy
  1. package linkin;  
  2.   
  3.   
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7.   
  8.   
  9. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  10. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  11. import org.apache.poi.poifs.filesystem.POIFSFileSystem;  
  12.   
  13.   
  14. public class Linkin  
  15. {  
  16.     public static void main(String[] args)  
  17.     {  
  18.   
  19.   
  20.          HSSFWorkbook workbook = new HSSFWorkbook();  
  21.             HSSFSheet sheet = workbook.createSheet();  
  22.   
  23.   
  24.             sheet.setDefaultColumnWidth((short)5);//将默认的列宽设为5个文字大小  
  25.   
  26.   
  27.             FileOutputStream out = null;  
  28.             try{  
  29.               out = new FileOutputStream("sample2.xls");  
  30.               workbook.write(out);  
  31.             }catch(IOException e){  
  32.               System.out.println(e.toString());  
  33.             }finally{  
  34.               try {  
  35.                 out.close();  
  36.               }catch(IOException e){  
  37.                 System.out.println(e.toString());  
  38.               }  
  39.             }  
  40.   
  41.   
  42.     }  
  43.   
  44.   
  45. }  

  • 调整工作表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%的比例。
[java]  view plain  copy
  1. package linkin;  
  2.   
  3.   
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7.   
  8.   
  9. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  10. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  11. import org.apache.poi.poifs.filesystem.POIFSFileSystem;  
  12.   
  13.   
  14. public class Linkin  
  15. {  
  16.     public static void main(String[] args)  
  17.     {  
  18.   
  19.   
  20.          FileInputStream in = null;  
  21.             HSSFWorkbook workbook = null;  
  22.   
  23.   
  24.             try{  
  25.               in = new FileInputStream("sample.xls");  
  26.               POIFSFileSystem fs = new POIFSFileSystem(in);  
  27.               workbook = new HSSFWorkbook(fs);  
  28.             }catch(IOException e){  
  29.               System.out.println(e.toString());  
  30.             }finally{  
  31.               try{  
  32.                 in.close();  
  33.               }catch (IOException e){  
  34.                 System.out.println(e.toString());  
  35.               }  
  36.             }  
  37.   
  38.   
  39.             HSSFSheet sheet = workbook.getSheetAt(0);//取得序号为0的sheet   
  40.             sheet.setZoom(21);//改变sheet的显示比例为200%  
  41.   
  42.   
  43.             FileOutputStream out = null;  
  44.             try{  
  45.               out = new FileOutputStream("sample2.xls");  
  46.               workbook.write(out);  
  47.             }catch(IOException e){  
  48.               System.out.println(e.toString());  
  49.             }finally{  
  50.               try {  
  51.                 out.close();  
  52.               }catch(IOException e){  
  53.                 System.out.println(e.toString());  
  54.               }  
  55.             }  
  56.   
  57.   
  58.     }  
  59.   
  60.   
  61. }  

  • 合并单元格
现在再看看如果将指定的单元格进行合并操作。用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)
[java]  view plain  copy
  1. package linkin;  
  2.   
  3.   
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7.   
  8.   
  9. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  10. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  11. import org.apache.poi.hssf.util.Region;  
  12. import org.apache.poi.poifs.filesystem.POIFSFileSystem;  
  13.   
  14.   
  15. public class Linkin  
  16. {  
  17.     public static void main(String[] args)  
  18.     {  
  19.         FileInputStream in = null;  
  20.         HSSFWorkbook workbook = null;  
  21.   
  22.   
  23.         try  
  24.         {  
  25.             in = new FileInputStream("sample.xls");  
  26.             POIFSFileSystem fs = new POIFSFileSystem(in);  
  27.             workbook = new HSSFWorkbook(fs);  
  28.         }  
  29.         catch (IOException e)  
  30.         {  
  31.             System.out.println(e.toString());  
  32.         }  
  33.         finally  
  34.         {  
  35.             try  
  36.             {  
  37.                 in.close();  
  38.             }  
  39.             catch (IOException e)  
  40.             {  
  41.                 System.out.println(e.toString());  
  42.             }  
  43.         }  
  44.   
  45.   
  46.         HSSFSheet sheet = workbook.getSheetAt(0);  
  47.   
  48.   
  49.         sheet.addMergedRegion(new Region(1, (short12, (short3));//从第2行第2列开始并到第3行,第4列  
  50.   
  51.   
  52.         FileOutputStream out = null;  
  53.         try  
  54.         {  
  55.             out = new FileOutputStream("sample2.xls");  
  56.             workbook.write(out);  
  57.         }  
  58.         catch (IOException e)  
  59.         {  
  60.             System.out.println(e.toString());  
  61.         }  
  62.         finally  
  63.         {  
  64.             try  
  65.             {  
  66.                 out.close();  
  67.             }  
  68.             catch (IOException e)  
  69.             {  
  70.                 System.out.println(e.toString());  
  71.             }  
  72.         }  
  73.   
  74.   
  75.     }  
  76.   
  77.   
  78. }  
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值