java修改Excel

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java修改Excel相关的知识,希望对你有一定的参考价值。

通过JAVA修改一个Excel中的一个单元格,使用Xssfwork消耗内存太多。
求其他方式解决
修改已经存在的一个EXCEL,里面是有业务数据的。
Excel2007以后的版本。xlsx格式的

package common.util;

import jxl.*;
import jxl.format.UnderlineStyle;
import jxl.write.*;
import jxl.write.Number;
import jxl.write.Boolean;

import java.io.*;

/**
* Created by IntelliJ IDEA.
* User: xl
* Date: 2005-7-17
* Time: 9:33:22
* To change this template use File | Settings | File Templates.
*/
public class ExcelHandle

public ExcelHandle()



/**
* 读取Excel
*
* @param filePath
*/
public static void readExcel(String filePath)

try

InputStream is = new FileInputStream(filePath);
Workbook rwb = Workbook.getWorkbook(is);
//Sheet st = rwb.getSheet("0")这里有两种方法获取sheet表,1为名字,而为下标,从0开始
Sheet st = rwb.getSheet("original");
Cell c00 = st.getCell(0,0);
//通用的获取cell值的方式,返回字符串
String strc00 = c00.getContents();
//获得cell具体类型值的方式
if(c00.getType() == CellType.LABEL)

LabelCell labelc00 = (LabelCell)c00;
strc00 = labelc00.getString();

//输出
System.out.println(strc00);
//关闭
rwb.close();

catch(Exception e)

e.printStackTrace();



/**
* 输出Excel
*
* @param os
*/
public static void writeExcel(OutputStream os)

try

/**
* 只能通过API提供的工厂方法来创建Workbook,而不能使用WritableWorkbook的构造函数,
* 因为类WritableWorkbook的构造函数为protected类型
* method(1)直接从目标文件中读取WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));
* method(2)如下实例所示 将WritableWorkbook直接写入到输出流

*/
WritableWorkbook wwb = Workbook.createWorkbook(os);
//创建Excel工作表 指定名称和位置
WritableSheet ws = wwb.createSheet("Test Sheet 1",0);

//**************往工作表中添加数据*****************

//1.添加Label对象
Label label = new Label(0,0,"this is a label test");
ws.addCell(label);

//添加带有字型Formatting对象
WritableFont wf = new WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,true);
WritableCellFormat wcf = new WritableCellFormat(wf);
Label labelcf = new Label(1,0,"this is a label test",wcf);
ws.addCell(labelcf);

//添加带有字体颜色的Formatting对象
WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,
UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED);
WritableCellFormat wcfFC = new WritableCellFormat(wfc);
Label labelCF = new Label(1,0,"This is a Label Cell",wcfFC);
ws.addCell(labelCF);

//2.添加Number对象
Number labelN = new Number(0,1,3.1415926);
ws.addCell(labelN);

//添加带有formatting的Number对象
NumberFormat nf = new NumberFormat("#.##");
WritableCellFormat wcfN = new WritableCellFormat(nf);
Number labelNF = new jxl.write.Number(1,1,3.1415926,wcfN);
ws.addCell(labelNF);

//3.添加Boolean对象
Boolean labelB = new jxl.write.Boolean(0,2,false);
ws.addCell(labelB);

//4.添加DateTime对象
jxl.write.DateTime labelDT = new jxl.write.DateTime(0,3,new java.util.Date());
ws.addCell(labelDT);

//添加带有formatting的DateFormat对象
DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss");
WritableCellFormat wcfDF = new WritableCellFormat(df);
DateTime labelDTF = new DateTime(1,3,new java.util.Date(),wcfDF);
ws.addCell(labelDTF);

//添加图片对象,jxl只支持png格式图片
File image = new File("f:\\2.png");
WritableImage wimage = new WritableImage(0,1,2,2,image);
ws.addImage(wimage);
//写入工作表
wwb.write();
wwb.close();

catch(Exception e)

e.printStackTrace();



/**
* 拷贝后,进行修改,其中file1为被copy对象,file2为修改后创建的对象
* 尽单元格原有的格式化修饰是不能去掉的,我们还是可以将新的单元格修饰加上去,
* 以使单元格的内容以不同的形式表现
* @param file1
* @param file2
*/
public static void modifyExcel(File file1,File file2)

try

Workbook rwb = Workbook.getWorkbook(file1);
WritableWorkbook wwb = Workbook.createWorkbook(file2,rwb);//copy
WritableSheet ws = wwb.getSheet(0);
WritableCell wc = ws.getWritableCell(0,0);
//判断单元格的类型,做出相应的转换
if(wc.getType == CellType.LABEL)

Label label = (Label)wc;
label.setString("The value has been modified");

wwb.write();
wwb.close();
rwb.close();

catch(Exception e)

e.printStackTrace();



//测试
public static void main(String[] args)

try

//读Excel
ExcelHandle.readExcel("f:/testRead.xls");
//输出Excel
File fileWrite = new File("f:/testWrite.xls");
fileWrite.createNewFile();
OutputStream os = new FileOutputStream(fileWrite);
ExcelHandle.writeExcel(os);
//修改Excel
ExcelHandle.modifyExcel(new file(""),new File(""));

catch(Exception e)

e.printStackTrace();


参考技术A 给你个我以前写的小例子好了
怎么也得改改才好用,是用的jxl的库,你可以从网上下载一个jxl.jar导到你的项目里
看看它的API有不少例子,好像是韩国人写的写点小东西还好有BUG,大项目的话用apache的POI

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

public class exportEXL
String fileName= "F:\\NumberProcessed.xls";
String sheetName ="sheet";
private int location = 1;

public void ExportFile(int[] arr) throws WriteException, IOException
WritableWorkbook wwb = null;

//字体设置,全部参数集中于format变量中
WritableFont wf = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false);
DisplayFormat displayFormat = NumberFormats.INTEGER;
WritableCellFormat format = new WritableCellFormat(wf,displayFormat);
format.setAlignment(jxl.format.Alignment.RIGHT);
format.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.NONE);
try
// 创建可写入的工作簿对象
wwb = Workbook.createWorkbook(new File(fileName));
if (wwb != null)
// 在工作簿里创建可写入的工作表,第一个参数为工作表名,第二个参数为该工作表的所在位置
WritableSheet ws = wwb.createSheet(sheetName, location);
if (ws != null)
/* 添加表结构 */
for(int j =1;j<=93;j++)
for(int i=0;i<arr.length;i++)

//number参数中第一个参数是列,从零开始
//第二个参数是行,从零开始,此程序中每隔75行重复一次
jxl.write.Number number = new jxl.write.Number(0,
i+(j-1)*arr.length,
Integer.parseInt(Integer.toString(arr[i])),format);
//写入单元格
ws.addCell(number);
arr[i] = arr[i]+500;







// 从内存中写入到文件
wwb.write();
System.out.println("路径为:" + fileName + "的工作簿写入数据成功!");

catch (Exception e)
System.out.println(e.getMessage());
finally
wwb.close();


参考技术B

给你个我以前写的小例子好了

怎么也得改改才好用,是用的jxl的库,你可以从网上下载一个jxl.jar导到你的项目里

看看它的API有不少例子,好像是韩国人写的写点小东西还好有BUG,大项目的话用apache的POI


public class exportEXL 
    String fileName= "F:\\\\NumberProcessed.xls";
    String sheetName ="sheet";
    private int location = 1;
     
    public void ExportFile(int[] arr) throws WriteException, IOException
          WritableWorkbook wwb = null;    
           
          //字体设置,全部参数集中于format变量中
          WritableFont wf = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false);
          DisplayFormat displayFormat = NumberFormats.INTEGER;
          WritableCellFormat format = new WritableCellFormat(wf,displayFormat);
          format.setAlignment(jxl.format.Alignment.RIGHT);
          format.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.NONE); 
          try   
// 创建可写入的工作簿对象  
                wwb = Workbook.createWorkbook(new File(fileName));  
                if (wwb != null)   
// 在工作簿里创建可写入的工作表,第一个参数为工作表名,第二个参数为该工作表的所在位置  
                WritableSheet ws = wwb.createSheet(sheetName, location);  
                if (ws != null)   
                /* 添加表结构 */
                for(int j =1;j<=93;j++)                      
                    for(int i=0;i<arr.length;i++)
                        
                    //number参数中第一个参数是列,从零开始
                    //第二个参数是行,从零开始,此程序中每隔75行重复一次
                    jxl.write.Number number = new jxl.write.Number(0, 
                    i+(j-1)*arr.length, 
                    Integer.parseInt(Integer.toString(arr[i])),format);
                    //写入单元格
                    ws.addCell(number);
                    arr[i] = arr[i]+500;
                                     
                                
                            
                         
                        
  
                          
                        // 从内存中写入到文件  
         wwb.write();  
         System.out.println("路径为:" + fileName + "的工作簿写入数据成功!");  
                 
             catch (Exception e)   
                System.out.println(e.getMessage());  
             finally   
                wwb.close();  
             
    

追问

首先谢谢你了
我现在要修改的文件类型是2007以后版本的,xlsx格式的
jxl好像不支持了吧

参考技术C JNA 、jacob调用excel、再修改追问

恩,这种是调用windows的com组件,还有其他方式么?

java 使用jxl poi 操作excel

java操作excel  创建、修改 xls 文件

JAVA操作Excel文件

Java生成和操作Excel文件

 

java导出Excel通用方法

以上是关于java修改Excel的主要内容,如果未能解决你的问题,请参考以下文章

Excel JAVA 读取代码POI Excel Reader 修改补充

java poi操作Excel文件 生成的Excel文件为里面的内容为只读,不可以修改其内容。求解答。

Java使用jxl修改现有Excel文件内容,并验证其是否对公式的结果产生影响

Java读取excel表格

java用poi修改2007版excel指定行和列的值,值必须要用搜索才能看到,显示不出来!急!求解

怎么用java poi 修改word里面所有重复文字的字体颜色