java实现在同一Excel文件上写数据

原创 2016年09月05日 20:00:14

最近分析Facebook登陆请求,为了找出请求体中表单里的参数的规律,我打算做一个统计分析,把每次登陆hook到的数据都记录在excel里。

网上已经有了许多教程,但实际按他们的步骤,还是遇到了许多蛋疼的问题。

这里,我只是研究了如何去在已用文件的基础上,添加新内容而已,至于怎么读,我就不写那么全了。

那么,问题就来了:写内容不是很简单吗?确实很简单,但达不到我的预期而已。


首先,第一个问题,如何在原有数据的excel文件上写入?官网对于在原有数据上添加数据是这么处理的:


他们并没有提供openWorkbook这样的操作,而是只有createWorkbook,也就是新建,而且是要在已有工作簿的情况下,将旧的工作薄内容复制到新的文件去。

我也不明白为什么要这么弄,若按上面的方法,基本的写法如下:

WritableWorkbook wwb=Workbook.createWorkbook(new File("new"), Workbook.getWorkbook(new File("old")));  
也就是说,我弄个新文件,去承接旧文件的东西。。。。

那么,我就是不想新建一个文件,在原来的文件上添加能不?答案是可以的~

很简单,就是把新旧文件都指向同一个文件就可以了,比如,我的excel在桌面上:

            File file=new File("C:\\Users\\Administrator\\Desktop\\facebook.xls");
            WritableWorkbook wwb=Workbook.createWorkbook(file, Workbook.getWorkbook(file)); 


想法很好,但实际运行起来,另外一个问题又出来了。

因为我是直接在桌面上新建一个TXT文档,然后重命名为facebook.xls的,所以抛出找不到文件的异常。


这是由于新建的TXT文件,手动更改后缀名.xls,虽然显示是excel的图标,但文件实际格式却不是excel格式的。


那么,如果是这样的话,电脑不是装有excel吗?对,我们可以在桌面上右键“新建文件-->新建office excel”,或者直接进入Excel,新建一个空白文件,然后保存到桌面即可。

BUT...问题又来了,还是抛出了异常:


这个问题其实就是Excel版本的问题了,我这里的jxl.jar包只是支持Excel2003的,但电脑的是Excel2007的,jxl的接口并不支持2007的操作。

其实2007的文件新建后,其后缀名为 .xlsx,即使你把“x”去掉变成“xls”,但其实里面的格式还是2007的,所以jxl接口还是无法识别。

那么,我不想换成Excel2003,但又不想用POI包(Apache POI包,支持Excel2007的操作)有没有办法?可以有!利用代码创建一个2003的xls文件:

        	//导出到桌面,若是Android系统,路径可以写成“/sdcard/facebook.xls”
            File file=new File("C:\\Users\\Administrator\\Desktop\\facebook.xls");
            if(!file.exists()){
            	//file.createNewFile();
            	//判断是否存在xls文件,若没有则新建,并创建一个默认表单sheet1,不要用上面的creatNewFile()
            	wwb=Workbook.createWorkbook(new FileOutputStream(file));
            	wwb.createSheet("sheet", 0);
            	wwb.write();
            	wwb.close();
            }
这里注意两点,一是不要用File的createNewFile(),这和手动创建TXT,改后缀为.xls没分别,是没用的,二是需在里面创建一个默认表单sheet,不然会报错。


以上三点细节真的耗了我不少时间,丫的~~

下面贴出一个Demo吧:

public class ExcelExport {

	//URL格式的数据,直接从HttpEntity上面获取到的原始数据,格式为key=value&key=value,,,
	public static String data="name=Elizabeth&gender=female&email=143941234@qq.com&password=123456&birthday=1993-02-01";
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		exportExcel(data);
	}

    public static void exportExcel(String dataString){
        WritableWorkbook wwb=null;
        try{
        	//导出到桌面,若是Android系统,路径可以写成“/sdcard/facebook.xls”
            File file=new File("C:\\Users\\Administrator\\Desktop\\facebook.xls");
            if(!file.exists()){
            	//file.createNewFile();
            	//判断是否存在xls文件,若没有则新建,并创建一个默认表单sheet1,不要用上面的creatNewFile()
            	wwb=Workbook.createWorkbook(new FileOutputStream(file));
            	wwb.createSheet("sheet", 0);
            	wwb.write();
            	wwb.close();
            }
            
            //为了实现覆盖写入,即可以在原有数据上叠加,需要用到以下方法实例化WritableWorkbook
            wwb=Workbook.createWorkbook(file, Workbook.getWorkbook(file));           
            
            if(wwb==null) return;
	        
        	//获取名为“data" 的表单
            WritableSheet sheet=wwb.getSheet("data");
            //若是第一次运行,则表单为null,需要初始化,即在表格第一行设置好数据data的标题
            if(sheet==null){
            	//若表单不存在,则新建名字为“data”的表单,参数“0”是索引,表示第一个
                sheet=wwb.createSheet("data", 0);
                
                //创建Label,一个Label相当于一个单元格,参数1:列索引; 参数2:行索引; 参数3:内容。
                Label name=new Label(0, 0, "name");               
                Label gender=new Label(1, 0, "gender");
                Label email=new Label(2, 0, "email");
                Label password=new Label(3, 0, "password");
                Label birthday=new Label(4, 0, "birthday");
                
                sheet.addCell(name);
                sheet.addCell(gender);
                sheet.addCell(email);
                sheet.addCell(password);
                sheet.addCell(birthday);
            }

            //获取当前的表单已用行数,然后在下一行进行写数据,避免覆盖
            int currentRow=sheet.getRows();
            //将URL格式的数据,利用split函数分割成单个数据,并填写到表单上
            String[] datas=createRegisterRequestDatas(dataString);
            for(int i=0; i<datas.length; i++){
                Label cell=new Label(i, currentRow, datas[i]);
                sheet.addCell(cell);
            }
            //调用write函数,将数据写到workbook上
            wwb.write();        	
	        
        }catch(Exception e){
        	e.printStackTrace();
        }finally {
        	try {
        		//最后需要把workbook关掉,避免浪费资源
				wwb.close();
			} catch (WriteException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

    }

    //将URL格式的参数分割成一个个单元数据
    public static String[] createRegisterRequestDatas(String dataString){
        String[] keyValuePairs=dataString.split("&");
        String[] datas=new String[keyValuePairs.length];
        for(int i=0; i<keyValuePairs.length; i++){
            if(keyValuePairs[i].split("=").length==2){
                datas[i]=keyValuePairs[i].split("=")[1];
            }else{
                datas[i]="";
            }
        }
        return datas;
    }
}

运行结果:













版权声明:本文为博主原创文章,未经博主允许不得转载。

Java读取、写入、处理Excel文件中的数据

原文链接 在日常工作中,我们常常会进行文件读写操作,除去我们最常用的纯文本文件读写,更多时候我们需要对Excel中的数据进行读取操作,本文将介绍Excel读写的常用方法,希望对大家学习Jav...

Java 读取excel指定行列数据以及将数据保存到txt文件中

在使用的软件中经常要用到一些数据的导入导出,以及准确的定位数据,这些经常会涉及excle表格,因此把今天学习到的关于如何利用Java准确获取到excle中的某一列数据,同时将此列数据输出到txt文件格...

java poi技术操作excel之写Excel(向Excel中写入值)

写值到Excel:import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; i...

简单实现利用java将数据写入到excel

今天面试问到,用java实现将数据库的类容做成excel表; 自己回来研究了一下,参考别人代码,写了一个小demoimport com.bdqn.demo.model.entity.User; im...

Java读写Excel

Java读写Excel 工作中经常需要对Excel进行读写操作,java操作excel文件比较流行的是apache poi包,excel分为xls(2003)和xlsx(2007)两种格式,操作...

java写excel

废话不说,直接上代码 package com.pzoom.xiaochen.excel; import java.io.OutputStream; import java.util.ArrayLi...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

使用JAVA读取和写入EXCEL文件

首先要下载 poi包和jxl包 读取部分: import java.io.BufferedInputStream; import java.io.File; import java.io.File...

Java读写Excel文件(Java Excel API)

下载地址:http://www.andykhan.com/jexcelapi/download.html
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java实现在同一Excel文件上写数据
举报原因:
原因补充:

(最多只允许输入30个字)