论坛首页 Java企业应用论坛

jxl读写excel

浏览 5476 次
锁定老帖子 主题:jxl读写excel
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-02-05  

最近在搞报表类的东西,天天接触的最多的就是word或者excel,以前也常做,为了避免以后忘掉,因此还是记录下来最好。使用jxl这个组件来操作excel非常的方便,将它的一些基本操作写下来,希望对同样搞这方面的朋友有帮助!

jxl读取excel代码

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class ExcelImporter
{

	/**
	 * @Function     //函数、方法名称
	 * @Description  //测试excell表格
	 * @Input        //输入参数的说明
	 * @Output       //输出参数的说明
	 * @Return       //函数返回值的说明
	 * @Others       //其它说明
	 */
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		List<String> list = new ArrayList<String>();
		String filePath = "C:/sinye.xls";
		InputStream fs = null;
	                Workbook workBook = null;
	    
	    try {
	        // 加载excel文件
	        fs = new FileInputStream(filePath);
	        // 得到 workbook
	            workBook = Workbook.getWorkbook(fs);
	       } catch (FileNotFoundException e) {
	    	   e.printStackTrace();
	       } catch (BiffException e) {
	    	   e.printStackTrace();
	       } catch (IOException e) {
	    	   e.printStackTrace();
	       }
 
	          // 取得sheet,如果你的workbook里有多个sheet 可以利用 wb.getSheets()方法来得到所有的。
	       // getSheets() 方法返回 Sheet[] 数组 然后利用数组来操作。就是多次循环的事。
	       Sheet sheet = workBook.getSheet(0);//这里只取得第一个sheet的值,默认从0开始
	       System.out.println(sheet.getColumns());//查看sheet的列
	       System.out.println(sheet.getRows());//查看sheet的行
	       Cell cell = null;//就是单个单元格
	       // 开始循环,取得 cell 里的内容,这里都是按String来取的 为了省事,具体你自己可以按实际类型来取。或者都按
	       // String来取。然后根据你需要强制转换一下。
	       for (int j = 0; j < sheet.getColumns(); j++) {
	    	   	StringBuffer sb =  new StringBuffer();
		        for (int i = 0; i < sheet.getRows(); i++) {
		        	cell = sheet.getCell(j, i);
		        	sb.append(cell.getContents());
		        	sb.append(",");//将单元格的每行内容用逗号隔开
		        }
		        list.add(sb.toString());//将每行的字符串用一个String类型的集合保存。
	       }
	       workBook.close();//记得关闭
	       
	      //迭代集合查看每行的数据
	      for(String ss:list){
	    	  System.out.println(ss);
	      }
	}

}

 接下来,就是写excel了,见代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class JxlWriteExcel {
    
    /**
     * @param datas 封装着Object[]的列表, 一般是String内容.
     * @param title 每个sheet里的标题.
     */
    public void writeExcel(OutputStream out, List list, String[] title) {
        if(list == null) {
            throw new IllegalArgumentException("要写入excel的数据不能为空!");
        }
        try {
            WritableWorkbook workbook = Workbook.createWorkbook(out);
            WritableSheet ws = workbook.createSheet("sheet 1", 0);//创建sheet
            int rowNum = 0;    //要写的行,jxl操作excel时,第一行是从0开始,以此类推
            if(title != null) {
                putRow(ws, 0, title);//压入标题
                rowNum = 1;
            }
            for(int i=0; i<list.size(); i++, rowNum++) {//写sheet
                Object[] cells = (Object[]) list.get(i);
                putRow(ws, rowNum, cells);    //压一行到sheet
            }
            workbook.write();
            workbook.close();    //一定要关闭, 否则没有保存Excel
        } catch (RowsExceededException e) {
            System.out.println("jxl write RowsExceededException: "+e.getMessage());
        } catch (WriteException e) {
            System.out.println("jxl write WriteException: "+e.getMessage());
        } catch (IOException e) {
            System.out.println("jxl write file i/o exception!, cause by: "+e.getMessage());
        }
    }

    private void putRow(WritableSheet ws, int rowNum, Object[] cells) throws RowsExceededException, WriteException {
        for(int j=0; j<cells.length; j++) {//写一行
            Label cell = new Label(j, rowNum, ""+cells[j]);
            ws.addCell(cell);
        }
    }
    
}

 调用写excel的测试代码

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
            public static void main(String[] args) {
	// TODO Auto-generated method stub
	List list = new ArrayList();
	//组装写入excel的数据
        for(int i=0;i<10;i++){
        	String[] data = {"开心"+i,"2"+i};
        	list.add(data);
        }
        try {
            OutputStream out = new FileOutputStream(new File("c:\\sinye.xls"));
            JxlWriteExcel jxlExcelWriter = new JxlWriteExcel();
            jxlExcelWriter.writeExcel(out, list, new String[] {"姓名", "年龄"});
            out.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 记得在你的编译环境下放置jxl.jar文件啊!

 

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics