`
xuyiooo
  • 浏览: 75496 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

POI模版导出excel

    博客分类:
  • JAVA
 
阅读更多
package com;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;

/**
 * 附件中是模板 poi-2.5.1-final-20040804.jar
 *
 * java读取excel文件
 *
 * 一个Excel文件的层次:Excel文件-> 工作表-> 行-> 单元格 对应到POI中,为:workbook-> sheet-> row-> cell
 *
 */
public class testInsertCell {
	public static String outputFile = "d:\\shengcheng.xls "; // 生成的文件
	public static String fileToBeRead = "d:\\aa.xls ";// 模板

	/**
	 *
	 * 读取excel,遍历各个小格获取其中信息,
	 *
	 *
	 * 注意: 1.sheet, 以0开始,以workbook.getNumberOfSheets()-1结束 2.row,
	 * 以0开始(getFirstRowNum),以getLastRowNum结束 3.cell,
	 * 以0开始(getFirstCellNum),以getLastCellNum结束, 结束的数目不知什么原因与显示的长度不同,可能会偏长
	 *
	 *
	 */
	public void readExcel() {

		try {
			// 创建对Excel工作簿文件的引用
			HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(
					fileToBeRead));
			// workbook.getNumberOfSheets());//获取sheet数
			for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {
				if (null != workbook.getSheetAt(numSheets)) {
					HSSFSheet aSheet = workbook.getSheetAt(numSheets);// 获得一个sheet
					System.err.println(aSheet.getFirstRowNum());
					for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) {
						if (null != aSheet.getRow(rowNumOfSheet)) {
							HSSFRow aRow = aSheet.getRow(rowNumOfSheet);
							for (short cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) {
								if (null != aRow.getCell(cellNumOfRow)) {

									List list = new ArrayList();
									list.add("1");
									list.add("2");
									// rowNumOfSheet
									// 表示动态生成那一行的上一行的num,例如11行是模板中的出票保证信息
									while (rowNumOfSheet == 10&& cellNumOfRow == 0) {
										for (int i = list.size() - 1; i > 0; i--) {
											int newRow = 11;
											int rows = 1;// 设定插入几行
											aSheet.shiftRows(newRow,
													aSheet.getLastRowNum(),
													rows);
											HSSFRow sourceRow = aSheet.getRow(newRow);

											aSheet.addMergedRegion(new Region(newRow, (short) 2, newRow,(short) 2)); //
											HSSFCell cew2 = sourceRow.createCell((short) 2);
											addSyteml(workbook, aSheet, newRow,
													newRow, 2, 2);
											cew2.setCellValue("保证人名称");

											aSheet.addMergedRegion(new Region(newRow, (short) 3, newRow,(short) 4)); //
											HSSFCell cew3 = sourceRow.createCell((short) 3);
											addSyteml(workbook, aSheet, newRow,newRow, 3, 4);
											cew3.setCellValue(list.get(i).toString());

											aSheet.addMergedRegion(new Region(
													newRow, (short) 5, newRow,
													(short) 6)); //
											HSSFCell cew5 = sourceRow
													.createCell((short) 5);
											addSyteml(workbook, aSheet, newRow,
													newRow, 5, 6);
											cew5.setCellValue("保证人地址");

											aSheet.addMergedRegion(new Region(
													newRow, (short) 7, newRow,
													(short) 12)); //
											HSSFCell cew11 = sourceRow
													.createCell((short) 7);
											addSyteml(workbook, aSheet, newRow,
													newRow, 7, 12);
											cew11.setCellValue(list.get(i)
													.toString());

											aSheet.addMergedRegion(new Region(
													newRow, (short) 13, newRow,
													(short) 15)); //
											HSSFCell cew12 = sourceRow
													.createCell((short) 13);
											addSyteml(workbook, aSheet, newRow,
													newRow, 13, 15);
											cew12.setCellValue("保证日期");

											aSheet.addMergedRegion(new Region(
													newRow, (short) 16, newRow,
													(short) 18)); //
											HSSFCell cew13 = sourceRow
													.createCell((short) 16);
											addSyteml(workbook, aSheet, newRow,
													newRow, 16, 18);
											cew13.setCellValue(list.get(i)
													.toString());

											if (i == 1) {
												aSheet.addMergedRegion(new Region(
														10, (short) 0,
														10 + list.size() - 1,
														(short) 1)); //
												HSSFCell cew = sourceRow
														.createCell((short) 0);
												addSyteml(workbook, aSheet, 10,
														10 + list.size() - 1,
														0, 1);
												cew.setCellValue("出票保证信息");
											}
										}
										break;

									}
									List lis1t = new ArrayList();
									lis1t.add("111");
									lis1t.add("222");
									lis1t.add("333");
									lis1t.add("444");
									lis1t.add("555");

									// 当出票保证信息为0条的时候下面的标题合并出问题,加此判断
									int size = list.size();
									if (size == 0) {
										size = 1;
									}

									while (rowNumOfSheet == 17 + size
											&& cellNumOfRow == 0) {
										for (int i = lis1t.size() - 1; i > 0; i--) {
											int newRow = 17 + size;
											int rows = 1;// 设定插入几行
											aSheet.shiftRows(newRow,
													aSheet.getLastRowNum(),
													rows);
											HSSFRow sourceRow = aSheet
													.getRow(newRow);

											aSheet.addMergedRegion(new Region(
													newRow, (short) 2, newRow,
													(short) 2)); //
											HSSFCell cew2 = sourceRow
													.createCell((short) 2);
											addSyteml(workbook, aSheet, newRow,
													newRow, 2, 2);
											cew2.setCellValue("保证人名称");

											aSheet.addMergedRegion(new Region(
													newRow, (short) 3, newRow,
													(short) 4)); //
											HSSFCell cew3 = sourceRow
													.createCell((short) 3);
											addSyteml(workbook, aSheet, newRow,
													newRow, 3, 4);
											cew3.setCellValue(lis1t.get(i)
													.toString());

											aSheet.addMergedRegion(new Region(
													newRow, (short) 5, newRow,
													(short) 6)); //
											HSSFCell cew5 = sourceRow
													.createCell((short) 5);
											addSyteml(workbook, aSheet, newRow,
													newRow, 5, 6);
											cew5.setCellValue("保证人地址");

											aSheet.addMergedRegion(new Region(
													newRow, (short) 7, newRow,
													(short) 12)); //
											HSSFCell cew11 = sourceRow
													.createCell((short) 7);
											addSyteml(workbook, aSheet, newRow,
													newRow, 7, 12);
											cew11.setCellValue(lis1t.get(i)
													.toString());

											aSheet.addMergedRegion(new Region(
													newRow, (short) 13, newRow,
													(short) 15)); //
											HSSFCell cew12 = sourceRow
													.createCell((short) 13);
											addSyteml(workbook, aSheet, newRow,
													newRow, 13, 15);
											cew12.setCellValue("保证日期");

											aSheet.addMergedRegion(new Region(
													newRow, (short) 16, newRow,
													(short) 18)); //
											HSSFCell cew13 = sourceRow
													.createCell((short) 16);
											addSyteml(workbook, aSheet, newRow,
													newRow, 16, 18);
											cew13.setCellValue(lis1t.get(i)
													.toString());

											if (i == 1) {// 当是循环中的最后一条数据的时候将总标题嵌入到最前面
												aSheet.addMergedRegion(new Region(
														newRow - 1, (short) 0,
														newRow + lis1t.size()
																- 2, (short) 1)); //
												HSSFCell cew = sourceRow
														.createCell((short) 0);
												addSyteml(workbook, aSheet,
														newRow - 1, newRow
																+ lis1t.size()
																- 2, 0, 1);
												cew.setCellValue("出票保证信息");
											}
										}
										break;

									}

									HSSFCell aCell = aRow.getCell(cellNumOfRow);
									int cellType = aCell.getCellType();
									if (cellType == 0) {// number型
										int NumericCellValue = (int) aCell
												.getNumericCellValue();// 得到模板中值所在cell中的数字
										switch (NumericCellValue) {
										case 1: // 出票日期
											aCell.setCellValue("111");
											break;
										case 2: // 票据号码
											aCell.setCellValue("111");
											break;
										case 3:// 出 票 人全 称
											aCell.setCellValue("111");
											break;
										case 4:// 出票人账号
											aCell.setCellValue("111");
											break;
										}

									}
									FileOutputStream fOut = new FileOutputStream(
											outputFile);
									// 把相应的Excel 工作簿存盘
									workbook.write(fOut);
									fOut.flush();
									// 操作结束,关闭文件
									fOut.close();
								}
							}

						}

					}

				}
			}
		} catch (Exception e) {
			System.out.println("ReadExcelError " + e);
		}

	}

	public static void main(String[] args) {
		System.out.println("开始 ");
		testInsertCell poi = new testInsertCell();
		poi.readExcel();
		System.out.println("结束 ");

	}

	/**
	 * 设置动态数据的样式
	 *
	 */
	private static void addSyteml(HSSFWorkbook workbook, HSSFSheet aSheet,
			int rowFrom, int rowTo, int columnFrom, int columnTo) {
		HSSFCellStyle cloneStyle = workbook.createCellStyle();
		cloneStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		cloneStyle.setBorderLeft((short) 0);
		cloneStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
		cloneStyle.setBorderBottom((short) 0);
		cloneStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
		for (int i = rowFrom; i <= rowTo; i++) {
			HSSFRow row_temp = aSheet.getRow(i);
			for (int j = columnFrom; j <= columnTo; j++) {
				HSSFCell cell_temp = row_temp.getCell((short) j);
				if (cell_temp == null) {
					cell_temp = row_temp.createCell((short) j);
				}
				cell_temp.setCellStyle(cloneStyle);
			}
		}
	}
}

分享到:
评论

相关推荐

    poi导出根据模板导出excel和简单列表导出excel源码

    在本案例中,我们关注的是如何使用 Apache POI 库来导出 Excel 文件,特别是根据模板导出和简单列表导出。下面将详细介绍这个过程。 1. **Apache POI 概述** Apache POI 提供了 Java API 来读写 Microsoft Office ...

    Apache POI 模板导出excel.rar

    在"Apache POI 模板导出excel.rar"这个压缩包中,我们聚焦于使用Apache POI 3.16版本来生成基于Excel模板的数据导出功能。这个过程涉及到多个关键知识点,下面将详细阐述。 1. **Apache POI库**:Apache POI是一个...

    POI使用Excel模板文件循环输出行并导出Excel

    在这个特定的例子中,我们将讨论如何使用POI库基于一个Excel模板文件循环输出数据行,并将结果导出为新的Excel文件。 首先,我们需要理解POI库的基本概念。POI提供了HSSF(Horizontally SpreadSheet Format)和XSSF...

    java通过poi模板导出excel

    Java通过Apache POI库导出Excel是常见的数据处理任务,特别是在大数据分析、报表生成和数据交换等场景。Apache POI是Java中广泛使用的库,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Excel(XLS...

    poi模板导出excel文件jar包.zip

    提供的"poi模板导出excel文件jar包.zip"压缩包包含两个重要的Java档案(JAR)文件:`commons-collections4-4.1.wso2v1.jar`和`commons-math3-3.0.jar`,它们是POI项目所依赖的库。 1. **Apache Commons Collections...

    poi excel 模板读取并导出带公式的excel文档

    2. **通过模板导出Excel表格**: - 在开发中,通常会预先准备好一个Excel模板文件,这个模板文件包含了固定格式和一些基本的数据结构。 - Java程序通过读取这个模板文件,然后填充数据,最后将填充后的文件导出为...

    poi基于模板导出excel

    ### POI 基于模板导出 Excel 的实现方法 #### 概述 Apache POI 是一个用于读写 Microsoft Office 格式文件的 Java 库,其中包括对 Excel 文件的支持。在实际开发过程中,经常会遇到需要根据现有的 Excel 模板来...

    POI按照模板导出Excel

    本教程将深入讲解如何使用Apache POI按照模板导出Excel文件。 一、Apache POI简介 Apache POI是一个强大的库,它允许Java程序员操作Microsoft Office格式的文件。在Excel方面,POI支持HSSF(Horizontally Stored ...

    springboot+poi导出指定格式Excel模板

    springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式...

    SSM框架利用poi导入导出Excel文件 demo

    在本示例"SSM框架利用poi导入导出Excel文件 demo"中,我们将探讨如何在SSM项目中使用Apache POI库来实现Excel文件的导入与导出功能。 Apache POI是一个流行的开源库,它允许开发者在Java应用程序中创建、修改和显示...

    apache poi根据模板导出excel的模版

    apache poi根据模板导出excel的模版

    poi导出excel生成下拉列表

    poi作为导出excel常用的工具,方便快捷。对于excel指定下拉列表的列,如何生成呢?本文提供如何生成下拉列表的excel列

    根据POI直接导出Excel,Pdf

    基于poi基础进行开发的一个到处excel,pdf公共类,可以对于列表格式的数据直接导出,不需要更改里面的代码,只需要提供参数就可以,参数类型String filePath ,String fileName, List listDate ,List listTop

    poi_模板导出excel,支持百万级数据模板导出

    poi导入、导出,支持百万级数据模板导出、合并excel。项目为spring-boot-2上开发。resource里面有模板,在junit测试类中修改为本地存在路径即可导出文件,在junit测试类中修改for循环的i可以模拟百万级数据导出。注意...

    poi导入导出excel功能

    导出Excel功能则涉及创建新的Excel文件并填充数据。同样,我们需要创建`Workbook`,然后添加`Sheet`,接着在`Sheet`上创建`Row`和`Cell`。例如,以下代码展示了如何创建一个简单的Excel表格: ```java import org....

    poi 基于excel模板导出功能

    四、导出Excel文件 1. 写入输出流:创建FileOutputStream,将填充好的工作簿写入到输出流中。 ```java FileOutputStream out = new FileOutputStream("output.xlsx"); workbook.write(out); out.close(); ``` 2. ...

    POI实现的基于动态模板的EXCEL数据导出

    标题中的“POI实现的基于动态模板的EXCEL数据导出”是指利用Apache POI库来创建一个可以动态填充数据的Excel模板,从而实现大量数据的高效导出。Apache POI是一个开源项目,它允许Java开发者读写Microsoft Office...

    POI 导入导出Excel表格模板

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

    SpringBoot +Mybatis +POI导入、导出Excel文件

    - 在需要导出Excel的接口中,根据业务需求查询数据库中的数据,并转换为List集合。 - 创建一个新的Workbook对象,然后创建Sheet,再在Sheet中创建Row和Cell,填充数据。 - 设置样式、合并单元格等高级特性,使...

Global site tag (gtag.js) - Google Analytics