使用jxl.jar进行Excel操作将实例属性存入表中

功能:需要将一个实例存入一个指定的Excel表中。

要求:只需要调用一个方法,传入一个实例就可实现。

思路:存入要使用异步操作,要自定义一个Task,重写对应实体的构造方法,在doInBackground中将实例的各个属性值存入对应的Excel表中。

实现步骤:

1.准备好实体,写好实体的构造函数及get/set方法;

2.定义一个Task继承AsyncTask;

2.1定义一个内部类,用于接收实例的属性及在Excel表中的行列值;

2.2重写对应实例的构造函数;

2.3定义将实例属性与对应行列值生成ArrayList<CurCell>的方法;

2.4在doInBackground中执行方法将实例的各个属性值存入对应的Excel表中。

重点:存入对应的Excel表中的方法

1.判断指定路径文件是否存在,如果不存在则新建。

File file = new File("/mnt/sdcard/"+sheetName+".xls");
if (!file.exists()) 
{// EXL文件不存在,新建
	file.createNewFile();
}

2.获取Workbook,创建sheet,sheetName为表头,0为表的位置。

WritableWorkbook mWorkbook = Workbook.createWorkbook(file);  
WritableSheet mSheet = mWorkbook.createSheet(sheetName, 0);  

3.遍历生成的ArrayList<CurCell> 赋值给Label,Label指表格中的单元格。

for(CurCell mCurCell : mArrayList){  
                Label mLabel = new Label(mCurCell.col, mCurCell.row, mCurCell.content);  
                mSheet.addCell(mLabel);  
            }  

4.Sheet获取完Label之后调用Workbook的方法写入表中。

mWorkbook.write(); 
5.结束,释放资源。

mWorkbook.close(); 

完整代码:

public class ExcelWriteTask extends AsyncTask<String, String, String> {

	private Context mContext;
	private List<Community> list;
	private ArrayList<CurCell> mArrayList = new ArrayList<CurCell>(); 
	private ProgressDialog pdialog;
	 
	
	public ExcelWriteTask(Context mContext, List<Community> list) {
		super();
		this.mContext = mContext;
		this.list = list;
		mArrayList = new ArrayList<CurCell>();
		for (int i = 0; i < list.size(); i++) {
			Community community = list.get(i);
			for (int j = 0; j < 3; j++) {
				CurCell cell = new CurCell();
				cell.row = i;
				cell.col = j;
				cell.content = community.getProperty(j);
				mArrayList.add(cell);
			}
					
		}
	}

	@Override
	protected void onPreExecute() {
		// TODO Auto-generated method stub
		super.onPreExecute();
		 pdialog = ProgressDialog.show(mContext, "正在写入Excel...", "正在请求....");
	}

	@Override
	protected String doInBackground(String... params) {
		// TODO Auto-generated method stub
		WriteExcel(params[0]);
		return null;
	}
	
	@Override
	protected void onProgressUpdate(String... values) {
		// TODO Auto-generated method stub
		super.onProgressUpdate(values);
		pdialog.setMessage(values[0]);
	}
	
	@Override
	protected void onPostExecute(String result) {
		// TODO Auto-generated method stub
		super.onPostExecute(result);
		Toast.makeText(mContext, "写入Excel数据完成!请到SD卡根目录下查看", Toast.LENGTH_LONG).show();
		pdialog.dismiss();
	}

	private void WriteExcel(String sheetName){  
        try {  
        	File file = new File("/mnt/sdcard/" + sheetName + ".xls");
        	if (!file.exists()) {
				file.createNewFile();
			}
            WritableWorkbook mWorkbook = Workbook.createWorkbook(file);  
            WritableSheet mSheet = mWorkbook.createSheet(sheetName, 0);  
            for(CurCell mCurCell : mArrayList){  
                Label mLabel = new Label(mCurCell.col, mCurCell.row, mCurCell.content);  
                mSheet.addCell(mLabel);  
            }  
            mWorkbook.write();  
            mWorkbook.close();  
        } catch (RowsExceededException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (WriteException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  

	private class CurCell{  
        int row;  
        int col;  
        String content;  
    }  

}


其他:

创建表格有时会有命名要求,要求加入日期(XXXXX2016年1月1日.exl),一天一张表格,便于查找及保存,可以考虑SimpleDateFormat。

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
		Date now = new Date();
		String d = dateFormat.format(now);
获取系统日期后添加到表格名称XXXXX后面即可;

File file = new File(<span style="font-family: Arial, Helvetica, sans-serif;">"/mnt/sdcard/" + sheetName + d + ".xls"</span>);

如果需要将实例的属性名添加在表中第一行,要在创建Workbook时将sheet创建好再将属性名添加到第一行,添加属性值的时候从第二行开始添加。


效果图:







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值