`
wuhaidong
  • 浏览: 349747 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

JXL方式读取Excel

    博客分类:
  • SE
 
阅读更多

 

 

/*
 * Classname: 
 * Version information: 
 * Creator: chenjian
 * Create Date: 2007-3-21下午06:00:23
 * Copyright notice: 
 */
package nc.ui.fch.bg.t80303;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import jxl.Cell;
import jxl.CellType;
import jxl.Workbook;
import jxl.format.CellFormat;
import jxl.read.biff.BiffException;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

/**
 * 功能说明:
 * 
 * @author chenjian 2007-3-21 下午06:00:22
 */
public class WriteDataToExcel {

        /**
         * 
         */
        public WriteDataToExcel() {
                // TODO Auto-generated constructor stub
        }

        /**
         * 功能: 向Excel里写数据
         * 
         * @param sourceFile
         *            从服务器下载下来的源文件
         * @param newFile
         *            copy源文件得到的新文件,用于写入数据
         * @throws Exception
         * @author chenjian 2007-3-22 上午11:20:12
         */
        public static void writeData(String sourceFile, String newFile,
                        ArrayList arr) {

                Workbook wb = null;
                WritableWorkbook wwb = null;
                WritableSheet wsB = null;
                try {
                        // 创建只读的Excel工作薄的对象
                        wb = Workbook.getWorkbook(new File(sourceFile));
                        // copy上面的Excel工作薄,创建新的可写入的Excel工作薄对象
                        wwb = Workbook.createWorkbook(new File(newFile), wb);
                        // 读取工作表--(注:工作表索引从0开始)
                        wsB = wwb.getSheet(0);
                        // 循环插入数据
                        for (int i = 0; i < arr.size(); i++) {
                                ArrayList rowArr = (ArrayList) arr.get(i);
                                for (int j = 0; j < rowArr.size(); j++) {
                                        WritableCell wc = null;
                                        // 以第一行所有的列为模板,
                                        wc = wsB.getWritableCell(j, 1);
                                        WritableCellFormat wcFormat = null;
                                        if (wc.getCellFormat() != null) {
                                                // 获得源单元格格式
                                                wcFormat = new WritableCellFormat(wc.getCellFormat());
                                        } else {
                                                wcFormat = new WritableCellFormat();
                                        }
                                        wc = cloneCellWithValue(j, i + 1, rowArr.get(j),wcFormat );
                                        wsB.addCell(wc);
                                }
                        }
                        // 写入Excel对象
                        wwb.write();
                } catch (BiffException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (RowsExceededException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (WriteException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } finally {
                        // 关闭可写入的Excel对象
                        try {
                                if (null != wwb)
                                        wwb.close();
                        } catch (Exception e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                        // 关闭只读的Excel对象
                        if (null != wb)
                                wb.close();
                }

        }

        /**
         *TODO功能 复制模板单元格的类型,并判断插入数据的类型,进行写入数据 Administrator maoyulong 2007-4-9
         * 下午03:52:04
         * 
         * @param col
         * @param row
         * @param value
         * @param wcFormat
         * @return
         */
        public static WritableCell cloneCellWithValue(int col, int row,
                        Object value, WritableCellFormat wcFormat) {
                WritableCell wc = null;
                // 判断数据是否为STRING类型,是用LABLE形式插入,否则用NUMBER形式插入
                if(value == null){
                        wc = new jxl.write.Blank(col, row, wcFormat);
                }
                else if (value instanceof String) {
                        jxl.write.Label label = new jxl.write.Label(col, row, value
                                        .toString(), wcFormat);
                        wc = label;
                } 
                else {
                        wc = new jxl.write.Number(col, row, new Double(value.toString())
                        .doubleValue(), wcFormat);
                }
                return wc;
        }
        
        /**
         * 功能:
         * 
         * @param args
         * @author chenjian 2007-3-21 下午06:00:23
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                try {
                        ArrayList q = new ArrayList();
                        ArrayList w = new ArrayList();
                        w.add("===");
                        w.add(new Double(10.00));
                        q.add(w);

                        new WriteDataToExcel().writeData("C:\\bgttemplet\\wbs.xls",
                                        "C:\\bgtreport\\wbs.xls", q);
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }

}
 

 

一 JXL读日期 会把 “2009-09-09” 读为 “09-09-09”
使用以下方法解决
        private String dateFromExcel(Cell cell) {
                String data = cell.getContents();
                if (data.toString().trim().equals("")) {
                        return null;
                }
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                if (cell.getType() == CellType.DATE) {
                        DateCell dc = (DateCell) cell;
                        data = sdf.format(dc.getDate());
                } else {
                        data = data.toString().trim();
                }
                return data;
        }
 

 

 

 

package com.jxl.study;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class JXLUtil {
        private static Workbook workbook;
        private static WritableWorkbook writableWorkbook;

        /**
         * 功能:
         * <p>
         * 打印出Excel表里的全部内容
         * </p>
         * 
         * @param Excel
         *            所在的绝对路径
         */
        public static void readXLS(String filePatch) {
                if (!filePatch.endsWith(".xls")) {
                        System.out.println("=======不是正确的xls格式,请核查==========");
                        return;
                }// end if
                File file = new File(filePatch);

                // 文件只读
                file.setReadOnly();
                try {
                        // 得到Excel文件
                        workbook = Workbook.getWorkbook(file);

                        // Excel中的工作表 下表从0开始
                        Sheet sheet = workbook.getSheet(0);
                        int row = sheet.getRows(); // 工作表共有的行
                        for (int i = 0; i < row; i++) {
                                Cell[] cells = sheet.getRow(i); // 拿一行的内容
                                for (int j = 0; j < cells.length; j++) {
                                        System.out.print(cells[j].getContents() + "          ");
                                }
                                System.out.println();
                        }

                } catch (BiffException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                } finally {
                        if (workbook != null) {
                                workbook.close();
                        }
                }

                // 还原文件状态
                file.canWrite();

        }// end function

        /**
         * 功能:
         * <p>
         * 项Excel文件里写入内容
         * </p>
         * 
         * @param Excel文件的绝对路径
         */
        public static void writeJxl(String filePatch) {
                if (!filePatch.endsWith(".xls")) {
                        System.out.println("=======不是正确的xls格式,请核查==========");
                        return;
                }// end if

                try {
                        OutputStream os = new FileOutputStream(filePatch);
                        // 创建可写簿
                        writableWorkbook = Workbook.createWorkbook(os);
                        // 创建工作表
                        WritableSheet ws = writableWorkbook.createSheet("sheet", 0);
                        // 创建一个内容 第一个整数为 列,第二个整数位 行
                        Label label;
                        for (int i = 0; i < 10; i++) {
                                for (int j = 0; j < 10; j++) {
                                        if (i == 0 && j == 0) {
                                                label = new Label(i, j, "");
                                        } else if (j == 0) {
                                                label = new Label(i, j, "第" + (i + 1) + "列");
                                        } else if (i == 0) {
                                                label = new Label(i, j, "第" + (j + 1) + "行");
                                        } else {
                                                label = new Label(i, j, "内容:" + i + "," + j);
                                        }
                                        ws.addCell(label);
                                }
                        }

                        writableWorkbook.write();
                        writableWorkbook.close();
                        os.close();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (RowsExceededException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (WriteException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } finally {
                        
                }

        }

        public static void main(String[] args) {
                writeJxl("c:\\2.xls");
        }
}
分享到:
评论
1 楼 linbaoli 2014-04-13  

相关推荐

Global site tag (gtag.js) - Google Analytics