POI 单元格类型CellType

程序员成长之旅 · 程序员成长之旅/Linux学习 · 1399 字

1. 单元格类型

单元格的内容决定了单元格的类型,POI中定义的7种单元格类型:  这里写图片描述  这里写图片描述

  1. 日期数据对应的单元格类型是CellType.NUMERIC,默认以浮点型数显示,显示为日期格式需要设置单元格样式DataFormat
  2. 字符型单元格内容也可以为富文本RichTextString,可以对文本多部分设置字体Font

2. 错误单元格

Excel中存在错误单元格,在POI中是怎么表现的呢

org.apache.poi.ss.usermodel.FormulaError

package org.apache.poi.ss.usermodel;

import java.util.Map;

import org.apache.poi.util.Internal;

import java.util.HashMap;

/**

    * `<p>` Example: 
    * `</p>`  

*/
NULL(0x00, "#NULL!"),

/**

/**

    * `<p>` Example: 
    * `</p>`  

*/
VALUE(0x0F, "#VALUE!"),

/**

    * `<p>` Example: 
    * `</p>`  

*/
REF(0x17, "#REF!"),

/**

    * `<p>` Example: 
    * `</p>`  

*/
NAME(0x1D, "#NAME?"),

/**

    * `<p>` Example: 
    * `</p>`  
    * `<p>` Example: FACT(1000) might result in a range error. `</p>`  

*/
NUM(0x24, "#NUM!"),

/**

    * `<p>` Example: 
    * `</p>`  

// These are POI-specific error codes
// It is desirable to make these (arbitrary) strings look clearly different from any other
// value expression that might appear in a formula. In addition these error strings should
// look unlike the standard Excel errors. Hence tilde ('~') was used.

/**

private final byte type;
private final int longType;
private final String repr;

private FormulaError(int type, String repr) {
this.type = (byte)type;
this.longType = type;
this.repr = repr;
}

/**

/**

private static final Map<String, FormulaError> smap = new HashMap<String, FormulaError> ();
private static final Map<Byte, FormulaError> bmap = new HashMap<Byte, FormulaError> ();
private static final Map<Integer, FormulaError> imap = new HashMap<Integer, FormulaError> ();
static{
for (FormulaError error : values()) {
bmap.put(error.getCode(), error);
imap.put(error.getLongCode(), error);
smap.put(error.getString(), error);
}
}

public static final boolean isValidCode(int errorCode) {
for (FormulaError error : values()) {
if (error.getCode() == errorCode) return true;
if (error.getLongCode() == errorCode) return true;
}
return false;
}

public static FormulaError forInt(byte type) throws IllegalArgumentException {
FormulaError err = bmap.get(type);
if(err == null) throw new IllegalArgumentException("Unknown error type: " + type);
return err;
}
public static FormulaError forInt(int type) throws IllegalArgumentException {
FormulaError err = imap.get(type);
if(err == null) err = bmap.get((byte)type);
if(err == null) throw new IllegalArgumentException("Unknown error type: " + type);
return err;
}

public static FormulaError forString(String code) throws IllegalArgumentException {
FormulaError err = smap.get(code);
if(err == null) throw new IllegalArgumentException("Unknown error code: " + code);
return err;
}
}

3. 实例

package hssf.sheet.cell;

import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook;

public class ExportDataCell {

public static void main(String[] args) throws Exception { File file = new File("C:\Users\Administrator\Desktop\test.xls"); if (file.exists()) { file.delete(); } BufferedOutputStream out = null; try { out = new BufferedOutputStream(new FileOutputStream("C:\Users\Administrator\Desktop\test.xls")); exportExcel(out); } finally { out.close(); } }

private static void exportExcel(BufferedOutputStream out) throws IOException { Workbook wb = new HSSFWorkbook(); //Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("各种类型单元格");

  sheet.createRow(0).createCell(0).setCellValue(1.1);
  sheet.createRow(1).createCell(0).setCellValue(new Date());
  sheet.createRow(2).createCell(0).setCellValue(Calendar.getInstance());
  sheet.createRow(3).createCell(0).setCellValue("字符串");
  sheet.createRow(4).createCell(0).setCellValue(true);
  sheet.createRow(5).createCell(0).setCellType(CellType.ERROR);

  wb.write(out);

} }

这里写图片描述