`
xwcueh
  • 浏览: 25282 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Excel2007写入表格

阅读更多
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());
		}
	}
}

分享到:
评论

相关推荐

    C# 读取XML文件并写入Excel表格

    本项目涉及的核心技术是“读取XML文件”和“写入Excel表格”。XML(Extensible Markup Language)是一种用于存储和传输数据的标准化格式,而Excel则是Microsoft Office套件中的一个组件,用于创建、编辑和分析数据。...

    excel通过vba 批量读取word内表格的内容并写入excel

    excel通过vba 批量读取word内表格的内容并写入excel

    python各种excel写入方式的速度对比

    经过实验,新建一个excel表格,该表格拥有7个sheet,每个sheet有800条数据,其中最后一个sheet为空。 首先使用openpyxl进行写入操作,代码如下: book = openpyxl.Workbook() auths = Auth.objects.filter(owner_id...

    读写Excel,  写入excel指定位置

    在IT行业中,处理数据是日常任务之一,而Excel作为广泛使用的电子表格软件,常常被用于数据分析、报告制作等场景。本篇文章将详细讲解如何在编程环境中读取和写入Excel文件,特别是如何写入到Excel的指定位置。我们...

    VC 将数据写入Excel表格中

    "VC 将数据写入Excel表格中"的主题涉及的是使用Visual C++(VC)编程语言与Microsoft Office的自动化接口来实现这一功能。下面我们将详细探讨这一技术。 首先,Visual C++是微软公司推出的一种C++编程环境,它提供...

    java 创建EXCEL文件,并向EXCEL中写入数据

    在Java编程环境中,我们经常需要处理数据的导入和导出,其中Excel...然而,需要注意的是,`jxl`库只支持旧版的.BIFF8格式(Excel 97-2003),对于新版的.xlsx格式(Excel 2007及以后版本),你需要使用Apache POI库。

    易语言 EXCEL表格操作实例

    写入Excel表格时,我们需要先创建或打开一个Excel工作簿,然后选择工作表,定位到特定的单元格,最后使用“写入文本文件”或“写入二进制文件”命令写入数据。这一步可能涉及到对Excel对象模型的理解,比如工作簿...

    labview使用SDK写入Excel表格,简单易学

    本教程将详细介绍如何利用LabVIEW的软件开发工具包(SDK)来写入Excel表格,以及如何分Sheet进行数据操作。 首先,我们需要了解LabVIEW中用于与Excel交互的API,通常是通过Microsoft的ActiveX对象模型。这意味着...

    读取PDF中的excel表格,并写入excel中

    本教程将详细介绍如何完成“读取PDF中的excel表格,并写入excel中”的操作。 首先,我们要理解PDF(Portable Document Format)和Excel(电子表格)文件格式的本质差异。PDF是一种用于呈现文档的静态格式,它保留了...

    Android-将数据写入Excel表格并存储到外部存储中

    在Android平台上,将数据写入Excel表格并存储到外部存储是一项常见的需求,特别是在数据分析、报告生成或者用户数据导出的场景下。这个过程涉及到多个关键知识点,包括Android的文件操作、Excel文件格式处理以及可能...

    VC+将数据写入Excel表格

    在VC++开发环境中,将数据写入Excel表格是一项常见的任务,尤其在数据分析、报表生成或者自动化处理场景下。本文将详细介绍如何使用VC++与Microsoft Office的自动化接口来实现这一功能。 首先,我们需要知道,VC++...

    VC6.0以模版将数据写入Excel

    在VC6.0环境下,利用模版来将数据写入Excel是一种常见的编程需求,尤其是在处理大量结构化数据时。这个过程通常涉及到Microsoft Office Automation技术,允许C++代码直接操作Excel对象模型,创建工作簿、工作表,...

    将数据写入excel表格

    本教程将以“VC++将数据写入EXCEL表格”为主题,讲解如何利用Visual C++编程语言来操作Excel,实现数据的读写功能。 首先,要实现这个功能,我们需要使用Microsoft提供的Office自动化接口,即Microsoft Office ...

    易语言读取excel文件到高级表格

    Excel文件通常用于存储和处理结构化的表格数据,而“读取Excel文件到高级表格”则是将Excel中的数据导入到易语言的高级表格组件中,便于进一步的处理和显示。 首先,我们需要理解易语言中的高级表格组件。这是一个...

    把文件写入excel表格

    在IT行业中,将数据写入Excel表格是一种常见的需求,尤其在数据分析、报告生成或数据交换时。本项目针对一个特定场景:检查数据接口是否有信息,并根据结果生成Excel文件。由于涉及的接口数量庞大(几千个),因此...

    MFC读写EXCEL表格

    在文件名`VS2010将ListCtrl数据写入到Excel_xiugai`中,很可能是实现了一个功能,将`CListCtrl`中的数据写入Excel表格。 6. **数据转换**:在实际操作中,我们需要将`CListCtrl`中的数据转换为适当的数据结构,如数...

    Unity3d动态创建excel以及写入数据

    **动态生成表格和写入数据** 1. 动态行和列:你可以通过循环来动态创建行和列。例如,如果你有一个二维数组,可以遍历数组并设置每个单元格的值。 ```csharp int numRows = data.GetLength(0); int numCols = data....

    EXCEL读取和写入.zip

    在使用LabVIEW进行数据处理和分析时,有时我们需要与Microsoft Excel进行交互,即读取Excel文件中的数据或向Excel文件写入数据。本教程将详细讲解如何使用LabVIEW实现这一功能,主要关注“读取”和“写入”两个核心...

    易语言高级表格导出EXCEL

    首先,我们需要创建一个Excel应用程序对象,然后打开一个新的工作簿,接着在工作簿中创建工作表,并将表格数据逐行或逐列写入工作表。这涉及到一系列的易语言函数,如`创建对象`用于创建Excel对象,`调用方法`用于...

    利用POI读取excel写入到word

    要实现"利用POI读取excel写入到word",我们需要以下步骤: 1. **准备环境**:首先,确保你的项目已经引入了Apache POI的依赖。在给定的压缩包中,"poi - 副本"可能是包含POI库的JAR文件,你需要将其添加到你的项目...

Global site tag (gtag.js) - Google Analytics