环境:poi3.9+xssf+excel2013+template.xlsx文件
背景:在用poi写excel时,单元格的颜色需求是必须要模板中的一样。
思路:先用【颜色摘取器】将颜色的RGB摘下来,然后用XSSF实现自定义颜色即可。
1、主函数类
package com.poi.excel.client; import java.awt.Color; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFPalette; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.examples.CellTypes; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CreationHelper; import org.apache.poi.ss.usermodel.DataFormat; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFColor; import org.apache.poi.xssf.usermodel.XSSFRichTextString; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.poi.excel.util.POIExcelUtil; public class ExcelTestClient { static org.apache.log4j.Logger logger = org.apache.log4j.Logger .getLogger(ExcelTestClient.class); public static void main(String[] args) { new ExcelTestClient().writeWithExcelUtil(); } private void writeWithExcelUtil() { // 如何通过一个已有的workbook创建新的workbook try { // Workbook wb1=new XSSFWorkbook("oldPath"); Workbook wb = new XSSFWorkbook(new FileInputStream( "c:\\germmy\\template.xlsx")); Map<String, CellStyle> styles = createStyles(wb); // create a new sheet Sheet s = wb.getSheet("机构呼入量报表"); //1.先写入左上方标题 String content="20151013-20151019电销呼入量报表"; POIExcelUtil.writeDataToExcel(0, 0, s, content, Cell.CELL_TYPE_STRING, null);//sytle用null,表明利用原有样式 //2.B4,C4,B5的值 double b4_db=1000,c4_db=1500,b5_db=2000; //2.1 B4 POIExcelUtil.writeDataToExcel(3, 1, s, b4_db, Cell.CELL_TYPE_NUMERIC, styles.get("normalcell"));//sytle用null,表明利用原有样式 //2.2 C4 POIExcelUtil.writeDataToExcel(3, 2, s, c4_db, Cell.CELL_TYPE_NUMERIC, styles.get("normalcell"));//sytle用normalcell //2.3 B5 POIExcelUtil.writeDataToExcel(4, 1, s, b5_db, Cell.CELL_TYPE_NUMERIC, styles.get("normalcell"));////sytle用normalcell //3.G4,B41的公式, //3.1 g4 String g4="SUM(B4:F4)",b41="SUM(B4:B40)"; POIExcelUtil.writeDataToExcel(3, 6, s, g4, Cell.CELL_TYPE_FORMULA, styles.get("formula_v"));////sytle用formula //3.2 b41 POIExcelUtil.writeDataToExcel(40, 1, s, b41, Cell.CELL_TYPE_FORMULA, styles.get("formula_h"));////sytle用formula // Save String filename = "c:/germmy/workbook.xls"; if (wb instanceof XSSFWorkbook) { filename = filename + "x"; } FileOutputStream out = new FileOutputStream(filename); wb.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); } } /** * Create a library of cell styles */ private static Map<String, CellStyle> createStyles(Workbook wb) { Map<String, CellStyle> styles = new HashMap<String, CellStyle>(); CellStyle style; Font titleFont = wb.createFont(); titleFont.setFontHeightInPoints((short) 18); titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD); style = wb.createCellStyle(); style.setAlignment(CellStyle.ALIGN_CENTER); style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); style.setFont(titleFont); styles.put("title", style); Font monthFont = wb.createFont(); monthFont.setFontHeightInPoints((short) 11); monthFont.setColor(IndexedColors.WHITE.getIndex()); style = wb.createCellStyle(); style.setAlignment(CellStyle.ALIGN_CENTER); style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); style.setFillPattern(CellStyle.SOLID_FOREGROUND); style.setFont(monthFont); style.setWrapText(true); styles.put("header", style); style = wb.createCellStyle(); style.setAlignment(CellStyle.ALIGN_CENTER); style.setWrapText(true); style.setBorderRight(CellStyle.BORDER_THIN); style.setRightBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderLeft(CellStyle.BORDER_THIN); style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderTop(CellStyle.BORDER_THIN); style.setTopBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderBottom(CellStyle.BORDER_THIN); style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); styles.put("cell", style); style = wb.createCellStyle(); style.setAlignment(CellStyle.ALIGN_CENTER); style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); style.setFillPattern(CellStyle.SOLID_FOREGROUND); style.setDataFormat(wb.createDataFormat().getFormat("0.00")); styles.put("formula", style); //*********************add by germmy@20131013 start************************ //普通单元格,四周有黑线 style = wb.createCellStyle(); style.setAlignment(CellStyle.ALIGN_RIGHT); style.setWrapText(true); style.setBorderRight(CellStyle.BORDER_THIN); style.setRightBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderLeft(CellStyle.BORDER_THIN); style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderTop(CellStyle.BORDER_THIN); style.setTopBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderBottom(CellStyle.BORDER_THIN); style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); style.setDataFormat(wb.createDataFormat().getFormat("#,##0"));//这样写百分百变成货币 styles.put("normalcell", style); //横向求和公式,粗体,有淡紫色背景,四周有黑色 style = wb.createCellStyle(); XSSFCellStyle styleTemp=((XSSFCellStyle)style); styleTemp.setAlignment(CellStyle.ALIGN_RIGHT); styleTemp.setVerticalAlignment(CellStyle.VERTICAL_CENTER); Font formulaFont = wb.createFont(); formulaFont.setFontName("宋体"); formulaFont.setFontHeightInPoints((short) 11); formulaFont.setBoldweight(Font.BOLDWEIGHT_BOLD); styleTemp.setFont(formulaFont); //控制颜色 styleTemp.setFillForegroundColor(new XSSFColor( new Color(220, 230, 241))); // style.setFillForegroundColor(IndexedColors.LIGHT_TURQUOISE.getIndex()); styleTemp.setFillPattern(CellStyle.SOLID_FOREGROUND); styleTemp.setBorderRight(CellStyle.BORDER_THIN); styleTemp.setRightBorderColor(IndexedColors.BLACK.getIndex()); styleTemp.setBorderLeft(CellStyle.BORDER_THIN); styleTemp.setLeftBorderColor(IndexedColors.BLACK.getIndex()); styleTemp.setBorderTop(CellStyle.BORDER_THIN); styleTemp.setTopBorderColor(IndexedColors.BLACK.getIndex()); styleTemp.setBorderBottom(CellStyle.BORDER_THIN); styleTemp.setBottomBorderColor(IndexedColors.BLACK.getIndex()); styleTemp.setDataFormat(wb.createDataFormat().getFormat("#,##0")); styles.put("formula_h", styleTemp);//横向的公式颜色 //纵向求和公式,四周有黑线 style = wb.createCellStyle(); style.setAlignment(CellStyle.ALIGN_RIGHT); style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); style.setBorderRight(CellStyle.BORDER_THIN); style.setRightBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderLeft(CellStyle.BORDER_THIN); style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderTop(CellStyle.BORDER_THIN); style.setTopBorderColor(IndexedColors.BLACK.getIndex()); style.setBorderBottom(CellStyle.BORDER_THIN); style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); style.setDataFormat(wb.createDataFormat().getFormat("#,##0")); styles.put("formula_v", style);//纵向的公式颜色 //*********************add by germmy@20131013 end************************ style = wb.createCellStyle(); style.setAlignment(CellStyle.ALIGN_CENTER); style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); style.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex()); style.setFillPattern(CellStyle.SOLID_FOREGROUND); style.setDataFormat(wb.createDataFormat().getFormat("0.00")); styles.put("formula_2", style); return styles; } }
2、ExcelUtil文件:
package com.poi.excel.util; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; public class POIExcelUtil { /** * * @param row * @param column * @param sheet * @param content * @param cellTypes * @param cellStyle * @throws Exception */ public static void writeDataToExcel(int row, int column, Sheet sheet, Object content, int cellType, CellStyle cellStyle) throws Exception { Row r1 = sheet.getRow(row); Cell c1 = r1.getCell(column); if (null != cellStyle) { c1.setCellStyle(cellStyle); } switch (cellType) { case Cell.CELL_TYPE_NUMERIC: c1.setCellValue((double) content); break; case Cell.CELL_TYPE_STRING: c1.setCellValue((String) content); break; case Cell.CELL_TYPE_FORMULA: c1.setCellFormula((String) content); break; default: c1.setCellValue((String) content);//默认的先暂时全用这个 System.out.println("未匹配到东西!"); break; } } }
3、JAR包下载地址:http://www.apache.org/dyn/closer.cgi/poi/release/bin/poi-bin-3.9-20121203.zip
-----------------------------------------------------------------------------------------------------------------
其他参考文档:
1、http://poi.apache.org/spreadsheet/examples.html
2、http://blog.sina.com.cn/s/blog_62c89b450100lxnh.html
3、http://kxjhlele.iteye.com/blog/321392
4、http://www.docin.com/p-69674027.html
5、http://bbs.csdn.net/topics/360031211
6、http://fangwei.iteye.com/blog/1161085
--------------------------------------------------------------------------------------------------------------
ps:颜色提取器 http://www.douban.com/group/topic/6338619/
相关推荐
5. **设置格式**:可以自定义单元格的样式,如字体、颜色、对齐方式等。 ```java CellStyle style = workbook.createCellStyle(); style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); style....
4. **颜色在不同版本的Excel中的兼容性**:需要注意的是,当使用POI或NPOI创建带有自定义颜色的工作簿时,这些颜色可能在旧版本的Excel中无法正确显示,因为旧版本可能不支持所有新的颜色索引。 5. **使用示例**:...
POI允许开发者使用自定义颜色。 - **设置自定义颜色**: ```java IndexedColorMap colorMap = wb.getCustomPalette(); colorMap.setColorAtIndex(10, (byte) 127, (byte) 127, (byte) 127); CellStyle style = ...
自定义导出时,可能需要设置单元格的样式,如字体、颜色、边框等。`CellStyle`对象可以设置这些属性,然后应用到`Cell`上。 7. **性能优化**: 对于大量数据的处理,使用SXSSFWorkbook可以降低内存消耗,因为它只...
4. **样式和格式**: 自定义导出的一个重要方面是设置单元格的样式,如字体、颜色、对齐方式、边框等。这可以通过创建`CellStyle`对象并应用到`Cell`上来实现。例如,你可以创建`Font`对象来改变字体,使用`Data...
用户可以学会如何添加POI支持、创建新工作簿、创建新的sheet页、操作单元格、处理不同格式的内容、遍历列和单元格、提取单元格内容、处理单元格边框和填充色、合并单元格、自定义字体和颜色、读取和重写工作簿、在...
5. **设置样式和格式**: Apache POI允许你自定义单元格的样式,如字体、颜色、对齐方式等。例如,设置单元格为红色粗体。 ```java HSSFFont font = workbook.createFont(); font.setColor(HSSFColor.RED....
在IT行业中,尤其是在数据分析和电子表格处理领域,Apache POI是一个...通过理解`XSSFFont`和`XSSFColor`类,以及相关的API,开发者可以方便地获取并处理Excel单元格的字体颜色,从而实现自定义的数据分析和处理逻辑。
与HSSF不同,XSSF使用XML格式存储数据,因此它能处理更丰富的样式和格式,比如自定义颜色、图表、超链接等。 3. **SXSSF (Streaming Usermodel API)**: 虽然不是POI 3.8的原始特性,但值得一提的是,从POI 3.8开始...
4. **样式操作**:`createCellStyle()`用于创建自定义的样式,可设置字体、颜色、对齐方式等,然后应用到单元格上。 5. **公式处理**:`createFormulaEvaluator()`创建公式评估器,可以处理单元格中的公式计算,确保...
5. 自定义处理器:用户可以自定义监听器和处理器,实现特定的业务逻辑,如数据入库、异常处理等。 6. 响应式编程:EasyExcel也支持响应式编程模式,能够更好地适应现代Web开发的需求。 在实际开发中,Apache POI和...
为了实现自定义导出模板,你可能需要根据实际需求设置样式,如字体、颜色、边框等,这可以通过`CellStyle`对象实现。此外,你还可以使用公式、图表、图片等高级功能来丰富Excel内容。 在Maven项目中,需要在`pom....
- 样式和格式:POI允许你设置单元格的字体、颜色、边框、对齐方式等样式,以及创建自定义的数字格式。 - 公式支持:可以处理Excel公式,但需要注意的是,HSSF仅支持一部分Excel公式,而XSSF支持更全面。 - 图表和...
通过使用样式和边界对象,可以自定义单元格的外观,包括字体、颜色、对齐方式和边框样式。 在实际开发中,Apache POI常被用于数据分析、报告生成、数据导入导出等场景。例如,你可以用它来生成动态的统计报表,或者...
- **自定义函数:** 可以扩展 POI 来实现自定义的 Excel 函数,增强公式计算能力。 4. **示例代码:** 创建一个新的 Excel 工作簿,添加一行数据并写入文件: ```java import org.apache.poi.ss.usermodel.*; ...
Apache POI允许我们自定义单元格的样式,如字体、颜色、对齐方式等。我们可以创建样式对象,然后应用到Cell上: ```java CellStyle style = workbook.createCellStyle(); style.setFillForegroundColor...
- **样式和格式**: POI允许开发者创建自定义样式,包括字体、颜色、边框、填充和对齐方式等,可以应用于单元格或整张工作表。 - **公式处理**: 支持Excel的内置公式,可以在创建或读取时处理计算结果。 - **图表...
5. **样式和格式**:POI允许开发者自定义单元格的样式,包括字体、颜色、边框、对齐方式、条件格式等,以便创建具有专业外观的Excel文件。 6. **公式处理**:Apache POI能够处理Excel中的公式计算,包括读取公式...
- 图形和图表:在Excel中创建和编辑各种图形、图表,支持自定义颜色、样式和数据源。 - 保护和加密:对文件进行密码保护,限制编辑、复制等操作。 - 公式支持:支持读取和计算Excel中的公式,包括相对和绝对引用...
例如,`Row`对象代表Excel的一行,`Cell`对象代表单元格,`CellStyle`用于设置单元格的样式,如字体、颜色、对齐方式等。ExcelUtil可能通过这些对象实现了数据的写入和读取。 4. **性能优化** 考虑到Excel文件可能...