工作簿是通过创建 org.apache.poi.ss.usermodel.Workbook 的实例来创建的。要么直接创建一个具体的类(org.apache.poi.hssf.usermodel.HSSFWorkbook 或 org.apache.poi.xssf.usermodel.XSSFWorkbook),要么使用方便的工厂类 org.apache.poi.ss.usermodel.WorkbookFactory。
工作表是通过从 Workbook 的现有实例调用 createSheet() 创建的,创建的工作表会自动按顺序添加到工作簿中。工作表本身没有工作表名称(底部的标签);您可以通过调用 Workbook.setSheetName(sheetindex,"SheetName",encoding) 来设置与工作表关联的名称。对于 HSSF,名称可以是 8 位格式 (HSSFWorkbook.ENCODING_COMPRESSED_UNICODE) 或 Unicode (HSSFWorkbook.ENCODING_UTF_16)。HSSF 的默认编码是每个字符 8 位。对于 XSSF,名称会自动处理为 unicode。
通过从现有的 Sheet 实例调用 createRow(rowNumber) 来创建行。只应将具有单元格值的行添加到工作表中。要设置行的高度,您只需在行对象上调用 setRowHeight(height)。高度必须以缇为单位,或点的 1/20。如果您愿意,还有一个 setRowHeightInPoints 方法。
单元格是通过从现有行调用 createCell(column, type) 来创建的。只有具有值的单元格才应添加到行中。单元格的单元格类型应设置为 Cell.CELL_TYPE_NUMERIC 或 Cell.CELL_TYPE_STRING,具体取决于它们是包含数字值还是文本值。单元格还必须有一个值集。通过使用 String 或 double 作为参数调用 setCellValue 来设置值。单个单元格没有宽度;您必须在 Sheet 对象上调用 setColumnWidth(colindex, width)(使用字符的 1/256 单位)。(您也不能在 GUI 中单独执行此操作)。
单元格使用 CellStyle 对象设置样式,这些对象又包含对 Font 对象的引用。这些是通过 Workbook 对象通过调用 createCellStyle() 和 createFont() 创建的。创建对象后,您必须设置其参数(颜色、边框等)。要为 CellStyle 设置字体,请调用 setFont(fontobj)。
生成工作簿后,您可以通过从 Workbook 实例调用 write(outputStream) 并将其传递给 OutputStream(例如 FileOutputStream 或 ServletOutputStream)来将其写出。您必须自己关闭 OutputStream。HSSF 不会为您关闭它。
org.apache.poi.hssf.dev.HSSF 测试类
// 创建一个新文件
FileOutputStream out = new FileOutputStream("workbook.xls");
// 创建一个新的工作簿
工作簿 wb = 新的 HSSFWorkbook();
// 创建一个新的工作表
Sheet s = wb.createSheet();
// 声明一个行对象引用
行 r = 空;
// 声明一个单元格对象引用
单元格 c = 空;
// 创建 3 个单元格样式
CellStyle cs = wb.createCellStyle();
CellStyle cs2 = wb.createCellStyle();
CellStyle cs3 = wb.createCellStyle();
数据格式 df = wb.createDataFormat();
// 创建 2 个字体对象
字体 f = wb.createFont();
字体 f2 = wb.createFont();
//设置字体1到12点类型
f.setFontHeightInPoints((短) 12);
//让它变成蓝色
f.setColor((短)0xc);
// 加粗
//arial 是默认字体
f.setBoldweight(Font.BOLDWEIGHT_BOLD);
//设置字体2为10点类型
f2.setFontHeightInPoints((短) 10);
//让它变红
f2.setColor( (short)Font.COLOR_RED );
//让它加粗
f2.setBoldweight(Font.BOLDWEIGHT_BOLD);
f2.setStrikeout(true);
//设置单元格样式
cs.setFont(f);
//设置单元格格式
cs.setDataFormat(df.getFormat("#,##0.0"));
//设置细边框
cs2.setBorderBottom(cs2.BORDER_THIN);
//fill w fg 填充颜色
cs2.setFillPattern((short) CellStyle.SOLID_FOREGROUND);
//将单元格格式设置为文本,请参阅数据格式以获取完整列表
cs2.setDataFormat(HSSFDataFormat.getBuiltinFormat("text"));
//设置字体
cs2.setFont(f2);
// 以 Unicode 格式设置工作表名称
wb.setSheetName(0, "\u0422\u0435\u0441\u0442\u043E\u0432\u0430\u044F" +
"\u0421\u0442\u0440\u0430\u043D\u0438\u0447\u043A\u0430");
// 在纯 ascii 的情况下
// wb.setSheetName(0, "HSSF Test");
// 创建一个 30 行 (0-29) 的工作表
int rownum;
for (rownum = (short) 0; rownum < 30; rownum++)
{
// 创建一行
r = s.createRow(rownum);
// 每隔一行
如果 ((rownum % 2) == 0)
{
// 使行高更大(以缇为单位 - 1/20 点)
r.setHeight((短)0x249);
}
//r.setRowNum((short) rownum);
// 创建 10 个单元格 (0-9)(+= 2 稍后变得明显
for (short cellnum = (short) 0; cellnum < 10; cellnum += 2)
{
// 创建一个数字单元格
c = r.createCell(cellnum);
// 做一些愚蠢的数学运算来演示小数
c.setCellValue(rownum * 10000 + cellnum
+ (((双) rownum / 1000)
+ ((双) cellnum / 10000)));
字符串单元格值;
// 创建一个字符串单元格(看看为什么 += 2 在
c = r.createCell((short) (cellnum + 1));
// 每隔一行
如果 ((rownum % 2) == 0)
{
// 将此单元格设置为我们定义的第一个单元格样式
c.setCellStyle(cs);
// 将单元格的字符串值设置为“Test”
c.setCellValue("测试");
}
别的
{
c.setCellStyle(cs2);
// 将单元格的字符串值设置为“\u0422\u0435\u0441\u0442”
c.setCellValue("\u0422\u0435\u0441\u0442");
}
// 使这一列更宽一些
s.setColumnWidth((short) (cellnum + 1), (short) ((50 * 8) / ((double) 1 / 20)));
}
}
//使用BLANKS在底部的行上绘制一个粗黑边框
// 前进 2 行
行数++;
行数++;
r = s.createRow(rownum);
// 定义第三个样式为默认样式
// 除了底部有一个粗黑边框
cs3.setBorderBottom(cs3.BORDER_THICK);
//创建50个单元格
for (short cellnum = (short) 0; cellnum < 50; cellnum++)
{
//创建一个空白类型的单元格(无值)
c = r.createCell(cellnum);
// 设置为粗黑边框样式
c.setCellStyle(cs3);
}
//结束绘制粗黑边框
// 演示添加/命名和删除工作表
// 创建一个工作表,设置它的标题然后删除它
s = wb.createSheet();
wb.setSheetName(1, "DeletedSheet");
wb.removeSheetAt(1);
//结束删除的工作表
// 将工作簿写入输出流
// 关闭我们的文件(不要吹出我们的文件句柄
wb.write(out);
关闭();
该文章参考自Apache的官方API文档,只为记录相关技术,如有侵权,请联系作者删除
链接:http://poi.apache.org/components/spreadsheet/how-to.html#user_api