学习笔记:POI_HSSF

来源:互联网 发布:人工智能 图书 编辑:程序博客网 时间:2024/06/06 03:31

HSSF总结


HSSF有什么用

  日常工作中,常常对表格类型的数据进行处理,如果自己编写的java程序进行数据处理的时候需要用到表格类数据,而Excel表格在保存表格类数据的时候明显比普通txt文本更有优势。因此,利用适当的API,直接对Excel表格进行处理就显得很有必要。
  目前常见读写Excel的工具类开源javaAPI有两种方式:
* 一个是JXL(Java Excel API)
官网地址:http://jexcelapi.sourceforge.net/
* 一个是Apache的POI(Poor Obfuscation Implementation)
官网地址:http://poi.apache.org/

  最近做了一个关于表格文件存储的小程序,用的就是POI的HSSF。下面对程序制作中总结出来的操作和注意到的细节进行总结。(本文最后一次修改日期:2017/5/8)

值得注意的Excal的部分特性

版本 后缀名 行 列 处理工具 OLE2 .xls 0~65535 0~255 HSSF OOXML .xlsx 0~1045875 0~16383 XSSF

导入POI

  导入POI其实就是导入Apache的POI的jar包,我在网上找到的POI的jar包总共六个,如下:


  具体步骤如下:
* 在想导入POI的工程下建立新文件夹,最好命名为“lib”;

  • 将jar包原件复制粘贴到lib文件夹中(在eclipse下就能操作);

  • 再将这六个文件全选,然后右键单击,选择Build Path,选择导入

  • 上边就是所有的步骤了

基础操作

创建

操作 表述 备注 新建工作簿 HSSFWorkbook wb = new HSSFWorkbook(); 新建表格 HSSFSheet sheet = wb.createSheet(“mysheet”); 只能在工作簿存在的情况下新建表格 创建行对象 HSSFRow row = sheet.createRow(1); 只能在工作表存在的情况下新建行对象 创建单元格对象 HSSFCell cell = row.createCell((short)(pos)); 在row行的第pos列上创建单元格 创建新Excal文件 第一种:利用File文件类的方法创建
第二种:利用HSSF的write()方法创建 推荐使用第二种

打开

打开工作簿

打开确定存在的工作簿,总共分三步 创建输入流InputStream FileInputStream in = new FileInputStream(File file); 利用已创建的输入流创建HSSF的解析工具并解析 POIFSFileSystem fs = new POIFSFileSystem(in); 利用创建好的解析工具打开目标文件 HSSFWorkbook wb = new HSSFWorkbook(fs);

* 在我实际编程中,如果想实现“文件存在则打开,文件不存在则创建”的效果,一定要先加判断语句,属于打开文件的代码块中写这三条指令。不然会报错,抛出IOException异常。
示例代码如下:
*

import java.io.*;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;public class FoeNodes {    public static void main(String[] args) {        File file = new File("d:\\java\\");        HSSFWorkbook book = null;        FileInputStream in = null;        FileOutputStream out = null;        try {            if (file.exists()) {                    in = new FileInputStream(file);                    POIFSFileSystem fs = new POIFSFileSystem(in);                    book = new HSSFWorkbook(fs);                    in.close();            } else {                // 创建文件夹                if (file.getParentFile().exists() == false) {                    file.getParentFile().mkdirs();                }                book = new HSSFWorkbook();                book.write(out);                out.close();        }        }catch(IOException ee) {            ee.getMessage();        }    }}

打开其它对象

操作 表述 备注 选择第一个工作表 HSSFSheet sheet = wb.getSheetAt(0); 选择制定名称的工作表 HSSFSheet sheet = book.getSheet(String name); 选择当前sheet的第一行 HSSFRow row = sheet.getRow(0); 选择row的第一列元素 HSSFCell cell = row.getCell(0);

设置单元格

操作 表述 备注 设置工作表的名称 book.setSheetName(0, “First”); 设置单元格的值 cell.setCellValue(DATA); DATA的类型可以为
int/Date/Calendar/double/String(过时的)/HSSFRichTextString 等 设置单元格风格 cell.setCellStyle(new HSSFCellStyle()); 设置打印方向 sheet.getPrintSetup().setLandscape(true); 设置为横向打印(默认纵向) 设置行高 row.setHeightInPoints(18); 设置指定列列宽 sheet.setColumnWidth((short)colNo, (short)(length)); 设置默认列宽 sheet.setDefaultColumnWidth((short) 10); 特定区域设为每页都打印 book.setRepeatingRowsAndColumn(sheetn,scol,ecol,srow,erow); 合并单元格 region = new Region(curr-1, (short)(1), curow-1+3, (short)1);(已过时)

sheet.addMergedRegion(new CellRangeAddress(srow, erow, scol, ecol));

设置单元格样式示例

private HSSFCellStyle leftStyle(HSSFWorkbook wb){        HSSFCellStyle curStyle = wb.createCellStyle();        HSSFFont curFont = wb.createFont();                 //设置字体        //curFont.setFontName("Times New Roman");               //设置英文字体        curFont.setFontName("微软雅黑");                    //设置英文字体        curFont.setCharSet(HSSFFont.DEFAULT_CHARSET);               //设置中文字体,那必须还要再对单元格进行编码设置        curFont.setFontHeightInPoints((short)10);               //字体大小        curFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);            //加粗        curStyle.setFont(curFont);        curStyle.setBorderTop(HSSFCellStyle.BORDER_THICK);          //粗实线        curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);            //实线        curStyle.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);            //比较粗实线        curStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);         //实线        curStyle.setWrapText(true);                         //换行           curStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);           //横向具右对齐        curStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);       //单元格垂直居中        return curStyle;    }
0 0
原创粉丝点击