`

利用poi插件操作Excel

    博客分类:
  • java
 
阅读更多
我用过的操作Excel的插件有jxl和poi,其中jxl只对office 2007以前的版本提供支持,无法操作

office 2007及以后的版本。poi插件是apache 基金会的开源项目,对微软的office提供了很好的

支持。

下面以一组实例来说明poi如何操作Excel。
Constants.java
package com.utils;

/**
 * 程序中用到的一些常量
 * @author yangjianzhou
 *
 */
public class Constants {
	
	public static final String IN_FILE_PATH="WebRoot/readXLS";
	
	public static final String OUT_FILE_PATH="WebRoot/writeXLS";
	
	public static final String IN_FILE_PATH_MAX="WebRoot/readXLSMax";
	
	public static final String FILE_SUFFIX=".xls";

}



FileUtil.java
package com.utils;

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

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class FileUtil {

	/**
	 * 获取指定路径下的所有excel文件名
	 * @param filePath
	 * @return
	 */
	public List<String> getAllFileName(String filePath){

		File directory = new File(filePath);
		File [] files = directory.listFiles();
		List<String> fileNameList = new ArrayList<String>();
		for(int i =0;i<files.length;i++){
			int index = files[i].getName().indexOf(Constants.FILE_SUFFIX);
			if(index>=0){
				fileNameList.add(filePath+"/"+files[i].getName());
			}
		}
		return fileNameList;
	}

	/**
	 * 得到指定文件名的文件
	 * @param fileNameList
	 * @return
	 */
	public List<File> getAllFiles(List<String> fileNameList){

		List<File> fileList = new ArrayList<File>();
		for(int i =0;i<fileNameList.size();i++){
			File file = new File(fileNameList.get(i));
			fileList.add(file);
		}
		return fileList;
	}

	/**
	 * 读取指定文件,经过一些处理,并将数据写入一个新文件
	 * @param file
	 * @param filePath
	 */
	public void readAndWriteFile(File file,String filePath) {
		
		 FileInputStream fileInputStream = null;
		try{
		     fileInputStream = new FileInputStream(file);
		     XSSFWorkbook rXSSWorkbook = new XSSFWorkbook(fileInputStream);
		     
		     int sheetNumber = rXSSWorkbook.getNumberOfSheets();
		     
		     for(int i=0;i<sheetNumber;i++){
		    	 XSSFSheet rXSSFSheet = rXSSWorkbook.getSheetAt(i);
		    	 String  sheetName = rXSSFSheet.getSheetName();
		    	 System.out.println(sheetName);
		    	 int rowNumber = rXSSFSheet.getPhysicalNumberOfRows();
		    	 XSSFRow rXSSFRow0 = rXSSFSheet.getRow(0);
		    	 
		    	 XSSFWorkbook wXSSFWorkbook = new XSSFWorkbook();
		    	 XSSFSheet wSheet = wXSSFWorkbook.createSheet();
		    	 XSSFRow wXSSFRow0 = wSheet.createRow(0);
		    	 XSSFCell wXSSFCell0 = wXSSFRow0.createCell(0);
		    	 XSSFCell wXSSFCell1 = wXSSFRow0.createCell(1);
		    	 XSSFCell wXSSFCell2 = wXSSFRow0.createCell(2);
		    	 XSSFCell wXSSFCell3 = wXSSFRow0.createCell(3);
		    	 wXSSFCell0.setCellValue(rXSSFRow0.getCell(0).getStringCellValue());
		    	 wXSSFCell1.setCellValue("最大");
		    	 wXSSFCell2.setCellValue("平均");
		    	 wXSSFCell3.setCellValue("最小");
		    	 
		    	 int columnNumber = rXSSFRow0.getPhysicalNumberOfCells();
		    	 int count = (columnNumber-4)/3;
		    	 System.out.println(count);
		    	 
		    	 for(int j=1;j<rowNumber;j++){
		    		 XSSFRow rXSSFRowN = rXSSFSheet.getRow(j);
		    		 for(int n=1;n<=count;n++){
		    			 XSSFRow wXSSFRowN = wSheet.createRow((j-1)*count+n);
		    			XSSFCell wXSSFCellN0 =  wXSSFRowN.createCell(0);
		    			XSSFCell wXSSFCellN1 =  wXSSFRowN.createCell(1);
		    			XSSFCell wXSSFCellN2 =  wXSSFRowN.createCell(2);
		    			XSSFCell wXSSFCellN3 =  wXSSFRowN.createCell(3);
		    			System.out.println(rXSSFRowN.getCell(0).getStringCellValue()+(n-1)*5+"分");
		    			wXSSFCellN0.setCellValue(rXSSFRowN.getCell(0).getStringCellValue()+(n-1)*5+"分");
		    			wXSSFCellN1.setCellValue(rXSSFRowN.getCell((n-1)*3+1).getNumericCellValue());
		    			wXSSFCellN2.setCellValue(rXSSFRowN.getCell((n-1)*3+2).getNumericCellValue());
		    			wXSSFCellN3.setCellValue(rXSSFRowN.getCell((n-1)*3+3).getNumericCellValue());
		    		 }
		    	 }
		    	 
		    	 String fileName = file.getName().substring(0, file.getName().length()-4)+"---"+sheetName+Constants.FILE_SUFFIX;
		    	 OutputStream outputStream = new FileOutputStream(new File(filePath+"/"+fileName));
		    	 wXSSFWorkbook.write(outputStream);
		    	 outputStream.close();
			}
		     fileInputStream.close();
		}catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(fileInputStream!=null){
				try{
					fileInputStream.close();
				}catch (Exception e) {
					e.printStackTrace();
				}
			}
		}

	}
	
	public void readAndWriteFileMax(File file,String filePath){
		 FileInputStream fileInputStream = null;
			try{
			     fileInputStream = new FileInputStream(file);
			     XSSFWorkbook rXSSWorkbook = new XSSFWorkbook(fileInputStream);
			     
			     int sheetNumber = rXSSWorkbook.getNumberOfSheets();
			     
			     for(int i=0;i<sheetNumber;i++){
			    	 XSSFSheet rXSSFSheet = rXSSWorkbook.getSheetAt(i);
			    	 String  sheetName = rXSSFSheet.getSheetName();
			    	 int rowNumber = rXSSFSheet.getPhysicalNumberOfRows();
			    	 XSSFRow rXSSFRow0 = rXSSFSheet.getRow(0);
			    	 
			    	 XSSFWorkbook wXSSFWorkbook = new XSSFWorkbook();
			    	 XSSFSheet wSheet = wXSSFWorkbook.createSheet();
			    	 XSSFRow wXSSFRow0 = wSheet.createRow(0);
			    	 XSSFCell wXSSFCell0 = wXSSFRow0.createCell(0);
			    	 XSSFCell wXSSFCell1 = wXSSFRow0.createCell(1);
			    	 wXSSFCell0.setCellValue(rXSSFRow0.getCell(0).getStringCellValue());
			    	 wXSSFCell1.setCellValue("最大");
			    	 
			    	 int columnNumber = rXSSFRow0.getPhysicalNumberOfCells();
			    	 int count = columnNumber-4;
			    	 System.out.println(count);
			    	 
			    	 for(int j=1;j<rowNumber;j++){
			    		 XSSFRow rXSSFRowN = rXSSFSheet.getRow(j);
			    		 for(int n=1;n<=count;n++){
			    			XSSFRow wXSSFRowN = wSheet.createRow((j-1)*count+n);
			    			XSSFCell wXSSFCellN0 =  wXSSFRowN.createCell(0);
			    			XSSFCell wXSSFCellN1 =  wXSSFRowN.createCell(1);
			    			wXSSFCellN0.setCellValue(rXSSFRowN.getCell(0).getStringCellValue()+(n-1)*5+"分");
			    			wXSSFCellN1.setCellValue(rXSSFRowN.getCell(n).getNumericCellValue());
			    		 }
			    	 }
			    	 
			    	 String fileName = file.getName().substring(0, file.getName().length()-4)+"---"+sheetName+Constants.FILE_SUFFIX;
			    	 OutputStream outputStream = new FileOutputStream(new File(filePath+"/"+fileName));
			    	 wXSSFWorkbook.write(outputStream);
			    	 outputStream.close();
				}
			     fileInputStream.close();
			}catch (Exception e) {
				e.printStackTrace();
			}finally{
				if(fileInputStream!=null){
					try{
						fileInputStream.close();
					}catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
	}

}



Test.java
package com.test;

import java.io.File;
import java.io.IOException;
import java.util.List;

import com.utils.Constants;
import com.utils.FileUtil;

public class Test {
	
	public static void main(String[] args) throws IOException {
		
		FileUtil fu = new FileUtil();
		List<String> fileNameList  = fu.getAllFileName(Constants.IN_FILE_PATH);
		List<File> fileList = fu.getAllFiles(fileNameList);
		
		for(int i =0;i<fileList.size();i++){
			fu.readAndWriteFile(fileList.get(i), Constants.OUT_FILE_PATH);
		}
		
		List<String> fileNameListMax  = fu.getAllFileName(Constants.IN_FILE_PATH_MAX);
		List<File> fileListMax = fu.getAllFiles(fileNameListMax);
		
		for(int i =0;i<fileListMax.size();i++){
			fu.readAndWriteFileMax(fileListMax.get(i), Constants.OUT_FILE_PATH);
		}
		
	}
}



原始Excel文件



处理之后得到的Excel文件





  • 大小: 171.5 KB
  • 大小: 84.2 KB
分享到:
评论

相关推荐

    POI插件下载

    例如,在开发过程中,开发者可能需要频繁地读取或写入Excel文件,这时就可以利用POI插件来实现更高效的文件处理功能。常见的POI插件可以实现以下功能: - **快速读取Excel文件**:支持.xls和.xlsx两种格式。 - **...

    SpringMvc+POI 处理Excel的导入操作

    本文将详细介绍如何利用SpringMVC与Apache POI进行Excel文件的导入操作。 #### 二、技术栈 - **Java版本**:JDK 7 - **服务器**:Tomcat 7.x - **框架**:Spring 4.1.8 - **库**:Apache POI #### 三、关键概念与...

    百度POI爬取插件

    【百度POI爬取插件】是一款专门针对百度地图POI(Point of Interest,兴趣点)数据进行抓取和分析的工具。它可以帮助用户高效地获取到百度地图上的各种地理位置信息,如商家、餐馆、酒店等各类兴趣点的名称、地址、...

    jxls-poi导出excel示例代码文件

    通过学习和理解这些示例,你可以更好地掌握如何利用`jxls-poi`从JSON数据生成Excel文件。 总的来说,`jxls-poi`是Java开发者处理Excel数据的强大工具,尤其适用于需要频繁从后端生成定制化报表的场景。结合JSON数据...

    POI操作excel示例工具类.txt

    ### POI 操作 Excel 的基本概念与应用场景 **Apache POI** 是一个流行的 Java 库,用于读取、写入 Microsoft Office 格式的文件,如 Word(`.doc`)、Excel(`.xls` 和 `.xlsx`)等。在 Java 开发中,POI 库特别...

    SpringMvc+POI 导入Excel

    本项目是关于如何在SpringMvc中利用POI库来实现Excel文件的导入功能,这在数据录入、批量处理或数据分析场景中非常常见。 首先,我们需要理解SpringMvc中的控制器(Controller)如何接收文件上传请求。在描述中提到...

    利用poi+itextpdf进行word转pdf.rar

    在这个场景中,我们看到一个关于如何使用Java编程语言实现此功能的资源包:“利用poi+itextpdf进行word转pdf.rar”。这个压缩包包含源码、依赖库以及转换效果的示例,表明它提供了一种无需额外插件的解决方案。下面...

    NPOI.zip_.net 操作Excel利器_Npoi插件_excel_npoi

    NPOI是一个强大的.NET库,专门用于操作Microsoft Office文件,特别是Excel文档。它为开发者提供了一个方便、高效的接口,可以在不依赖Microsoft Office...利用NPOI,你可以更加专注于业务逻辑,而不是繁琐的文件操作。

    jquery学习资料+poi处理excel的教程

    结合这两个主题,你不仅可以利用jQuery在网页上动态地展示和处理Excel数据,还可以通过Apache POI在服务器端生成或读取Excel文件,进行数据交换。将这两者结合,可以构建出强大的Web应用程序,实现数据的上传、下载...

    poi实现表格导入插件

    本教程将重点讲解如何利用Apache POI来实现一个表格导入插件,特别是针对Excel文件的操作。 **一、Apache POI简介** Apache POI 提供了HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format)两个...

    报表技术POI&EasyPOI导入导出操作Excel、Word、CSV(讲义、源码、资料).zip

    1. **Excel操作**:Apache POI提供了HSSF(Horrible Spreadsheet Format)用于处理旧版的.xls格式,而XSSF(XML Spreadsheet Format)则用于.xlsx格式。通过这些API,你可以创建工作簿、工作表,插入单元格,设置...

    java插件,组件 读写Excel文件

    为了实现这个功能,我们可以利用各种库和插件。这里,我们将深入探讨如何使用Java插件和组件来读取和写入Excel文件。 首先,最常用的Java库之一是Apache POI。Apache POI是一个开源项目,提供了API来处理Microsoft ...

    java web在线预览pdf、word、excel

    本文将详细讲解如何利用Java Web技术实现这样的功能,主要涉及Maven构建工具、前端PDF插件以及后台SpringMVC框架的运用。 首先,我们需要理解Maven作为项目构建工具的角色。Maven是一个基于项目对象模型(Project ...

    spark-excel:一个用于通过Apache POI读取Excel文件的Spark插件

    这个插件是基于 Java 的 Apache POI 库构建的,POI 是一个流行的库,用于处理 Microsoft Office 格式,尤其是 Excel。 在 Scala 中使用 spark-excel 插件,可以极大地简化处理 Excel 数据的任务。首先,你需要将 ...

    POI上传或下载JAR包

    这里的描述可能是指利用POI库作为例子,展示如何进行文件处理,尽管POI不是处理JAR的标准工具。 在Java开发中,JAR(Java Archive)文件是用于打包类文件、资源和元数据的容器,通常用于分发和运行Java应用程序或库...

    报表技术POI导入导出复杂样式Excel和百万数据(Java代码).zip

    本文将深入探讨使用Apache POI库在Java环境中处理Excel文件,特别是涉及复杂样式和处理海量数据的场景。 Apache POI是Apache软件基金会的一个开源项目,主要为Microsoft Office格式提供读写支持,包括Excel、Word和...

    上传下载Excel的Demo,java代码

    4. 当需要下载时,从“t_student”表中查询数据,同样利用Apache POI生成Excel文件。 5. 将生成的Excel文件发送回给用户下载。 在实际应用中,还需要考虑性能优化、错误处理、安全性(防止SQL注入等)以及用户体验...

    Oracle-POI上传

    ### Oracle-POI上传:利用POI插件实现EXCEL与ORACLE的上传与下载 在实际工作中,经常需要将Excel文件中的数据批量导入到Oracle数据库中,这不仅可以提高工作效率,还能减少人为错误。Apache POI库是Java编程语言的...

Global site tag (gtag.js) - Google Analytics