重写jxl接口,定义属于自己的Excel表

虽然jxl源码很强大,但是源码没有具体的使用方法,所以学习和总结了下代码,做一个自己项目中使用到jxl来写出excel表一个汇总。

ExcelCreator .java接口

package ldqzju.gaduationproject.function;

import android.widget.ArrayAdapter;
import java.io.IOException;
import java.util.ArrayList;
import jxl.write.WritableCellFormat;
import jxl.write.WriteException;

/**
 * Created by Lin Dingqiang on 2017/5/13.
 */
public interface  ExcelCreator {
    /**
     * 创建Excel文件
     *
     * @param pathDir 文件夹地址
     * @param name    名字(不用带后缀,如果之后还要操作此文件,请使用英文或数字命名)
     * @return ZzExcelCreator
     * @throws IOException ex
     */
    MyECreator createExcel(String pathDir, String name) throws IOException;
    /**
     * 创建工作表
     *
     * @param name 工作表
     * @return ZzExcelCreator
     */

    MyECreator createSheet(String name);
    /**
     * 插入一个空列。
     *
     * @param position 目标位置
     * @return ZzExcelCreator
     */

    MyECreator insertColumn(int position);

    /**
     * 填充表格内容(字符串)
     *
         * @param col     列号
         * @param row     行号
         * @param content 要填充的内容
         * @param format  格式(默认时传null即可)
     * @return ZzExcelCreator
     * @throws WriteException ex
     */
    MyECreator fillContent(int col, int row, String content, WritableCellFormat format) throws WriteException;
    /**
     * 结束操作
     *
     * @throws IOException    ex
     * @throws WriteException ex
     */

    MyECreator fillAll(ArrayList<String> dataTitle,ArrayList<String> datas) throws WriteException;
    /**
     * 结束操作
     *
     * @throws IOException    ex
     * @throws WriteException ex
     */
    void close() throws IOException, WriteException;
}

MyECreator.java调用接口

package ldqzju.gaduationproject.function;

import java.io.IOException;

import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;

import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

/**
 * Created by Lin Dingqiang on 2017/5/13.
 */
public class MyECreator implements ExcelCreator {
    private static MyECreator creator;
    private WritableWorkbook writableWorkbook;
    private WritableSheet writableSheet;

    public static MyECreator getInstance() {
        if (creator == null) {
            synchronized (MyECreator.class) {
                if (creator == null) {
                    creator = new MyECreator();
                }
            }
        }
        return creator;
    }

    @Override
    public MyECreator createExcel(String pathDir, String name) throws IOException {
        File dir = new File(pathDir);
        if (!dir.exists())
            dir.mkdirs();
        writableWorkbook = Workbook.createWorkbook(new File(pathDir + File.separator + name + ".xls"));
        return this;
    }

    @Override
    public MyECreator createSheet(String name) {
        checkNullFirst();
        writableSheet = writableWorkbook.createSheet(name, 0);
        return this;
    }
    @Override
    public MyECreator fillContent(int col, int row, String content, WritableCellFormat format) throws WriteException {
        checkNullFirst();
        checkNullSecond();
        if (format == null)
            writableSheet.addCell(new Label(col, row, content));
        else
            writableSheet.addCell(new Label(col, row, content, format));
        return this;
    }

    @Override
    public MyECreator fillAll(ArrayList<String> dataTitle,ArrayList<String> datas) throws WriteException {
        int col = dataTitle.size();
        int row = datas.size()/col;
        checkNullFirst();
        checkNullSecond();
        for(int i=0;i<col;i++){
            writableSheet.addCell(new Label(i,0, dataTitle.get(i)));
        }
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                if(((i)*col+j)>(datas.size()-1)){
                    System.out.println("(i*col+j)" +(i*col+j));
                    return this;
                }
                else{
                    writableSheet.addCell(new Label(j, i+1, datas.get(i*col+j)));
                }
            }
        }
        return this;
    }

    @Override
    public MyECreator insertColumn(int position) {
        checkNullFirst();
        checkNullSecond();
        writableSheet.insertColumn(position);
        return this;
    }

    @Override
    public void close() throws IOException, WriteException {
        checkNullFirst();
        writableWorkbook.write();
        writableWorkbook.close();
        writableWorkbook = null;
        writableSheet = null;
    }
    private void checkNullFirst() {
        if (writableWorkbook == null) {
            throw new NullPointerException("writableWorkbook is null, please invoke the #createExcel(String, String) method or the #openExcel(File) method first.");
        }
    }
    private void checkNullSecond() {
        if (writableSheet == null) {
            throw new NullPointerException("writableSheet is null, please invoke the #createSheet(String) method or the #openSheet(int) method first.");
        }
    }
    public static Intent getExcelFileIntent(File file)
    {
        Intent intent = new Intent("android.intent.action.VIEW");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        Uri uri = Uri.fromFile(file);
        intent.setDataAndType(uri, "application/vnd.ms-excel");
        return intent;
    }
}

实例化

MyECreator.getInstance()
          .createExcel(PATH, excelName)  //生成excel文件
          .createSheet("MyFac")        //生成sheet工作表                                                   
          .fillAll(dataTitle,dataContent)                                     
          .close();                                       

强调
本文章主要是对该源码的学习,所以如果希望获取更多原滋原味代码,移步,阅览原源码。
有什么问题需要讨论的,也希望大家留言,编程小白,学习中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值