`
Mybeautiful
  • 浏览: 299013 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

使用POI操作Excel的代码

阅读更多

    经常会碰到把数据存到excel的需求,虽然使用POI写起来确实不算复杂,但每次都写近乎一样的代码有点烦躁,下面是我经常用到的代码,满足一般的要求,高级的excel操作没有用到,不过应该已经满足了大部分的要求。

 

需引入的jar包如下,

poi-2.5.1-final-20040804.jar

poi-contrib-2.5.1-final-20040804.jar

poi-scratchpad-2.5.1-final-20040804.jar

 

1. Excel类,代表一个Excel对象,里面可以包含很多sheet, 已经相关必要方法,

 

package stony.zhang.excel;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class Excel {

	private boolean override;
	private String file;
	HSSFWorkbook wb = new HSSFWorkbook();
	List<ExcelSheet> sheets = new ArrayList<ExcelSheet>();

	private HSSFCellStyle titleStyle;
	/**
	 * file, the file with the full path, If can't find,then new one.
	 * 
	 * @param file
	 */
	public Excel(String file) {
		this(file, false);
	}

	public Excel(String file, boolean override) {
		this.file = file;
		this.override = override;
		File f=new File(file);
		if (override) {
			// delete the exsited one
		}
		try {
			if(f.exists()){
				wb= new HSSFWorkbook(new FileInputStream(file));
			}else{
				wb= new HSSFWorkbook();
			}
			titleStyle = wb.createCellStyle();
			HSSFFont titleFont = wb.createFont();
//			titleFont.setColor(HSSFFont.COLOR_RED);
			titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
			titleStyle.setFont(titleFont);
			
			// create the Excel file.
			int num=wb.getNumberOfSheets();
			for (int i = 0; i < num; i++) {
				HSSFSheet sheet = wb.getSheetAt(i);
				String name=wb.getSheetName(i);
				sheets.add(new ExcelSheet(name,sheet,titleStyle));
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * @author Stony Zhang
	 * @date Feb 23, 2009
	 * @param sheetName
	 *            If can't find the sheet, new one.
	 * @return
	 */
	public ExcelSheet getSheet(String sheetName) {
		for (ExcelSheet esh : this.sheets) {
			if (esh.getName().equalsIgnoreCase(sheetName)) {
				return esh;
			}
		}
		HSSFSheet sheet = wb.createSheet(sheetName);
		return new ExcelSheet(sheetName, sheet,titleStyle);
	}

	public void save() {
		try {
			FileOutputStream fileOut = new FileOutputStream(file);
			wb.write(fileOut);
			fileOut.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	
	public static void main(String[] argv){
		Excel ex=new Excel("E:/test.xls");
		ExcelSheet esh=ex.getSheet("log");
		esh.setHeader(new String[]{"User","Table Name","Database","Action Type","Opration Time"});
		esh.addRecord(new String[]{"aa","bb","cc","dd","ee"});
		ex.save();
	}

}

 

2.ExcelSheet类,代表一个具体sheet.

package stony.zhang.excel;
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;

	/**
	 * @author Stony Zhang
	 * @date Feb 23, 2009
	 * @return
	 */
public class ExcelSheet {
	private HSSFSheet sheet;

	private String name;

	private String[] header;

	private HSSFCellStyle titleStyle;

	public ExcelSheet(String sheetName, HSSFSheet sh) {
		this.name = sheetName;
		this.sheet = sh;
		sheet.setDisplayGridlines(true);
	}
	
	public ExcelSheet(String sheetName, HSSFSheet sh,HSSFCellStyle titleStyle) {
		this.name = sheetName;
		this.sheet = sh;
		this.titleStyle=titleStyle;
	}

	// public ExcelSheet(){
	// this(name);
	// }

	public void addRecord(String[] record) {
		if(header!=null){
			if(header.length!=record.length){
				return;
			}
		}
		
		fillContent(record,sheet.getLastRowNum()+1,null);
		
	}

	public String[] getHeader() {
		return this.header;
	}

	public void setHeader(String[] header) {
		this.header=header;
		fillContent(header,0,this.titleStyle);
	}

	private void fillContent(String[] crow, int rowNum, HSSFCellStyle style) {
		HSSFRow row = sheet.createRow((short) rowNum);
         
		for (int i = 0; i < crow.length; i++) {
			String s = crow[i];
			HSSFCell cell = row.createCell((short) i);
			if(style!=null){
				cell.setCellStyle(style);
			}
			cell.setEncoding(HSSFCell.ENCODING_UTF_16);
			cell.setCellValue(s);
		}
	}
	
	public void setValue(int rowNum,int colNum,String value){
		HSSFRow row=this.sheet.getRow(rowNum);
		HSSFCell cell=row.getCell((short)colNum);
		if (cell==null){
			 cell = row.createCell((short) colNum);
		}
		cell.setEncoding(HSSFCell.ENCODING_UTF_16);
		cell.setCellValue(value);
	}

	public String getName() {
		// TODO Auto-generated method stub
		return this.name;
	}

	public void addRecord(ArrayList<String[]> arr) {
		for (String[] row : arr) {
			this.addRecord(row);
		}
		
	}
	
	public List<String[]> getRecords(){
		ArrayList<String[]> vs=new ArrayList<String[]>();
		for (int j = 0; j < this.sheet.getLastRowNum(); j++) {
			HSSFRow row=this.sheet.getRow(j);
			ArrayList<String> cellsStr = new ArrayList<String>();
			for (short k = 0; k < row.getLastCellNum(); k++) {
				HSSFCell cell=row.getCell(k);
				if(cell!=null){
					cellsStr.add(cell.getStringCellValue());
				}
			}
			System.out.println("row=" + j + " values=" + cellsStr.toArray(new String[0]));
			vs.add(cellsStr.toArray(new String[0]));
		}
		
		return vs;
	}

	public List<String> getAllValuesOfColum(short i) {
		ArrayList<String> vs=new ArrayList<String>();
		for (int j = 1; j <= this.sheet.getLastRowNum(); j++) {
			HSSFRow row=this.sheet.getRow(j);
			HSSFCell cell=row.getCell(i);
			vs.add(cell.getStringCellValue());
		}
		return vs;
	}
	
	
}

 

 

   使用Excel类中Main方法可以测试一下,各个方法就不介绍了,都很简单。欢迎各位提出改进意见。

0
0
分享到:
评论

相关推荐

    poi 操作excel模板

    通过以上步骤,你可以使用Apache POI有效地操作Excel模板,并将数据填充到新生成的文件中。这在报表生成、数据分析、批量导出等方面非常实用。记得在实际项目中,还要处理异常、优化性能,比如使用缓冲流、避免频繁...

    POI 操作 Excel 代码,及架包,完整详细例子

    这个"POI操作Excel代码,及架包,完整详细例子"的资源包含了实现这一功能所需的全部组件。 首先,我们要了解HSSF和XSSF。HSSF是POI项目中的一个子项目,用于处理老版的Excel文件格式(.xls),即BIFF8格式。而XSSF...

    JAVA POI导出EXCEL代码

    在Java开发中,我们经常使用POI库来处理Excel数据,如读取、写入和修改Excel文件。本篇文章将详细介绍如何使用JAVA POI导出Excel。 一、准备工作 在开始编写代码前,确保已经添加了Apache POI库到项目的依赖管理中...

    POI生成Excel POI操作Excel POI读取Excel POI类库

    Apache POI是一个强大的Java库,专门用于处理...通过lib.rar和Poi02.rar中的示例代码,你可以更深入地了解和学习POI操作Excel的具体实现。在实践中,结合这些资源,你将能够熟练地在Java Web项目中集成Excel处理功能。

    POI操作Excel完美生成水印

    2. **使用Apache POI加载Excel**:然后,使用POI的HSSFWorkbook或XSSFWorkbook类打开Excel文件。根据你的Excel文件类型,选择对应的API。例如,如果你正在处理的是.xlsx文件,那么应该使用XSSFWorkbook。 3. **插入...

    POI操作Excel的封装

    在封装POI操作Excel的过程中,反射可能被用来动态地创建对象,调用方法,或访问私有成员,这使得代码更具灵活性和可扩展性。例如,可以使用反射动态地根据Excel工作表的列名创建对应的Java对象属性,或者在不知道...

    java 通过poi操作excel jar包

    标题中的"java通过poi操作excel jar包"指的是使用Apache POI库来处理Excel文件的Java程序,通常需要引入特定版本的POI JAR包。在这个案例中,我们有两个版本的JAR包可供使用:poi_3.17.jar和poi_3.15.jar。这些版本...

    java的poi生成excel图表demo

    Java的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,尤其是Excel(.xlsx)文档。...这个压缩包中的“EexcelChart”可能是示例代码、测试数据或生成的Excel文件,供用户参考和实践。

    poi 操作excel案例 直接运行 适合参考

    标题中的“poi操作excel案例”指的是使用Apache POI库来处理Excel文件的示例项目。Apache POI是一个开源的Java库,它允许开发者创建、修改和显示Microsoft Office格式的文件,包括Excel工作簿(XLS和XLSX)。在这个...

    使用POI向Excel模板动态添加内容

    在IT行业中,Apache POI是一个广泛使用的库,它允许开发者在Java环境中创建、修改和读取Microsoft Office格式的文件,尤其是Excel文档。本教程将详细讲解如何利用Apache POI库来实现“使用POI向Excel模板动态添加...

    poi操作excel的Demo

    这个"poi操作excel的Demo"很可能是提供了一个使用Apache POI库来读取、写入或修改Excel文件的示例代码。下面将详细介绍Apache POI在处理Excel时的一些关键知识点。 1. **Apache POI概述**: Apache POI 是Java平台...

    poi操作excel java源代码分享

    poi操作excel java源代码分享

    使用poi从数据库导出excel表的示例

    可能包含了数据库连接的配置、SQL查询的测试、POI操作Excel的单元测试等。 在实际应用中,我们还需要考虑性能优化,比如使用PreparedStatement防止SQL注入,批量插入数据以减少数据库交互次数,以及合理设置内存...

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

    总结,Apache POI提供了一套完整的API,使得在Java中操作Excel文件变得简单。通过循环读取数据和应用模板,我们可以快速生成大量定制化的Excel报告。在"poiDemo2"这个示例中,你可以找到具体实现这些步骤的代码,...

    poi操作excel表格导入和导出

    在“poi操作excel表格导入和导出”这个主题中,我们将深入探讨如何利用Apache POI进行Excel数据的处理,包括导入和导出。 一、Apache POI简介 Apache POI是一个开源项目,它提供了API来处理Microsoft Office格式的...

    POI操作excel的java源代码与所需要的jar包poi3.0.1

    在"POI操作excel的java源代码与所需要的jar包poi3.0.1"中,我们聚焦于使用Apache POI 3.0.1版本来创建和读取Excel文件。这个压缩包包含以下内容: 1. `poi-3.0.1-FINAL-20070705.jar`:这是Apache POI的核心库文件...

    poi操作excel

    在IT行业中,Apache POI是一个广泛使用的库,它允许开发者使用Java来...以上就是关于"poi操作excel"的详细解释,包括使用SpringBoot、MyBatis和MySQL实现Excel的上传下载功能。希望这个知识体系能对你的项目有所帮助。

    poi读写excel+poi总结

    在本文中,我们将深入探讨如何使用POI进行Excel的读写操作,并进行总结。 1. POI基本概念 Apache POI 提供了HSSF(Horrible Spreadsheet Format)用于读写旧版的.xls格式的Excel文件,而XSSF则用于处理.xlsx格式的...

    Apache poi 操作 excel 文件压缩包

    5. **poi-examples**: 包含了使用Apache POI API的示例代码,可以帮助开发者理解如何实际操作Excel文件。 6. **poi-excelant**: 提供了用于构建和执行Ant任务的工具,这些任务与Excel操作有关,例如创建或处理Excel...

    java poi 操作Excel

    下面将详细介绍如何使用Java POI来操作Excel以及相关的知识点。 1. **基本概念** - HSSF(Horrible Spreadsheet Format):这是POI库处理Excel 97-2003(.xls)格式的部分。HSSF提供了一套API,可以创建、修改和...

Global site tag (gtag.js) - Google Analytics