关于java用POI操作excel的一个问题 本帖最后由 lostmarine 于 2011-02-25 15:23:43 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该能改吧。我想帮你做一个。我还特地的研究了一下,但是jar我没有找到。又快下班了,所以我给你一个地址你自己研究一下。http://apps.hi.baidu.com/share/detail/22473132 //我用的是用于97-2003版的HSSF,构造函数接收的参加是FileInputStream对象.//下面的程序是用一个原有的文件生成一个新的.当然,如果对原有的文件修改后//将FileOutputStream设置为原有文件的路径,是可以更新原有文件的,我用过很多次了import java.io.*;import org.apache.poi.hssf.usermodel.*;public class Test{ public static void main(String[] args)throws IOException { File file=new File("6-8.xls"); FileInputStream fis=new FileInputStream(file); HSSFWorkbook workbook=new HSSFWorkbook(fis); fis.close(); FileOutputStream fos=new FileOutputStream(new File("Copy.xls")); workbook.write(fos); fos.close(); }} 不知道你的XSSFWorkbook 哪里来的,jxl?public class POIModify { public static void main(String[] args) throws FileNotFoundException, IOException { String fileName= "c:\\a.xls"; POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fileName)); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFSheet sheet = wb.getSheetAt(0); int rows = sheet.getPhysicalNumberOfRows(); HSSFRow row = sheet.getRow((short)0); HSSFCell cel = row.getCell((short)0); cel.setCellValue("1111"); FileOutputStream out = new FileOutputStream("c:\\a.xls"); wb.write(out); out.close(); }} 周六周日没上网,今天回来继续补充一下先补充下代码吧,是用POI操作excel2007 String fileName = "d:/test.xlsx";//这个excel中本身是有内容的 XSSFWorkbook xfw = new XSSFWorkbook(fileName);//这里我怀疑后台打开了一个流 XSSFSheet sheet = xfw.getSheetAt(1); //修改某个单元格的值 sheet.getRow(0).createCell(5).setCellValue("test"); //这里是读取操作,经过试验,是可以读取数据的 //以下代码,如果加上的话,原来的excel就会被修改成1kb,而且无法打开,如果不加的话,单元格是不会被修改的。 FileOutputStream fos = new FileOutputStream(fileName) ; xfw.write(fos); fos.flush(); fos.close();经过试验发现:如果我生成一个新文件,那么是没有问题的,但是输出流还定位到老文件上,就出问题了。我又试了一下new File().delete() 和new File().renameTo() 来删除老文件,改名新文件,但是修改失败,方法返回false。根据我的分析,应该是XSSFWorkbook xfw = new XSSFWorkbook(fileName);这句代码,打开了一个输入流,但是没有关闭。我找了这个对象的方法,也没有发现关闭流的方法。还有什么其他思路么?JXL的话,貌似不支持2007 获取xfw里的字节,关闭xfw,然后再用fos写,试试看 图片加载问题…… java泛化问题 怎么用Java 表示二维的点(新手) 求助:C和JAVA之间字符串的转化问题 问一个显示9*9的乘法口诀表的代码 请教一个 SQL 中的Connection转好写法。 没分了帮个忙!svg图片总出现“单击以激活并使用此控件”怎么解决啊 如何从pem格式的私钥文件中读取私钥 情急,请教,帮忙! 如何成为优秀的程序员 java求助,关于读写文件的 新手菜鸟 关于三目运算
//下面的程序是用一个原有的文件生成一个新的.当然,如果对原有的文件修改后
//将FileOutputStream设置为原有文件的路径,是可以更新原有文件的,我用过很多次了
import java.io.*;
import org.apache.poi.hssf.usermodel.*;
public class Test
{
public static void main(String[] args)throws IOException
{
File file=new File("6-8.xls");
FileInputStream fis=new FileInputStream(file);
HSSFWorkbook workbook=new HSSFWorkbook(fis);
fis.close();
FileOutputStream fos=new FileOutputStream(new File("Copy.xls"));
workbook.write(fos);
fos.close();
}
}
public static void main(String[] args) throws FileNotFoundException, IOException {
String fileName= "c:\\a.xls";
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fileName));
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
int rows = sheet.getPhysicalNumberOfRows();
HSSFRow row = sheet.getRow((short)0);
HSSFCell cel = row.getCell((short)0);
cel.setCellValue("1111");
FileOutputStream out = new FileOutputStream("c:\\a.xls");
wb.write(out);
out.close();
}
}
先补充下代码吧,是用POI操作excel2007 String fileName = "d:/test.xlsx";//这个excel中本身是有内容的
XSSFWorkbook xfw = new XSSFWorkbook(fileName);//这里我怀疑后台打开了一个流
XSSFSheet sheet = xfw.getSheetAt(1);
//修改某个单元格的值
sheet.getRow(0).createCell(5).setCellValue("test");
//这里是读取操作,经过试验,是可以读取数据的
//以下代码,如果加上的话,原来的excel就会被修改成1kb,而且无法打开,如果不加的话,单元格是不会被修改的。
FileOutputStream fos = new FileOutputStream(fileName) ;
xfw.write(fos);
fos.flush();
fos.close();经过试验发现:如果我生成一个新文件,那么是没有问题的,但是输出流还定位到老文件上,就出问题了。我又试了一下new File().delete() 和new File().renameTo() 来删除老文件,改名新文件,但是修改失败,方法返回false。根据我的分析,应该是XSSFWorkbook xfw = new XSSFWorkbook(fileName);这句代码,打开了一个输入流,但是没有关闭。我找了这个对象的方法,也没有发现关闭流的方法。
还有什么其他思路么?JXL的话,貌似不支持2007