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