用POI在工作表里作成一个行,可以用「HSSFRow」类,它的构造方法有三个。

protected HSSFRow()

protected HSSFRow(Workbook book, Sheet sheet, int rowNum)Creates new HSSFRow from scratch.

protected HSSFRow(Workbook book, Sheet sheet, RowRecord record)Creates an HSSFRow from a low level RowRecord object.

虽然有三个,但每一个都是protected的,所以不能直接使用它的构造方法,而是用Sheet对象来创建行。 

  • 创建行

在工作表里创建行,使用「HSSFSheet」类的「createRow」方法。 

使用方法如下:

  1. HSSFWorkbook workbook = new HSSFWorkbook();
  2. HSSFSheet sheet = workbook.createSheet();
  3. HSSFRow row = sheet.createRow(0);



  • 取得已经存在的行

在工作表里取得行,使用「HSSFSheet」类的「getRow」方法,详细内容你可以参照一下『Sheet里行的读取』。 

使用方法如下: 

  1. HSSFWorkbook workbook = new HSSFWorkbook();
  2. HSSFSheet sheet = workbook.createSheet();
  3. HSSFRow row = sheet.getRow(0);
  • 获取行的状态

我们还可以用POI获取当前工作表的行的一些状态.

获得第一行的序列号,使用「HSSFSheet」类的「getFirstRowNum」方法。 

获得最后一行的序列号,使用「HSSFSheet」类的「getLastRowNum」方法。 

获得实际存在的行的总数,使用「HSSFSheet」类的「getPhysicalNumberOfRows」方法。



代码如下:

  1. package linkin;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6.  
  7. import org.apache.poi.hssf.usermodel.HSSFSheet;
  8. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  9. import org.apache.poi.hssf.util.Region;
  10. import org.apache.poi.poifs.filesystem.POIFSFileSystem;
  11.  
  12. public class Linkin
  13. {
  14. public static void main(String[] args)
  15. {
  16. HSSFWorkbook workbook = new HSSFWorkbook();
  17. HSSFSheet sheet = workbook.createSheet();
  18.  
  19. System.out.println("创建行之前的状态:");
  20. System.out.println("First:" + sheet.getFirstRowNum());//sheet.getFirstRowNum()获取sheet的第一行行号
  21. System.out.println("Last:" + sheet.getLastRowNum());//getLastRowNum()获取sheet的最后行行号
  22. System.out.println("Total:" + sheet.getPhysicalNumberOfRows() + "\n");// getPhysicalNumberOfRows()获取sheet的行总数
  23.  
  24. sheet.createRow(1);
  25.  
  26. System.out.println("创建第一行后的状态:");
  27. System.out.println("First:" + sheet.getFirstRowNum());
  28. System.out.println("Last:" + sheet.getLastRowNum());
  29. System.out.println("Total:" + sheet.getPhysicalNumberOfRows() + "\n");
  30.  
  31. sheet.createRow(3);
  32.  
  33. System.out.println("创建第三行后的状态:");
  34. System.out.println("First:" + sheet.getFirstRowNum());
  35. System.out.println("Last:" + sheet.getLastRowNum());
  36. System.out.println("Total:" + sheet.getPhysicalNumberOfRows());
  37.  
  38. }
  39.  
  40. }
  • 行的创建

之前仅仅新建了Sheet,虽然可以看到新建的Sheet里有无数的单元格,但还不能直接往这些单元格设值。要想往这些单元格里设值,你还必须创建行。

在Sheet里创建行,使用「HSSFSheet」类的「createRow」方法。



public HSSFRow createRow(int rownum)



(int rownum)创建指定行号的行。行号是从0开始的整数,最大是65535,可以支持65536行。创建行所返回的值是「HSSFRow」类对象,关于「HSSFRow」类定义的说明,以后再详细说。创建方法很多,要说详细挺复杂。比方说,即使第一行(行号为0)和第二行不创建,也能直接创建第三行。

  1. package linkin;
  2.  
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5.  
  6. import org.apache.poi.hssf.usermodel.HSSFCell;
  7. import org.apache.poi.hssf.usermodel.HSSFRow;
  8. import org.apache.poi.hssf.usermodel.HSSFSheet;
  9. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  10.  
  11. public class Linkin
  12. {
  13. public static void main(String[] args)
  14. {
  15. HSSFWorkbook workbook = new HSSFWorkbook();//创建个空白的workbook
  16.  
  17. HSSFSheet sheet = workbook.createSheet();//创建个空白的sheet
  18.  
  19. HSSFRow row = sheet.createRow(2);//创建行号为2的行,excel中的第三行
  20.  
  21. HSSFCell cell = row.createCell((short)0);//创建上面行的第一个单元格
  22. cell.setCellValue("test");//将test写入单元格
  23.  
  24. FileOutputStream out = null;
  25. try{
  26. out = new FileOutputStream("sample.xls");
  27. workbook.write(out);
  28. }catch(IOException e){
  29. System.out.println(e.toString());
  30. }finally{
  31. try {
  32. out.close();
  33. }catch(IOException e){
  34. System.out.println(e.toString());
  35. }
  36. }
  37.  
  38. }
  39.  
  40. }
  • 行的读取

要取得Sheet里的某一行,可以使用「HSSFSheet」类的「getRow」方法。



public HSSFRow getRow(int rownum):利用行号取得指定的行。如果行不存在,则返回NULL。

  1. package linkin;
  2.  
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5.  
  6. import org.apache.poi.hssf.usermodel.HSSFCell;
  7. import org.apache.poi.hssf.usermodel.HSSFRow;
  8. import org.apache.poi.hssf.usermodel.HSSFSheet;
  9. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  10.  
  11. public class Linkin
  12. {
  13. public static void main(String[] args)
  14. {
  15. HSSFWorkbook workbook = new HSSFWorkbook();
  16.  
  17. HSSFSheet sheet = workbook.createSheet();
  18.  
  19. HSSFRow row = sheet.createRow(1);
  20.  
  21. for (int i = 0; i < 3; i++)
  22. {
  23. HSSFRow r = sheet.getRow(i);
  24. if (r == null)
  25. {
  26. System.out.println("第" + i + "行不存在。");
  27. //第0行不存在。第1行取得成功。第2行不存在。
  28. }
  29. else
  30. {
  31. System.out.println("第" + i + "行取得成功。");
  32. }
  33. }
  34. }
  35.  
  36. }
  • 读取有值的行
  1. package linkin;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5.  
  6. import org.apache.poi.hssf.usermodel.HSSFRow;
  7. import org.apache.poi.hssf.usermodel.HSSFSheet;
  8. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  9. import org.apache.poi.poifs.filesystem.POIFSFileSystem;
  10.  
  11. public class Linkin
  12. {
  13. public static void main(String[] args)
  14. {
  15. FileInputStream in = null;
  16. HSSFWorkbook workbook = null;
  17.  
  18. try
  19. {
  20. in = new FileInputStream("sample.xls");
  21. POIFSFileSystem fs = new POIFSFileSystem(in);
  22. workbook = new HSSFWorkbook(fs);
  23. }
  24. catch (IOException e)
  25. {
  26. System.out.println(e.toString());
  27. }
  28. finally
  29. {
  30. try
  31. {
  32. in.close();
  33. }
  34. catch (IOException e)
  35. {
  36. System.out.println(e.toString());
  37. }
  38. }
  39.  
  40. HSSFSheet sheet = workbook.getSheetAt(0);//读取序号为0的sheet
  41.  
  42. for (int i = 0; i < 3; i++)
  43. {
  44. HSSFRow r = sheet.getRow(i);
  45. if (r == null)
  46. {
  47. System.out.println("第" + i + "行不存在。");
  48. }
  49. else
  50. {
  51. System.out.println("第" + i + "行取得成功。");
  52. }
  53. }
  54. }
  55.  
  56. }
  • 从取得的行里获取单元格的值。

这一次从已经取得的行里获取单元格的值。仍然使用刚才的Excel文件。用getRow方法先取得行对象,再从单元格里获取值。

  1. package linkin;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5.  
  6. import org.apache.poi.hssf.usermodel.HSSFCell;
  7. import org.apache.poi.hssf.usermodel.HSSFRow;
  8. import org.apache.poi.hssf.usermodel.HSSFSheet;
  9. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  10. import org.apache.poi.poifs.filesystem.POIFSFileSystem;
  11.  
  12. public class Linkin
  13. {
  14. public static void main(String[] args)
  15. {
  16. FileInputStream in = null;
  17. HSSFWorkbook workbook = null;
  18.  
  19. try
  20. {
  21. in = new FileInputStream("sample.xls");
  22. POIFSFileSystem fs = new POIFSFileSystem(in);
  23. workbook = new HSSFWorkbook(fs);
  24. }
  25. catch (IOException e)
  26. {
  27. System.out.println(e.toString());
  28. }
  29. finally
  30. {
  31. try
  32. {
  33. in.close();
  34. }
  35. catch (IOException e)
  36. {
  37. System.out.println(e.toString());
  38. }
  39. }
  40.  
  41. HSSFSheet sheet = workbook.getSheetAt(0);//读取序号为0的sheet
  42.  
  43. HSSFRow row = sheet.getRow(2);//取得sheet中第二行(行号1)
  44.  
  45. HSSFCell cell = row.getCell((short) 0);//取得第二行,第二格(单元格号1)
  46. System.out.println(cell.getStringCellValue());//cell.getStringCellValue()取值
  47. }
  48.  
  49. }
  • 移动行

如果要移动某一行的话,可以使用「HSSFSheet」类的「shiftRows」方法。

关于这个方法有2个重载,所以这里多说几句: 

public void shiftRows(int startRow, int endRow, int n)

int startRow, int endRow:指定要移动的行的范围从「startRow」行到「endRow」行。

int n:「n」如果是正数就往下移动的行数,如果为负,就往上移动。

public void shiftRows(int startRow, int endRow, int n,boolean copyRowHeight, boolean resetOriginalRowHeight)

如要使行高也一起移动的话,设置「copyRowHeight」参数为「true」。

还有,移动后,原来的行是保留原行高不变还是恢复到默认行高呢?可以设置「resetOriginalRowHeight」参数。为「true」时,则可以恢复到默认行高。反之则保留原行高不变。

  1. package linkin;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6.  
  7. import org.apache.poi.hssf.usermodel.HSSFSheet;
  8. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  9. import org.apache.poi.poifs.filesystem.POIFSFileSystem;
  10.  
  11. public class Linkin
  12. {
  13. public static void main(String[] args)
  14. {
  15. FileInputStream in = null;
  16. HSSFWorkbook workbook = null;
  17.  
  18. try
  19. {
  20. in = new FileInputStream("sample.xls");
  21. POIFSFileSystem fs = new POIFSFileSystem(in);
  22. workbook = new HSSFWorkbook(fs);
  23. }
  24. catch (IOException e)
  25. {
  26. System.out.println(e.toString());
  27. }
  28. finally
  29. {
  30. try
  31. {
  32. in.close();
  33. }
  34. catch (IOException e)
  35. {
  36. System.out.println(e.toString());
  37. }
  38. }
  39.  
  40. HSSFSheet sheet = workbook.getSheetAt(0);
  41.  
  42. sheet.shiftRows(1, 2, 2);//第二行和第三行向下移动两行
  43.  
  44. FileOutputStream out = null;
  45. try
  46. {
  47. out = new FileOutputStream("sample2.xls");
  48. workbook.write(out);
  49. }
  50. catch (IOException e)
  51. {
  52. System.out.println(e.toString());
  53. }
  54. finally
  55. {
  56. try
  57. {
  58. out.close();
  59. }
  60. catch (IOException e)
  61. {
  62. System.out.println(e.toString());
  63. }
  64. }
  65. }
  66.  
  67. }

POI--HSSFRow类的更多相关文章

  1. JAVA poi 帮助类

    pom.xml 添加引用: <!--poi--> <dependency> <groupId>org.apache.poi</groupId> < ...

  2. 关于Excel导入导出POI工具类

    import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import ...

  3. poi 工具类

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

  4. Apache POI 工具类 [ PoiUtil ]

    pom.xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml ...

  5. Java操作Excel工具类(poi)

    分享一个自己做的poi工具类,写不是很完全,足够我自己当前使用,有兴趣的可以自行扩展 1 import org.apache.commons.lang3.exception.ExceptionUtil ...

  6. Apache POI使用详解

    Apache POI使用详解 1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案 ...

  7. POI使用详解

    Apache POI使用详解 1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案 ...

  8. 通过Excel认识POI

    1.POI是什么 Apache POI - the Java API for Microsoft Documents,顾名思义,Apache的三方包,用来操作微软office文档的,多数时候用来操作e ...

  9. POI 的API大全二

    1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发 ...

  10. 4.Apache POI使用详解

    一.POI结构与常用类 1.POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人 ...

随机推荐

  1. 设计模式学习(四): 1.简单工厂 (附C#实现)

    New 这是一个典型的情况, 我们需要在运行时来实例化一些具体的类. 在需要修改或者扩展的时候我们就需要改这段代码. 一个程序中可能会多次出现类似的代码, 这使得维护和更新非常困难而且容易出错. 通过 ...

  2. H5前端性能测试总结

    测试关注指标 Http请求个数 同一个域名不同浏览器内核.不同版本浏览器,大部分并发请求数是6个: 优化方案: a.雪碧图:即CSS Sprite,也称CSS精灵,是一种CSS图像合并技术,该方法是将 ...

  3. MVC异步加载学习笔记

    一.普通的异步请求 1.View层 <input type="text" id="Name" value="" placeholder ...

  4. Qt5.3.1 OpenCV2.4.9 开发环境配置

    首先是将我们需要的三个软件安装:分别是OpenCV2.4.9.QT5.3.1 .Cmake3.0.2 一定要使用Cmake3.0.2编译OpenCV2.4.9 其他版本的不一定能编译成功!!!! A. ...

  5. python基本数据类型学习

    python是极其简洁的一门高级语言,在python里面没有真正意义上的常量,只是用大写的标定表示常量(python中的常量是可以修改的),单行注释用#开始,.并且python不用定义数据类型,因为p ...

  6. LVS集群ipvsadm命令和调度算法(6)

    一.ipvsadm命令参考 为了更好的让大家理解这份命令手册,将手册里面用到的几个术语先简单的介绍一下: 术语解释: 1.virtual-service-address:是指虚拟服务器的ip地址2.r ...

  7. 关于ODP.NET连接数监控及相应的windbg分析提示

    1.关于ODP.NET的Windows计数器问题 使用微软的缺省驱动时,可以通过windows性能监视器很方便的监控数据库连接数,选择.NET Data Provider for Oracle/Sql ...

  8. 循序渐进之Spring AOP(3) - 配置代理

    上一篇介绍了几种Advice(增强),并通过代码演示了生成代理的方式,下面来看通过配置文件配置方式把Advice织入目标类. 注意,配置文件方式仍然不是spring AOP的最好方式,学习配置方式也是 ...

  9. 【JavaScript_DOM 百度搜索框】

    今天给大家带来的事一个简单的百度的历史搜索框,大家在搜索东西的时候,百度会自动给你显示你最近搜索过的一些东西,那这个拿js怎么做呢? 我们一起来学习吧 这是一个HTML页面: <!DOCTYPE ...

  10. c语言基础学习04

    =============================================================================涉及到的知识点有:程序的三种结构.条件分支语句 ...