文档章节

poi操作excel模板(excel2003,excel2007)

无聊的重复
 无聊的重复
发布于 2016/07/05 22:37
字数 420
阅读 61
收藏 0

同上一篇文章

模版:

修改后:

package com.poi.util;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.poi.model.Person;

public class ExcelUtil {
	private Workbook wb = null;
	private String templatePath;
	private int sheetIndex;
	private List<String> keyList=new ArrayList<String>();
	public ExcelUtil(String templatePath,int sheetIndex){
		this.templatePath=templatePath;
		this.sheetIndex=sheetIndex;
		try {
			InputStream inp = new FileInputStream(templatePath);
			if (templatePath.endsWith("xlsx")) {
				wb = new XSSFWorkbook(inp);
			} else {
				wb = new HSSFWorkbook(inp);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		getKeyList(sheetIndex);
		
	}
	private void getKeyList(int sheetIndex) {
		int columnNum = 0;
		Pattern pattern = Pattern.compile("%(.*?)%");
		Sheet sheet = wb.getSheetAt(sheetIndex);
		if (sheet.getRow(0) != null) {
			columnNum = sheet.getRow(0).getLastCellNum()
					- sheet.getRow(0).getFirstCellNum();
		}
		if (columnNum > 0) {
			Row row = sheet.getRow(1);
			for (int i = 0; i < columnNum; i++) {
				Cell cell = row.getCell(i, Row.CREATE_NULL_AS_BLANK);
				switch (cell.getCellType()) {
				case Cell.CELL_TYPE_STRING:
					String str = cell.getStringCellValue().trim();
					Matcher matcher = pattern.matcher(str);
					if (matcher.find()) {
						String key = matcher.group(1);
						keyList.add(key);
					}
					break;
				default:
					break;
				}
			}
		}
	}
	private List<String> getValue(Person person){
		List<String> valueList=new ArrayList<String>();
		for(String key:keyList){
			String value=person.getString(key);
			valueList.add(value);
		}
		return valueList;
	}
	public void createExcel(String newPath,List<Person> personList) {
		String[] path=newPath.split(".xls");
		if (templatePath.endsWith("xlsx")) {
			newPath=path[0]+".xlsx";
		}else{
			newPath=path[0]+".xls";
		}
		Sheet sheet=wb.getSheetAt(sheetIndex);
		try {
			for(int i=0;i<personList.size();i++){
				List<String> list=getValue(personList.get(i));
				Row row=sheet.createRow(i+1);
				for(int j=0;j<list.size();j++){
					String str=list.get(j);
					row.createCell(j).setCellValue(str);
				}
			}
			FileOutputStream fos = new FileOutputStream(newPath);
			wb.write(fos);
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

poi获取excel图片(excel2003,excel2007)

public static Map<String, PictureData> getExcelPic03(int sheetNum,
			HSSFSheet sheet, HSSFWorkbook workbook) {
		Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
		List<HSSFPictureData> pictures = workbook.getAllPictures();
		if (pictures.size() != 0) {
			for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) {
				HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();
				if (shape instanceof HSSFPicture) {
					HSSFPicture pic = (HSSFPicture) shape;
					int pictureIndex = pic.getPictureIndex() - 1;
					HSSFPictureData picData = pictures.get(pictureIndex);
					String picIndex = String.valueOf(sheetNum) + "_"
							+ String.valueOf(anchor.getRow1()) + "_"
							+ String.valueOf(anchor.getCol1());
					sheetIndexPicMap.put(picIndex, picData);
				}
			}
			return sheetIndexPicMap;
		} else {
			return null;
		}
	}

excel2007

public static Map<String, PictureData> getExcelPic07(int sheetNum,
			XSSFSheet sheet, XSSFWorkbook workbook) {
		Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();
		for (POIXMLDocumentPart dr : sheet.getRelations()) {
			if (dr instanceof XSSFDrawing) {
				XSSFDrawing drawing = (XSSFDrawing) dr;
				List<XSSFShape> shapes = drawing.getShapes();
				for (XSSFShape shape : shapes) {
					XSSFPicture pic = (XSSFPicture) shape;
					XSSFClientAnchor anchor = pic.getPreferredSize();
					CTMarker ctMarker = anchor.getFrom();
					String picIndex = String.valueOf(sheetNum) + "_"
							+ ctMarker.getRow() + "_" + ctMarker.getCol();
					sheetIndexPicMap.put(picIndex, pic.getPictureData());
				}
			}
		}
		return sheetIndexPicMap;
	}

 

© 著作权归作者所有

无聊的重复
粉丝 0
博文 3
码字总数 1520
作品 0
南京
程序员
私信 提问
POI - 读取Excel2003、Excel2007或更高级的兼容性问题

我们使用POI中的HSSFWorkbook来读取Excel数据。 上边代码,读取Excel2003(xls)的文件没问题,但是一旦读取的是Excel2007(xlsx)的文件,就会报异常:“The supplied data appears to be i...

技术小美
2017/11/14
0
0
Java POI读取Office excel (2003,2007)及相关jar包

poi-3.7-20101029.jar,下载地址:http://download.csdn.net/detail/evangel_z/4107089 geronimo-stax-api1.0spec-1.0.jar,下载地址:http://download.csdn.net/detail/evangel_z/4107083 x......

姚君
2014/04/17
2.3K
0
POI工具--POI读写大数据量EXCEL

另一篇文章http://www.cnblogs.com/tootwo2/p/8120053.html里面有xml的一些解释。 大数据量的excel一般都是.xlsx格式的,网上使用POI读写的例子比较多,但是很少提到读写非常大数据量的excel...

spinachgit
06/25
166
0
POI3.8和jxl读取Excel例子

这几天在弄java读excel的问题,以前用的是jxl.jar来读的,后来发现无法读取2007的,于是研究了一下POI,在网上下了最新版的poi-bin-3.8-beta5-20111217.zip,同时也参考了网上其它人写的代码...

Sandy_wu
2013/08/29
999
0
在C#中使用NPOI2.0操作Excel2003和Excel2007

http://blog.csdn.net/halym/article/details/9235823 在C#中使用NPOI2.0操作Excel2003和Excel2007 Excel2003: [csharp] view plaincopy #region Excel2003 /// <summary> /// 将Excel文件中......

KavenSu
2014/07/30
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

一套完整的软件开发流程是怎样的?

做什么事都需要一个流程,软件开发也不例外。 那么,一个软件从无到有到底是怎么开发的?一个软件产品的结果为什么是这样?为什么开发的速度不能再快一点。为什么程序员大多秃顶?他们有那么...

我想造火箭
6分钟前
1
0
漂亮思维导图怎样绘制?教你快速套用思维导图模板绘制d

用MindMaster软件绘制思维导图,会更加高效和美观!因为MindMaster是一款专业的思维导图软件,零基础经验的朋友花费5分钟时间就能掌握它的相关画法。以下是电脑软件思维导图画法的简单步骤。...

工具分享
8分钟前
2
0
SVN 装完了 但是再bin 下边没有svn.exe

bin中找不到svn.exe文件 找到你的安装包重新运行 选择modify

简小姐
8分钟前
1
0
linux 软链接与 硬链接的区别

软链接与硬链接的区别 1. 硬链接不会创建inode,即使用的inode都是一样的。软链接会创建新的inode。 2. 硬链接的访问属性和源文件一模一样,没有l的标识。软链接的访问属性写明了是l,且访问...

突突突酱
9分钟前
1
0
新特性解读 | MySQL 8.0.18 有权限控制的复制

原文:Replication with restricted privileges https://mysqlhighavailability.com/replication-with-restricted-privileges/ 作者:Pedro Figueiredo 翻译:管长龙 背景 MySQL 8.0.18 以前......

爱可生
18分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部