使用jxl.jar进行Excel操作将实例属性存入表中
发布日期:2022-02-26 00:17:49 浏览次数:7 分类:技术文章

本文共 3436 字,大约阅读时间需要 11 分钟。

功能:需要将一个实例存入一个指定的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
{ private Context mContext; private List
list; private ArrayList
mArrayList = new ArrayList
(); private ProgressDialog pdialog; public ExcelWriteTask(Context mContext, List
list) { super(); this.mContext = mContext; this.list = list; mArrayList = new ArrayList
(); 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("/mnt/sdcard/" + sheetName + d + ".xls");
如果需要将实例的属性名添加在表中第一行,要在创建Workbook时将sheet创建好再将属性名添加到第一行,添加属性值的时候从第二行开始添加。

效果图:

转载地址:https://blog.csdn.net/TnTlittlefish/article/details/52171705 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:android:APK混淆中proguard.cfg/proguard-project.text脚本文件的编写知识
下一篇:自定义控件:not using the 2- or 3-argument View constructors

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月16日 02时50分54秒