package ycl.learn.excel;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Workbook;
public class ExcelStyle {
/**
* data style
* @param workbook
* @return
*/
public static CellStyle createDataCellStyle(Workbook workbook){
CellStyle dataCellStyle = workbook.createCellStyle();
DataFormat format = workbook.createDataFormat();
dataCellStyle.setDataFormat(format.getFormat("m/d/yy"));
return dataCellStyle;
}
/**
* number style
* @param workbook
* @return
*/
public static CellStyle createNumberCellStyle(Workbook workbook){
CellStyle numberCellStyle = workbook.createCellStyle();
DataFormat format = workbook.createDataFormat();
numberCellStyle.setDataFormat(format.getFormat("0.00"));
return numberCellStyle;
}
/**
* text style
* @param workbook
* @return
*/
public static CellStyle createTextCellStyle(Workbook workbook){
CellStyle numberCellStyle = workbook.createCellStyle();
DataFormat format = workbook.createDataFormat();
numberCellStyle.setDataFormat(format.getFormat("@"));
return numberCellStyle;
}
/**
* append the cellStyle with font
*
* @param workbook
* @param cellStyle
* @return
*/
public static CellStyle appendFontST(Workbook workbook,CellStyle cellStyle){
Font font = workbook.createFont();
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
font.setFontHeight((short)250);
font.setFontHeightInPoints((short)12);
font.setFontName("宋体");
cellStyle.setFont(font);
cellStyle.setWrapText(true);
return cellStyle;
}
/**
* append the cellStyle with color
*
* @param workbook
* @param cellStyle
* @return
*/
public static CellStyle appendBackColor(CellStyle cellStyle){
cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
cellStyle.setFillBackgroundColor(HSSFColor.LIME.index);
cellStyle.setFillForegroundColor(CellStyle.THICK_FORWARD_DIAG);
return cellStyle;
}
/**
* append the cellStyle with border
*
* @param cellStyle
* @return
*/
public static CellStyle appendBorder(CellStyle cellStyle){
cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
cellStyle.setBorderLeft(CellStyle.BORDER_THIN);
cellStyle.setBorderRight(CellStyle.BORDER_THIN);
cellStyle.setBorderTop(CellStyle.BORDER_THIN);
cellStyle.setLeftBorderColor(HSSFColor.GREEN.index);
cellStyle.setRightBorderColor(HSSFColor.GREEN.index);
cellStyle.setTopBorderColor(HSSFColor.GREEN.index);
cellStyle.setBottomBorderColor(HSSFColor.GREEN.index);
return cellStyle;
}
/**
* append the cellStyle with wrapText
*
* @param cellStyle
* @return
*/
public static CellStyle appendWrapText(CellStyle cellStyle){
cellStyle.setWrapText(true);
return cellStyle;
}
/**
* append the cellStyle with align.
*
* @param cellStyle
* @return
*/
public static CellStyle appendAlign(CellStyle cellStyle){
cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
return cellStyle;
}
}
this is the excel cell style.
package ycl.learn.excel;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import ycl.learn.excel.ExcelHeader.ColumnHeader;
import ycl.learn.excel.ExcelResult.ExcelErrorEnum;
import ycl.learn.excel.ExcelTypeConvert.HeaderType;
public class ExcelWriter {
public static ExcelResult writerExcel(ExcelParameter parameter) {
ExcelResult result = new ExcelResult();
OutputStream os = parameter.getOutputStream();
Boolean version2007 = parameter.getVerstion2007();
String sheetName = parameter.getSheetName();
Workbook workbook = null;
try {
if (version2007){
workbook = new XSSFWorkbook();
}else{
workbook = new HSSFWorkbook();
}
} catch (Exception e) {
result.addError(ExcelErrorEnum.SYSTEM_ERROR);
return result;
}
Sheet sheet=workbook.createSheet(sheetName);
sheet.setPrintGridlines(true);
result = writerSheet(workbook,sheet,parameter);
try {
workbook.write(os);
} catch (IOException e) {
result.addError(ExcelErrorEnum.SYSTEM_ERROR);
return result;
}
return result;
}
private static ExcelResult writerSheet(Workbook workbook, Sheet sheet, ExcelParameter parameter) {
ColumnHeader[] chs = parameter.getChs();
List<Map<String, String>> dataMapList = parameter.getDataMapList();
String title = parameter.getTitle();
ExcelResult result = new ExcelResult();
int rowindex = 0;
if(title!=null){
Row row = sheet.createRow(rowindex);
CellRangeAddress region = new CellRangeAddress(0,0,0,chs.length-1);
CellStyle cellStyle = ExcelStyle.createDataCellStyle(workbook);
cellStyle = ExcelStyle.appendBorder(cellStyle);
cellStyle = ExcelStyle.appendAlign(cellStyle);
cellStyle = ExcelStyle.appendFontST(workbook, cellStyle);
for(int i=region.getFirstColumn();i<region.getLastColumn()+1;i++){
Cell cellregion=row.getCell(i);
if( cellregion==null){
cellregion=row.createCell(i);
cellregion.setCellValue("");
}
//sheet.setDefaultColumnStyle(i, cellStyle);
cellregion.setCellStyle(cellStyle);
}
Cell cell = row.createCell(0);
cell.setCellValue(title);
//sheet.setDefaultColumnStyle(0, cellStyle);
cell.setCellStyle(cellStyle);
sheet.addMergedRegion(region);//merge cells
rowindex++;
}
Row row = sheet.createRow(rowindex);
for(int i=0;i<chs.length;i++){
sheet.createFreezePane(0, 2, 0, 2);// freeze cells
Cell cell = row.createCell(i);
cell.setCellValue(chs[i].getName());
}
for(int j=0;j<dataMapList.size();j++){
row = sheet.createRow(j+rowindex+1);
for(int k=0;k<chs.length;k++){
Cell dataCell = row.createCell(k);
Map<String, String> dataMap = dataMapList.get(j);
String value = dataMap.get(chs[k].getName());
if(value == null){
result.addError(ExcelErrorEnum.HEADER_NOT_MATCH);
}
Object convertValue = chs[k].getHeaderType().getConvertValue(value);
if(chs[k].getHeaderType().equals(HeaderType.BOOLEAN)){
Boolean realValue = (Boolean)convertValue;
dataCell.setCellValue(realValue);
}else if(chs[k].getHeaderType().equals(HeaderType.DATE)){
Date realValue = (Date)convertValue;
dataCell.setCellValue(realValue);
dataCell.setCellType(Cell.CELL_TYPE_NUMERIC);
CellStyle cellStyle=ExcelStyle.createDataCellStyle(workbook);
cellStyle = ExcelStyle.appendBorder(cellStyle);
dataCell.setCellStyle(cellStyle);
}else if(chs[k].getHeaderType().equals(HeaderType.DOUBLE)){
Double realValue = (Double)convertValue;
dataCell.setCellValue(realValue);
dataCell.setCellType(Cell.CELL_TYPE_NUMERIC);
CellStyle cellStyle=ExcelStyle.createNumberCellStyle(workbook);
cellStyle = ExcelStyle.appendBorder(cellStyle);
dataCell.setCellStyle(cellStyle);
}else if(chs[k].getHeaderType().equals(HeaderType.TEXT)){
dataCell.setCellValue((String)convertValue);
CellStyle cellStyle=ExcelStyle.createTextCellStyle(workbook);
cellStyle = ExcelStyle.appendBorder(cellStyle);
dataCell.setCellStyle(cellStyle);
}else if(chs[k].getHeaderType().equals(HeaderType.STRING)){
dataCell.setCellValue((String)convertValue);
}else{
dataCell.setCellValue((String)convertValue);
}
}
}
return result;
}
}
this is the excel writer, add the cell style, and merge cells and freeze cells. very beautiful function.
分享到:
相关推荐
在这个“POI报表导出excel”的案例中,我们将深入探讨如何使用POI 3.6版本来实现报表的导出,包括设置Excel样式、合并单元格以及处理多表头的合并。 首先,我们需要了解Apache POI的核心组件:HSSFWorkbook(用于...
通过以上步骤,我们成功地实现了使用Apache POI在Java中导出Excel文件,并实现了自动换行的功能。这种方式不仅可以提高工作效率,还能确保数据的准确性和完整性。 #### 六、注意事项与优化建议 - **兼容性问题**:...
总结,"poi导入导出Excel通用工具类 兼容xls,xlsx"这个工具实现了利用Apache POI库处理Excel文件的功能,涵盖了从旧版的.xls到新版的.xlsx格式,提供了方便的导入和导出接口,使得在Java开发中处理Excel数据变得...
标题提到的"使用poi导入导出excel的相关包.rar"是一个包含多种POI库的压缩包,适用于进行Excel文件的导入和导出操作。 该压缩包中的文件包括: 1. poi-ooxml-full-5.0.0.jar 和 poi-ooxml-lite-5.0.0.jar:这两个都...
本主题将深入探讨如何使用POI库导出EXCEL表格,以及如何结合提供的关键代码实现这一功能。 首先,我们需要理解Apache POI库的核心组件——HSSF(Horrible Spreadsheet Format)用于处理.xls格式的Excel文件,而XSSF...
标题提到的"导出excel文档所需要的poi的jar包"正是指这个功能。 Apache POI的版本3.8是较早的一个稳定版本,尽管现在已经有更新的版本,但3.8版本仍然广泛使用。这里提到了三个核心的jar包: 1. poi-3.8.jar:这是...
"poi导出excel所需jar"这个标题表明我们正在讨论使用POI库来导出Excel文件时所需的依赖文件。下面将详细介绍这些jar包的功能及其在导出Excel过程中的作用。 1. **poi-ooxml-schemas-3.8-20120326.jar**:此jar包包...
Java导出Excel是Java开发中常见的一...在使用POI 3.10进行Java导出Excel的过程中,记得关注官方文档和社区更新,以便获取最新的信息和支持。此外,合理使用缓存和流式处理技术可以进一步优化性能,避免内存溢出等问题。
本篇将详细介绍如何利用 POI 导出 Excel。 首先,你需要在项目中引入 POI 工具包。你可以通过 Maven 或者直接下载 JAR 包来添加依赖。如果你使用 Maven,可以在项目的 `pom.xml` 文件中添加以下依赖: ```xml ...
**导出Excel的基本步骤:** 1. **创建Workbook对象:** 使用HSSFWorkbook或XSSFWorkbook类,根据目标文件格式选择合适的类。 2. **创建Sheet对象:** 在Workbook中添加Sheet,代表Excel工作表。 3. **创建Row对象:*...
导出Excel文件: 1. **创建Workbook和Sheet**:首先,你需要创建一个新的Workbook实例,然后根据需求创建Sheet。 2. **添加Row和Cell**:在Sheet上添加Row,然后在Row中添加Cell。可以通过`Sheet.createRow(int ...
总结来说,"导出excel-兼容2007"涉及到使用Apache POI库在Java中生成.xlsx格式的Excel文件,以确保与Excel 2007及更高版本的兼容性。这需要正确配置项目的类路径,包含必要的jar包,并使用提供的API来创建、填充和...
导入和导出Excel表是Apache POI的核心功能。下面,我们将深入探讨如何使用POI 3.9处理Excel的相关知识点: 1. **工作簿与工作表**: - **工作簿**:在POI中,工作簿(HSSFWorkbook 或 XSSFWorkbook)代表整个Excel...
Apache POI是一个强大的...在项目中使用POI实现Excel导出功能时,记得根据实际情况调整代码,处理异常,优化性能,并测试不同版本的Excel文件兼容性。通过持续学习和实践,你将能够熟练掌握这项技能,提高工作效率。
在Java编程中,导出Excel是一项常见的任务,特别是在数据分析、报表生成或数据交换等领域。而带图片的Excel导出则增加了复杂性,因为涉及到二进制数据的处理和Excel特定格式的支持。以下是一些关于如何在Java中实现...
在导出方面,POI能够根据业务需求生成包含大量数据的Excel文件,可以自定义样式、颜色、字体等,使得导出的文件既实用又美观。在批量导出时,尤其适用于需要将数据库查询结果或者处理后的数据以Excel形式分发给用户...
### POI导入导出及Spring框架综合应用 #### 一、Apache POI简介与核心功能 Apache POI是Apache软件基金会的Jakarta项目中的一个子项目,它为Java程序员提供了一组API,使得他们能够使用Java来操作Microsoft Office...
在这个"POI 导出 EXCEL 经典实现"的话题中,我们将探讨如何使用 Apache POI 来创建一个简单的 Excel 文件导出功能。 首先,你需要从 Apache POI 的官方网站(http://poi.apache.org/)下载对应的 JAR 包。在示例中...
在IT行业中,Excel作为一种强大的电子表格工具,常用于数据分析、报告制作和数据交换。"Excel导出数据(根据Excel模板定义)...使用Apache POI库,我们可以实现根据预设模板动态生成和导出Excel文件,满足各种业务需求。
POI允许开发者通过Java代码创建复杂的Excel表格,包括单元格样式、公式、图表等。 1. **POI使用基础**: - 创建Workbook对象,它是Excel文件的容器。 - 创建Sheet对象,代表Excel工作簿中的单个工作表。 - 在...