【POI】修改Excel内容

package com.what21.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
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.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class TestPoi {
	public static void updateExcel(File exlFile, String sheetName, int col,
			int row, String value) throws Exception {
		FileInputStream fis = new FileInputStream(exlFile);
		HSSFWorkbook workbook = new HSSFWorkbook(fis);
		// workbook.
		HSSFSheet sheet = workbook.getSheet(sheetName);
		HSSFCell mycell = sheet.createRow(row).createCell(col);
		mycell.setCellValue(value);
		HSSFRow r = sheet.getRow(row);
		HSSFCell cell = r.getCell(col);
		// int type=cell.getCellType();
		String str1 = cell.getStringCellValue();
		// 这里假设对应单元格原来的类型也是String类型
		cell.setCellValue(value);
		System.out.println("单元格原来值为" + str1);
		System.out.println("单元格值被更新为" + value);

		fis.close();// 关闭文件输入流

		FileOutputStream fos = new FileOutputStream(exlFile);
		workbook.write(fos);
		fos.close();// 关闭文件输出流
	}

	public static void update2(String url) {
		int coloum = 2; // 比如你要获取第1列
		try {
			HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(url));
			HSSFSheet sheet = workbook.getSheet("Sheet1");

			for (int i = 0; i <= sheet.getLastRowNum(); i++) {
				HSSFRow row = sheet.getRow((short) i);
				if (null == row) {
					continue;
				} else {
					HSSFCell cell = row.getCell((short) coloum);
					if (null == cell) {
						continue;
					} else {

						cell.setCellValue("he1");
					}
				}
			}
			FileOutputStream out = null;
			try {
				out = new FileOutputStream(url);
				workbook.write(out);
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static boolean writeXlsx(String fileName, int row, int column,
			String content) {
		boolean flag = false;
		FileOutputStream out = null;
		XSSFWorkbook xwb;
		try {
			xwb = new XSSFWorkbook(new FileInputStream(fileName));
			XSSFSheet xSheet = xwb.getSheetAt(0);
			XSSFCell xCell = xSheet.createRow(row).createCell(column);
			xCell.setCellValue(content);
			out = new FileOutputStream(fileName);
			xwb.write(out);
			out.close();
			flag = true;
		} catch (IOException e) {
			e.printStackTrace();
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
		return flag;
	}

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		// 下面改成你自己的xls文件进行测试,2003格式的,不能2007
		File file = new File("C:\\Users\\Administrator\\Desktop\\test.xls");
		// 下面尝试更改第一行第一列的单元格的值
		updateExcel(file, "Sheet1", 0, 0, "hehe");
		update2("C:\\Users\\Administrator\\Desktop\\test.xls");
		File file1 = new File(
				"C:\\Users\\Administrator\\Desktop\\test - 副本.xlsx");
		writeXlsx("C:\\Users\\Administrator\\Desktop\\test - 副本.xlsx", 0, 0,
				"1");
	}
}

  注意事项:如果修改的坐标对应的单元格是空,会报错。

  建议这么写:

  HSSFCell mycell = sheet.createRow(row).createCell(col);
  mycell.setCellValue(value);

  这样写有一个问题:如果定位错误,会带来不必要的麻烦。

  通常在生成原始Excel时,最好能对空单元格赋空(强制添加空字符串),这样在使用SAXPOI或者SAX解析较大文本的Excel的时候,可以

有效的避免因为空单元格而导致列数据错位的问题。

  上面的代码是很常见的,在网上能找到一堆。根据不同的场景可以传入一组需要修改的坐标,通过循环来修改。这样可以减少打开文件的次数,提高

效率。

时间: 2024-10-09 23:14:59

【POI】修改Excel内容的相关文章

POI读取Excel内容格式化

在用POI读取Excel内容时,经常会遇到数据格式化的问题. 比如:数字12365会变为12365.0;字符串数字123也会变为123.0,甚至会被变为科学计数法.另外日期格式化也是一个头疼的问题.其实最希望的方式是Excel是什么,那POI取出来就是什么,不要搞任何转换. 网上搜罗各种格式化方式后,找到最满意的一种: import org.apache.poi.hssf.usermodel.HSSFDataFormatter; import org.apache.poi.hssf.usermo

Java修改excel内容

java 通过poi修改excel数据的实例网上一大把,但是用的时候却可能遇到问题,我把我经过测试,成功的代码分享给大家,也给自己做一个记录,留着以后用. 本实例是操作excel2010的程序 代码如下: import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Collection; import java.util.HashMap; import java.util.Iterator;

poi读取excel内容

第一.引入包,这里使用的的是maven,其他工具自己百度. <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId&g

使用POI修改Excel后进行保存

public void writer_Excel(String sSheetName,int iRow,String sColumn,String Data)  {             InputStream is=null;         OutputStream os=null;         iRow=iRow-1;         try{             is=new FileInputStream(file);                     workbook

POI根据EXCEL模板,修改内容导出新EXCEL (只支持HSSF)

package excelPoiTest; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.p

JAVA修改excel的内容

package com.bestpay.bpbp.bill.init; /** * Created by Qj on 2015/08/17. */ import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import java.io.File; /** * Created by Qj on 2015/08/03. */ publi

java中使用poi导出excel表格数据并且可以手动修改导出路径

在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下 jar包下载路径:http://download.csdn.net/download/pumpkin09/7077011 第二步:添加poi导出工具类 1 package com.yjd.admin.util; 2 3 import java.io.IOException; 4 import ja

POI导出EXCEL经典实现

在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下.(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^) 呵呵,首先我们来导出EXCEL格式的文件吧.现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI.这里我们用Apache POI!我们先去Apach

POI组件:POI操作Excel

1.Excel简介 一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组成,列用大写英文字母表示,从A开始到Z共26列,然后再从AA到AZ又26列,再从BA到BZ再26列以此类推.行则使用数字表示,例如:A3 表示第三行第一列,E5表示第五行第五列. 2.POI工具包 POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现&qu