@author YHC
单元格字体补充:
最大数量唯一字符在一个单元格的限制是32767(最大的short正整数 [2^15-1] ),你应该在你的程序中对字体进行重用,而不是为每个单元格创建一个字体:如下例
错误:
for (int i = 0; i < 10000; i++) {
//创建行
Row row = sheet.createRow(i);
//创建单元格
Cell cell = row.createCell((short) 0);
//创建样式
CellStyle style = workbook.createCellStyle();
//创建字体
Font font = workbook.createFont();
//设置粗体
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
//将字体设置给该样式
style.setFont(font);
//将此单元格应用该样式
cell.setCellStyle(style);
}
正确:在字体设置相同的情况之下,建议使用这种
//创建样式
CellStyle style = workbook.createCellStyle();
//创建字体
Font font = workbook.createFont();
//设置粗体
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
//设置字体
style.setFont(font);
//创建行以及单元格
for (int i = 0; i < 10000; i++) {
Row row = sheet.createRow(i);
Cell cell = row.createCell((short) 0);
cell.setCellStyle(style);
}
//创建Excel
HSSFWorkbook wb = new HSSFWorkbook();
//创建工作薄
HSSFSheet sheet = wb.createSheet();
//创建行
HSSFRow row = sheet.createRow(0);
//创建单元格
HSSFCell cell = row.createCell(0);
//设置单元格值
cell.setCellValue("Default Palette");
//在前面的例子我们从标准的调色板应用一些颜色
//我们将使用红行色字体在一个绿黄色背景上
HSSFCellStyle style = wb.createCellStyle();
//填充前景色(绿黄色)
style.setFillForegroundColor(HSSFColor.LIME.index);
//填充模式,块填充
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
//创建字体
HSSFFont font = wb.createFont();
//设置字体颜色为(红色)
font.setColor(HSSFColor.RED.index);
//将字体设置给样式
style.setFont(font);
//应用此样式
cell.setCellStyle(style);
//保存上面Excel,默认的调色板
FileOutputStream out = new FileOutputStream("default_palette.xls");
wb.write(out);
out.close();
//现在,我们替换调色板上红色和绿黄色
//替换一个更有魅力的组合
// (借用非常喜欢的freebsd.org)
cell.setCellValue("Modified Palette");
//根据WorkBook创建一个自定义调色板
HSSFPalette palette = wb.getCustomPalette();
//替换标准的红色为 freebsd.org 红色,以下是三基色 红(Red)绿(Green)蓝(BLUE)
palette.setColorAtIndex(HSSFColor.RED.index,
(byte) 153, //RGB 红色 (取值0-255)
(byte) 0, //RGB 绿色
(byte) 0 //RGB 蓝色
);
//替换绿黄色为freebsd.org金黄色
palette.setColorAtIndex(HSSFColor.LIME.index, (byte) 255, (byte) 204, (byte) 102);
//保存Excel,修改后的调色板
// 注意不管我们之前是否使用过红色(RED)或者黄绿色(LIME)
// 都会以新的颜色出现
//写入文件
out = new FileOutputStream("modified_palette.xls");
wb.write(out);
out.close();
运行后效果:
如果以上有写错误的地方,请大家指出.thanks!