package com.ucf.boss.utils;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.List;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
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.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.ucf.boss.enumtype.file.AbstractExcelEnum;
import com.ucf.platform.framework.core.util.DateUtils;
/**
* 导出excel工具类
*
* @author LiuHui
*
*/
public class ExcelFileUtils {
/**
* 创建excel
*
* @param list
* @param excelEnums
* @return
*/
public static void createExcel(OutputStream os, List<?> list, AbstractExcelEnum[] excelEnums) throws Exception {
XSSFWorkbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet();
// 表头格式
CellStyle headCellStyle = createExcelHeadStyle(wb);
XSSFCellStyle cellStyle = wb.createCellStyle();
// 创建表头
createTabHeader(sheet, excelEnums, headCellStyle);
if (null != list && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
// 创建每行的数据
Row row = sheet.createRow(i + 1);
Object vo = list.get(i);
for (int j = 0; j < excelEnums.length; j++) {
Cell cell = row.createCell(j);
cell.setCellType(XSSFCell.CELL_TYPE_STRING);
cell.setCellStyle(cellStyle);
AbstractExcelEnum excelEnum = excelEnums[j];
String fileName = excelEnum.getField();
Object value = PropertyUtils.getProperty(vo, fileName);
if (null != value) {
// 如果是Date类型
if (value.getClass().isAssignableFrom(Date.class)) {
cell.setCellValue(DateUtils.format((Date) value, DateUtils.newFormat));
} else {
String valTrim = value.toString().trim();
if (!"".equals(valTrim)) {
// 如果返回的值可用枚举做转换
if (null != excelEnum.getClazz()) {
String cconvertedValue = convertValue(excelEnum, valTrim);
if (StringUtils.isNotBlank(cconvertedValue)) {
cell.setCellValue(cconvertedValue);
} else {
cell.setCellValue("");
}
} else {
cell.setCellValue(valTrim);
}
} else {
cell.setCellValue("");
}
}
} else {
cell.setCellValue("");
}
}
}
}
wb.write(os);
}
/**
* 定义表头单元格样式
*
* @param wb
* @return
*/
private static CellStyle createExcelHeadStyle(XSSFWorkbook wb) {
CellStyle style = wb.createCellStyle();
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setFillForegroundColor(HSSFColor.BLUE_GREY.index); // 设置背景色
style.setAlignment(CellStyle.ALIGN_CENTER);// 居中
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);// 设置垂直居中
style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框
style.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框
style.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框
return style;
}
/**
* 根据编码获取枚举中对应的值
*
* @param excelEnum
* @param valTrim
* @return
* @throws Exception
*/
private static String convertValue(AbstractExcelEnum excelEnum, String valTrim) throws Exception {
Class<?> clazz = excelEnum.getClazz();
if (!clazz.isEnum()) {
throw new IllegalArgumentException("参数类型必须是枚举类型");
}
Method method = clazz.getMethod("values");
Object obj = method.invoke(null);
Object[] enumArr = (Object[]) obj;
for (Object object : enumArr) {
String va = PropertyUtils.getProperty(object, excelEnum.getCodeFieldName()).toString();
if (valTrim.equals(va)) {
return PropertyUtils.getProperty(object, excelEnum.getNameFieldName()).toString();
}
}
return null;
}
/**
* 创建表头
*
* @param sheet
* @param enums
* @author LiuHui
* @param headCellStyle
*/
private static void createTabHeader(Sheet sheet, AbstractExcelEnum[] enums, CellStyle headCellStyle) {
Row row = sheet.createRow(0);
row.setHeight((short) (1.5 * 256)); // 设置行高
for (int i = 0; i < enums.length; i++) {
Cell cell = row.createCell(i);
cell.setCellType(XSSFCell.CELL_TYPE_STRING);
cell.setCellStyle(headCellStyle);
cell.setCellValue(enums[i].getColumn());
}
}
}
分享到:
相关推荐
本项目涉及的核心技术是“读取XML文件”和“写入Excel表格”。XML(Extensible Markup Language)是一种用于存储和传输数据的标准化格式,而Excel则是Microsoft Office套件中的一个组件,用于创建、编辑和分析数据。...
excel通过vba 批量读取word内表格的内容并写入excel
经过实验,新建一个excel表格,该表格拥有7个sheet,每个sheet有800条数据,其中最后一个sheet为空。 首先使用openpyxl进行写入操作,代码如下: book = openpyxl.Workbook() auths = Auth.objects.filter(owner_id...
在IT行业中,处理数据是日常任务之一,而Excel作为广泛使用的电子表格软件,常常被用于数据分析、报告制作等场景。本篇文章将详细讲解如何在编程环境中读取和写入Excel文件,特别是如何写入到Excel的指定位置。我们...
"VC 将数据写入Excel表格中"的主题涉及的是使用Visual C++(VC)编程语言与Microsoft Office的自动化接口来实现这一功能。下面我们将详细探讨这一技术。 首先,Visual C++是微软公司推出的一种C++编程环境,它提供...
在Java编程环境中,我们经常需要处理数据的导入和导出,其中Excel...然而,需要注意的是,`jxl`库只支持旧版的.BIFF8格式(Excel 97-2003),对于新版的.xlsx格式(Excel 2007及以后版本),你需要使用Apache POI库。
写入Excel表格时,我们需要先创建或打开一个Excel工作簿,然后选择工作表,定位到特定的单元格,最后使用“写入文本文件”或“写入二进制文件”命令写入数据。这一步可能涉及到对Excel对象模型的理解,比如工作簿...
本教程将详细介绍如何利用LabVIEW的软件开发工具包(SDK)来写入Excel表格,以及如何分Sheet进行数据操作。 首先,我们需要了解LabVIEW中用于与Excel交互的API,通常是通过Microsoft的ActiveX对象模型。这意味着...
本教程将详细介绍如何完成“读取PDF中的excel表格,并写入excel中”的操作。 首先,我们要理解PDF(Portable Document Format)和Excel(电子表格)文件格式的本质差异。PDF是一种用于呈现文档的静态格式,它保留了...
在Android平台上,将数据写入Excel表格并存储到外部存储是一项常见的需求,特别是在数据分析、报告生成或者用户数据导出的场景下。这个过程涉及到多个关键知识点,包括Android的文件操作、Excel文件格式处理以及可能...
在VC++开发环境中,将数据写入Excel表格是一项常见的任务,尤其在数据分析、报表生成或者自动化处理场景下。本文将详细介绍如何使用VC++与Microsoft Office的自动化接口来实现这一功能。 首先,我们需要知道,VC++...
在VC6.0环境下,利用模版来将数据写入Excel是一种常见的编程需求,尤其是在处理大量结构化数据时。这个过程通常涉及到Microsoft Office Automation技术,允许C++代码直接操作Excel对象模型,创建工作簿、工作表,...
本教程将以“VC++将数据写入EXCEL表格”为主题,讲解如何利用Visual C++编程语言来操作Excel,实现数据的读写功能。 首先,要实现这个功能,我们需要使用Microsoft提供的Office自动化接口,即Microsoft Office ...
Excel文件通常用于存储和处理结构化的表格数据,而“读取Excel文件到高级表格”则是将Excel中的数据导入到易语言的高级表格组件中,便于进一步的处理和显示。 首先,我们需要理解易语言中的高级表格组件。这是一个...
在IT行业中,将数据写入Excel表格是一种常见的需求,尤其在数据分析、报告生成或数据交换时。本项目针对一个特定场景:检查数据接口是否有信息,并根据结果生成Excel文件。由于涉及的接口数量庞大(几千个),因此...
在文件名`VS2010将ListCtrl数据写入到Excel_xiugai`中,很可能是实现了一个功能,将`CListCtrl`中的数据写入Excel表格。 6. **数据转换**:在实际操作中,我们需要将`CListCtrl`中的数据转换为适当的数据结构,如数...
**动态生成表格和写入数据** 1. 动态行和列:你可以通过循环来动态创建行和列。例如,如果你有一个二维数组,可以遍历数组并设置每个单元格的值。 ```csharp int numRows = data.GetLength(0); int numCols = data....
在使用LabVIEW进行数据处理和分析时,有时我们需要与Microsoft Excel进行交互,即读取Excel文件中的数据或向Excel文件写入数据。本教程将详细讲解如何使用LabVIEW实现这一功能,主要关注“读取”和“写入”两个核心...
首先,我们需要创建一个Excel应用程序对象,然后打开一个新的工作簿,接着在工作簿中创建工作表,并将表格数据逐行或逐列写入工作表。这涉及到一系列的易语言函数,如`创建对象`用于创建Excel对象,`调用方法`用于...
要实现"利用POI读取excel写入到word",我们需要以下步骤: 1. **准备环境**:首先,确保你的项目已经引入了Apache POI的依赖。在给定的压缩包中,"poi - 副本"可能是包含POI库的JAR文件,你需要将其添加到你的项目...