根据jxl.jar包操作excel表格

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

import java.io.*;


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表,一是表名,二是下标(从0开始)
            Sheet st = rwb.getSheet("Sheet1");
            Cell c00 = st.getCell(3,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:\\1.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(2,1);
            //判断单元格的类型,做出相应的转换
            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:\\ceshi.xls");
            //输出Excel
//            File fileWrite = new File("F:\\ceshi3.xls");
//            fileWrite.createNewFile();
//            OutputStream os = new FileOutputStream(fileWrite);
//            ExcelHandle.writeExcel(os);
            //修改Excel
//            ExcelHandle.modifyExcel(new File("F:\\ceshi.xls"),new File("F:\\ceshi2.xls"));
        }
        catch(Exception e)
        {
           e.printStackTrace();
        }
    }
}


实战:http://bbs.csdn.net/topics/390331520?page=1

解决方法:先把excel中的每一行数据封装成一个对象,存放到一个ArrayList集合,再用个hashMap集合把每行的id,对象当成键值对存起来,修改excel表格时根据map.get(list.get(i).getParentId())获取到该行的父类对象,从而获取到父类对象的产品名,再写入表格


import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;


public class ExcelHandleDemo
{
 private static Map map=new HashMap();
 
    publicExcelHandleDemo()
    {
    }
   
 private static List getClothesList(StringfilePath) {
  List list = newArrayList();
       try
        {
            InputStream is = new FileInputStream(filePath);
            Workbook rwb = Workbook.getWorkbook(is);
            Sheet st = rwb.getSheet("Sheet1");
            for(int i=1;i
             String[] str = new String[5];
             for(int j=0;j
              Cell c = st.getCell(j,i);
                    //通用的获取cell值的方式,返回字符串
              str[j] = c.getContents();
              //System.out.println("getCell("+j+","+i+")"+" "+c.getContents());
             }
             Clothes clothes=new Clothes();
             clothes.setId(str[0]);
             clothes.setParentName(str[1]);
             clothes.setProductName(str[2]);
             clothes.setParentId(str[3]);
             list.add(clothes);
             map.put(str[0],clothes);
            }
            rwb.close();
 
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
  return list;
 }


    publicstatic void modifyExcel(File file1,File file2,List list)
    {
       try
       {
           Workbook rwb = Workbook.getWorkbook(file1);
           WritableWorkbook wwb =Workbook.createWorkbook(file2,rwb);//copy
           WritableSheet ws = wwb.getSheet(0);
           for(int i=1;i
            Clothesclo=map.get(list.get(i).getParentId());
            WritableCell wc =null;
            if(clo!=null){
             wc =ws.getWritableCell(1,i+1);
                   if(wc.getType() == CellType.EMPTY){
                       Label label=new Label(1,i+1,clo.getProductName());
                       ws.addCell(label);
                   }
                 
           }
           
           
           
           wwb.write();
           wwb.close();
           rwb.close();
       }
       catch(Exception e)
       {
           e.printStackTrace();
       }
    }


    //测试
    publicstatic void main(String[] args)
    {
       try
       {
        List list =ExcelHandleDemo.getClothesList("F:\\ceshi.xls");
//        for(Clothes clo : list){
//         System.out.println(clo.getId()+""+clo.getProductName());
//        }
        ExcelHandleDemo.modifyExcel(newFile("F:\\ceshi.xls"),new File("F:\\ceshi.xls"),list);
       }
       catch(Exception e)
       {
          e.printStackTrace();
       }
    }

}


public class Clothes {
 private String id;
 private String productName;
 private String parentId;
 private String parentName;
 public Clothes() {
 }
 public Clothes(String id, String parentId, StringparentName,
   StringproductName) {
  super();
  this.id = id;
  this.parentId = parentId;
  this.parentName =parentName;
  this.productName =productName;
 }
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getProductName() {
  return productName;
 }
 public void setProductName(String productName){
  this.productName =productName;
 }
 public String getParentId() {
  return parentId;
 }
 public void setParentId(String parentId) {
  this.parentId = parentId;
 }
 public String getParentName() {
  return parentName;
 }
 public void setParentName(String parentName){
  this.parentName =parentName;
 }
 
}

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值