学习笔记:POI_HSSF

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.xls0~655350~255HSSF
OOXML.xlsx0~10458750~16383XSSF

导入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()方法创建
推荐使用第二种

打开

打开工作簿
打开确定存在的工作簿,总共分三步
创建输入流InputStreamFileInputStream 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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值