0 0

关于POI模版的导入5

现在有2个excel文件,一个是模版文件1.xls,里面有各种单元格的格式或者设置的什么的,另一个文件是有数据的等待操作的Excel文件2.xls,请问怎么通过java POI 代码实现将2.xls获得模版文件1.xls的各种单元格格式等,求详细代码谢谢!
2012年7月09日 10:02

5个答案 按时间排序 按投票排序

0 0

采纳的答案

这个对你也许有用,基于poi3.6写的比较通用的excel读取,如果有单元格合并的话就不适用了。

package com.dp.util;

import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;


import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * Excel通用处理器
 * @author jkxydp
 *
 */
public class AllPurposeExcelProcesser {
	/**
	 * 通过调用POI读Excel的较为通用的方式,其中约定:excel的第一行中每列的内容为字符串,并且与你定义的model中的字段相对应,你的类遵循JavaBean标准
	 * @param <T> 你希望读取后组装的数据结构定义
	 * @param excel	你要读取的文件
	 * @param modelType 你希望组装的数据的定义的字节码,该字节码描述中必须包含一个无参构造器
	 * @param sheetName 你要读取的文件中的工作表的名称
	 * @return	一个装载了读取后获得对象的List
	 * @throws FileNotFoundException
	 * @throws IOException
	 * @throws IllegalArgumentException
	 * @throws SecurityException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 * @throws NoSuchMethodException
	 */
	public static <T> List<T> read(File excel,Class<T> modelType,String sheetName) throws FileNotFoundException, IOException, IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException{
		Method[] methods = modelType.getMethods();
		Workbook wb = getWorkBook(excel);
		if(wb == null)
			return null;
		List<T> models = new ArrayList<T>();	//创建容器,用于装置所有读取出来的model
		Sheet sheet = wb.getSheet(sheetName);	//根据提供的sheet名称拿到整张表
		int rows = sheet.getPhysicalNumberOfRows();System.out.println(rows);
		Row zeroRow = sheet.getRow(0);	//拿到第零行表格,解析列与字段之间的对应关系
		Map<Integer,Method> colMark = new HashMap<Integer, Method>();	//存储方法与字段的对应关系
		for(short i = 0; i < zeroRow.getLastCellNum(); i ++){
			Cell tip = zeroRow.getCell(i);
			if(null != tip && tip.getCellType() == Cell.CELL_TYPE_STRING) {
				String curTipName = tip.getStringCellValue();
				for(int j = 0; j < methods.length; j ++) {
					if(("set" + curTipName.toUpperCase().charAt(0) + curTipName.substring(1)).equals(methods[j].getName())) {
						colMark.put((int)i, methods[j]);
						break;
					}
				}
			}
		}
		Cell curCell = null;
		boolean flag = true;
		for(int i = 1; i < rows - 1; i ++) {
			Row aModel = sheet.getRow(i);
			if(null != aModel) {
				T model = modelType.getConstructor().newInstance();
				for(int col = 0; col < colMark.size(); col ++) {
					curCell = aModel.getCell(col);
					if(null != curCell){
						switch (curCell.getCellType()) {
						case Cell.CELL_TYPE_STRING:
						case Cell.CELL_TYPE_BLANK:
							  if(colMark.get(col).getParameterTypes()[0] == String.class) {
								  colMark.get(col).invoke(model, curCell.getStringCellValue());
							  } else {
									flag = false;
							  }
							  break;
						case Cell.CELL_TYPE_FORMULA:
							 if(colMark.get(col).getParameterTypes()[0] == String.class) {
								 colMark.get(col).invoke(model, Integer.toString((int)Math.round(curCell.getNumericCellValue())));
							  } else {
									flag = false;
							  }
							  break;
						
						case Cell.CELL_TYPE_NUMERIC:
							if(colMark.get(col).getParameterTypes()[0] == int.class || colMark.get(col).getParameterTypes()[0] == Integer.class) {
							  colMark.get(col).invoke(model, (int)Math.round(curCell.getNumericCellValue()));
							} else if (colMark.get(col).getParameterTypes()[0] == Double.class || colMark.get(col).getParameterTypes()[0] == double.class) {
								colMark.get(col).invoke(model, curCell.getNumericCellValue());
							} else if(colMark.get(col).getParameterTypes()[0] == Float.class || colMark.get(col).getParameterTypes()[0] == float.class) {
								colMark.get(col).invoke(model, (float)curCell.getNumericCellValue());
							} else if(colMark.get(col).getParameterTypes()[0] == Long.class || colMark.get(col).getParameterTypes()[0] == long.class) {
								colMark.get(col).invoke(model, Math.round(curCell.getNumericCellValue()));
							} else if(colMark.get(col).getParameterTypes()[0] == Short.class || colMark.get(col).getParameterTypes()[0] == short.class) {
								colMark.get(col).invoke(model, (short)Math.round(curCell.getNumericCellValue()));
							} else if(colMark.get(col).getParameterTypes()[0] == Byte.class || colMark.get(col).getParameterTypes()[0] == byte.class) {
								colMark.get(col).invoke(model, (byte)Math.round(curCell.getNumericCellValue()));
							} else if(colMark.get(col).getParameterTypes()[0] == Date.class) {
								colMark.get(col).invoke(model, curCell.getDateCellValue());
							} else if(colMark.get(col).getParameterTypes()[0] == String.class){
								colMark.get(col).invoke(model, Integer.toString((int)Math.round(curCell.getNumericCellValue())));
							}else {
								flag = false;
							}
						  	break;
						case Cell.CELL_TYPE_BOOLEAN:
							if(colMark.get(col).getParameterTypes()[0] == Boolean.class || colMark.get(col).getParameterTypes()[0] == boolean.class) {
							  colMark.get(col).invoke(model, curCell.getBooleanCellValue());
							} else {
								flag = false;
							}
						  	break;
						default:
							break;
						}
						if(!flag) break;
					}
				}
				if(flag) models.add(model);
				flag = true;
			}
		}
		return models;
	}
	/**
	 *	Excel处理2003与2007差异
	 */
	private static Workbook getWorkBook(File excel) throws FileNotFoundException, IOException {
		return excel.getName().endsWith("xls") ? 
				new HSSFWorkbook(new BufferedInputStream(new FileInputStream(excel))) : 
					excel.getName().endsWith("xlsx") ? 
							new XSSFWorkbook(new BufferedInputStream(new FileInputStream(excel))):null;
	}
}

2012年7月09日 14:58
0 0

如果不牵扯到list的循环输出和单元格的合并,不是很难写。

1、将模版文件1.xls读入到Workbook对象A中
2、将数据文件2.xls读入到Workbook对象B中
3、循环读取Workbook对象B中所有的数据设置到Workbook对象A里
4、导出Workbook对象A到新的xls

2012年7月09日 10:32
0 0

你获取需要填充的单元格的格式就好了,其余的东西直接copy模板的那个文件就OK了

2012年7月09日 10:21
0 0

将2.xls 的文件取出来。导入1.xls的格式中?

这代码 估计得写一大阵子。。
先提供下方案。首先先解析 数据的excel 然后循环向1.xls中写入数据。并生产新的xls做为1

2012年7月09日 10:08
0 0

按模板导入不是这么搞的,你定义个模板,如你的exacel1,让用户下载该模板,在对应的单元格中填写内容,然后导入,获取excel1的格式意义只在于导出系统数据保持格式风格一样。

2012年7月09日 10:05

相关推荐

    Java操作Excel之Poi模板导入导出

    在"Java操作Excel之Poi模板导入导出"这个主题中,我们将深入探讨如何使用POI库来处理Excel模板,并进行数据的导入和导出。 首先,了解Excel模板的基本概念。模板通常包含预定义的样式、格式和计算,开发人员可以...

    poi实现导入数据到excel模板

    poi实现导入数据到excel模板,本来想上传poi的jar包,谁知限制我只能上传15M的文件,汗。。。。。 不知道啥时候开始要分了... 代码见: https://github.com/thisisnohi/nohi-doc poi实现导入数据到excel模板。...

    poi多级表头导入模板

    poi多级表头导入模板

    poi动态生成导入模板,动态下拉菜单

    本话题聚焦于使用POI来动态生成带有下拉菜单的Excel导入模板,这在数据处理、报告生成和自动化流程中具有广泛应用。 首先,让我们深入了解Apache POI库。它提供了HSSF(Horrible Spreadsheet Format)和XSSF(XML ...

    FreeMarker+poi 模板生成word+导入图片

    **FreeMarker + POI:模板生成Word并导入图片** 结合FreeMarker和Apache POI,我们可以创建一个模板Word文档,其中包含占位符,然后使用POI读取和填充这个模板,同时插入图片,生成最终的动态Word文档。以下是这个...

    poi解析导入word (简单Demo使用)

    Apache POI是一个流行的Java库,专门用于处理Microsoft Office格式的文件,如...这个"poi解析导入word (简单Demo使用)"项目为你提供了一个基础模板,你可以根据实际需求对其进行扩展和定制,满足更复杂的Word处理场景。

    poi图片导入代码及模板

    本文将深入探讨如何使用Apache POI库在Java微服务环境中导入Excel中的图片,并提供相关代码模板和使用说明。 首先,Apache POI提供了对Excel文件的强大支持,包括读取、写入和修改工作簿、工作表以及单元格数据。在...

    使用poi根据导入模板生成excel

    在本项目中,“使用poi根据导入模板生成excel”是核心任务,这意味着我们需要利用POI库处理已有的Excel模板,生成新的Excel表格,并填充数据。 首先,我们需要了解Apache POI的基本结构和使用方法。POI提供了HSSF...

    poi导入word和图片

    ### POI导入Word文档与图片的关键技术点 #### 一、概述 Apache POI 是一个用于读写 Microsoft Office 格式文件(如 .doc、.xls 和 .ppt)的 Java API。本文档将详细介绍如何使用 POI 库来读取 Word 文档(包括 ....

    poi复杂导入导出demo

    Apache POI是一个流行的Java库,专门用于处理...以上就是关于"poi复杂导入导出demo"中可能包含的一些知识点。通过深入理解并应用这些概念,开发者可以创建出功能强大的Excel导入导出解决方案,满足各种复杂的业务需求。

    POI 导入导出Excel表格模板

    本教程将详细讲解如何使用 POI 库来实现 Excel 的导入与导出功能,以及创建和操作Excel表格模板。 一、Apache POI 简介 Apache POI 是 Apache 软件基金会的一个项目,其主要功能是读取和写入 Microsoft Office 格式...

    java_poi导入excel通用工具类V0915

    "java_poi导入excel通用工具类V0915" 提供了一种通用的方式来处理Excel数据的导入工作,它支持多种赋值方式,包括单个对象、列表对象以及指定坐标的赋值。 首先,让我们深入理解一下这个工具类的主要功能: 1. **...

    Java 使用poi导入excel 并使用xml做数据验证

    在本项目中,我们结合了POI库和XML技术来实现Excel数据的验证与导入数据库。 首先,Apache POI提供了HSSF和XSSF两个API,分别用于处理老版本的BIFF8格式(.xls)和新版本的OOXML格式(.xlsx)。在这个案例中,我们...

    POI导入导出合集

    9. **模板填充**: 你可以使用POI创建Excel模板,并用Java对象的数据动态填充模板,这在批量生成报告或邮件合并等场景中非常有用。 10. **错误处理**: 当读取或写入文件时,Apache POI会抛出异常,如`...

    POI导入Excel并返回校验后的错误文件(原样)下载以及校验错误信息,同时加进度条

    POI导入Excel并返回校验后的错误文件(原样数据文件,并添加批注,注:由于批注只能加1000条,会在Excel后面添加一栏错误信息)下载以及页面展示校验错误信息,同时添加导入进度条,提供页面js和css代码,后端...

    使用poi导入数据到Exce模版

    标签“poi导出模板”进一步强调了这是关于使用POI进行数据导出的实践,不仅仅是读取,还涉及到模板的生成和更新。 在文件名称列表中提到的"ExcelDemo"可能是项目的主类或者示例文件,里面可能包含了如何使用POI处理...

    POI 导入导出示例

    【标题】"POI 导入导出示例"是一个关于Apache POI库的实际应用教程,主要涉及如何使用Java处理Microsoft Office格式的文件,如Excel。Apache POI是开源项目,它允许开发者创建、修改和显示MS Office文件,包括XLS和...

    POI导入excel(模版式导入)

    本教程将详细讲解如何利用POI库实现模版式的Excel导入功能,这是一种高效且灵活的数据处理方式,特别适用于需要批量导入数据到系统的情况。 1. **Apache POI简介** Apache POI 是一个开源项目,其主要功能是为Java...

    poi导入导出excel功能

    本案例基于Maven项目结构,利用Apache POI库实现了Excel的导入与导出功能,为初学者提供了一个简单易懂的模板。 首先,我们来了解一下Apache POI的基本概念。Apache POI是一个开源项目,它提供了Java API来处理...

    poi导入导出excel生成报表

    ### POI 导入导出 Excel 生成报表详解 #### 一、概述 Apache POI 是一个用于读写 Microsoft Office 格式文件的 Java API,其中包括对 Excel 文件的支持。通过 POI,我们可以轻松地实现 Excel 文件的创建、读取、...

Global site tag (gtag.js) - Google Analytics