POI设置EXCEL单元格格式为文本、小数、百分比、货币、日期、科学计数法和中文大写(copy)
Posted on 2013-04-11 16:36 夜少少 阅读(5936) 评论(0) 编辑 收藏 举报HSSFWorkbook demoWorkBook = new HSSFWorkbook();
HSSFSheet demoSheet = demoWorkBook.createSheet("The World's 500 Enterprises");
HSSFCell cell = demoSheet.createRow(0).createCell(0);
第一种:日期格式
cell.setCellValue(new Date(2008,5,5));
//set date format
HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();
HSSFDataFormat format= demoWorkBook.createDataFormat();
cellStyle.setDataFormat(format.getFormat("yyyy年m月d日"));
cell.setCellStyle(cellStyle);
第二种:保留两位小数格式
cell.setCellValue(1.2);
HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
cell.setCellStyle(cellStyle);
这里与上面有所不同,用的是HSSFDataFormat.getBuiltinFormat()方法,之所以用这个,是因为0.00是Excel内嵌的格式,完整的Excel内嵌格式列表大家可以看这个窗口中的自定义列表:
这里就不一一列出了
第三种:货币格式
cell.setCellValue(20000);
HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();
HSSFDataFormat format= demoWorkBook.createDataFormat();
cellStyle.setDataFormat(format.getFormat("¥#,##0"));
cell.setCellStyle(cellStyle);
第四种:百分比格式
cell.setCellValue(20);
HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00%"));
cell.setCellStyle(cellStyle);
此种情况跟第二种一样
第五种:中文大写格式
cell.setCellValue(20000);
HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();
HSSFDataFormat format= demoWorkBook.createDataFormat();
cellStyle.setDataFormat(format.getFormat("[DbNum2][$-804]0"));
cell.setCellStyle(cellStyle);
第六种:科学计数法格式
cell.setCellValue(20000);
HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();
cellStyle.setDataFormat( HSSFDataFormat.getBuiltinFormat("0.00E+00"));
cell.setCellStyle(cellStyle);
此种情况也与第二种情况一样
===============================
日期:
public static Cell writeDateValue(Workbook book, Sheet sheet, int row,
int column, Date value) {
Row poiRow = sheet.getRow(row);
CreationHelper createHelper = book.getCreationHelper();
if (poiRow == null) {
poiRow = sheet.createRow(row);
}
Cell poiCell = poiRow.getCell(column);
if (poiCell == null) {
poiCell = poiRow.createCell(column);
}
CellStyle cellStyle = book.createCellStyle();
cellStyle.setDataFormat(createHelper.createDataFormat().getFormat(
"yyyy-mm-dd"));
if (value != null) {
poiCell.setCellValue(value);
} else {
poiCell.setCellValue(new Date());
}
poiCell.setCellStyle(cellStyle);
return poiCell;
}
数字:
public static Cell writeNumericValue(Sheet sheet, int row, int column,
Double value) {
Row poiRow = sheet.getRow(row);
if (poiRow == null) {
poiRow = sheet.createRow(row);
}
Cell poiCell = poiRow.getCell(column);
if (poiCell != null) {
poiRow.removeCell(poiCell);
}
poiCell = poiRow.createCell(column);
poiCell.setCellType(Cell.CELL_TYPE_NUMERIC);
poiCell.setCellValue(value);
return poiCell;
}
===============================
public class CreateCells { /** * 文档对象 HSSFWorkbook ;表单对象 HSSFSheet ;行对象 HSSFRow ;列对象 HSSFCell * excell的格子单元 HSSFFont excell字体 HSSFName 名称 HSSFDataFormat 日期格式 HSSFHeader * sheet头 HSSFFooter sheet尾 HSSFCellStyle cell样式 */ public static void main(String[] args) throws IOException { // 建立新HSSFWorkbook对象 HSSFWorkbook workbook = new HSSFWorkbook(); // 建立新的sheet对象 // Create a row and put some cells in it.Rows are 0 based. HSSFSheet sheet = workbook.createSheet("表单1"); // 建立新行 // Create a cell and put a value in it. HSSFRow row = sheet.createRow((short) 0); //修改当前行 默认行高 列宽 //行高 sheet.setDefaultRowHeightInPoints(10); //列款宽 sheet.setDefaultColumnWidth(10); //设置特定单元格的宽度 sheet.setColumnWidth(4, 20*256); sheet.setColumnWidth(5, 30*256); sheet.setColumnWidth(6, 30*256); // 整数类型的cell样式 //HSSFDataFormat.getBuiltinFormat("0.00") 字符串的内容是 Excel有的格式 HSSFCellStyle numStyle = workbook.createCellStyle(); numStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0")); //创建1列 HSSFCell cellNum = row.createCell(0); cellNum.setCellValue(1); cellNum.setCellStyle(numStyle); // 浮点类型的cell样式 HSSFCellStyle doubleStyle = workbook.createCellStyle(); doubleStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00")); HSSFCell cellDouble = row.createCell(1); cellDouble.setCellValue(1.2); cellDouble.setCellStyle(doubleStyle); //字符串类型的cell样式 HSSFCellStyle stringStyle = workbook.createCellStyle(); stringStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("G/通用格式")); HSSFCell cellString= row.createCell(2); cellString.setCellValue("test"); cellString.setCellStyle(stringStyle); //添加cell布尔类型的值 row.createCell(3).setCellValue(true); //日期类型的cell样式 yyyy-m-d h:mm:ss AM/PM HSSFCellStyle dateStyle = workbook.createCellStyle(); dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm")); HSSFCell dCell = row.createCell(4); dCell.setCellValue(new Date()); dCell.setCellStyle(dateStyle); //设置cell编码解决中文高位字节截断 HSSFCell csCell = row.createCell(5); csCell.setCellType(HSSFCell.ENCODING_UTF_16); csCell.setCellValue("中文测试_Chinese Words Test"); // 设置 背景色 边框 HSSFCellStyle style1 = workbook.createCellStyle(); //前景色和后景色都要有 否则会出网格 style1.setFillForegroundColor(new HSSFColor.YELLOW().getIndex()); style1.setFillBackgroundColor(new HSSFColor.YELLOW().getIndex()); //设置边框 style1.setBorderBottom((short) 1); style1.setBorderTop((short) 1); style1.setBorderLeft((short) 1); style1.setBorderRight((short) 1); //问题:用poi将一个cell中的字体设置成了红色,结果用excell打开后,这个cell中只有前面一个或几个字为红色 //HSSFFont font = workbook.createFont(); font.setColor(HSSFFont.COLOR_RED); //先從Cell中把HSSFRichTextString取出來 //然后HSSFRichTextString對象.applyFont(font) //最后再把HSSFRichTextString對象set回到cell中就行了。。。。。 //设置字体样式===================================== HSSFFont font = workbook.createFont(); //字体位置 上 下 左 右 //font.setTypeOffset((short)0); //字体宽度 font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); //字体高度 font.setFontHeightInPoints((short)8); //字体颜色 font.setColor(HSSFFont.COLOR_RED); //================================================= style1.setFont(font); /** * 注意这句代码, style1.setFillPattern, 如果你在你的程序中不设置fill pattern,那么 * 你上面设置的前景色和背景色就显示不出来.网络上很多文章都没有设置fillpattern * 如果不改变样式 不需要添加(如:居中) */ style1.setFillPattern(HSSFCellStyle.SPARSE_DOTS); HSSFCell cellCH = row.createCell(6); cellCH.setCellValue("中文测试_Chinese Words Testsss"); cellCH.setCellStyle(style1); //货币样式 HSSFCellStyle moneyStyle = workbook.createCellStyle(); moneyStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0")); HSSFCell cell12 = row.createCell(7); cell12.setCellValue((double) 10000000); cell12.setCellStyle(moneyStyle); // 错误显示 row.createCell(8).setCellType(HSSFCell.CELL_TYPE_ERROR); //合并单元格 int startRowNo=0; int endRowNo=0; int startCellNo=9; int endCellNo=10; sheet.addMergedRegion(new CellRangeAddress(startRowNo, endRowNo,startCellNo, endCellNo)); HSSFCell cell = row.createCell(9); cell.setCellValue("合并"); //即垂直居中对齐且水平居中对齐 居中后背景颜色变化了 HSSFCellStyle style = workbook.createCellStyle(); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直 style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平 //如果不改变样式 不需要添加 //style.setFillPattern(HSSFCellStyle.SPARSE_DOTS); cell.setCellStyle(style); FileOutputStream fileOut = new FileOutputStream("e:/workbook.xls"); workbook.write(fileOut); fileOut.close(); } }
===============================