Android开发实现的导出数据库到Excel表格功能【附源码下载】

本文实例讲述了Android开发实现的导出数据库到Excel表格功能。分享给大家供大家参考,具体如下:

之前一直在电脑上用Excel表格记录家庭帐单,不久前重装系统不小心干掉了,伤心了好久,那可是我记了五年的帐单呀!这段时间用的是随手记,好用但是不太符合我的习惯,所以我自己写了一个小小的帐单记录APP,App小到只有一个Activity。当然更多的需求我正在研发中,呵呵!现在已经完成了把每天记录的数据保存到Sqilte数据库中,然后可以导出到excel表格。代码也是借助网上的一些资料写成的,代码也比较容易,只需要用到一个jxl.jar包,感谢网友的帮助。

贴上主要代码,再附上文件包:

MainActivity.java:

package com.ldm.familybill;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Environment;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.ldm.db.DBHelper;
import com.ldm.excel.ExcelUtils;
@SuppressLint("SimpleDateFormat")
public class MainActivity extends Activity implements OnClickListener {
  private EditText mFoodEdt;
  private EditText mArticlesEdt;
  private EditText mTrafficEdt;
  private EditText mTravelEdt;
  private EditText mClothesEdt;
  private EditText mDoctorEdt;
  private EditText mRenQingEdt;
  private EditText mBabyEdt;
  private EditText mLiveEdt;
  private EditText mOtherEdt;
  private EditText mRemarkEdt;
  private Button mSaveBtn;
  private File file;
  private String[] title = { "日期", "食物支出", "日用品项", "交通话费", "旅游出行", "穿着支出", "医疗保健", "人情客往", "宝宝专项", "房租水电", "其它支出", "备注说明" };
  private String[] saveData;
  private DBHelper mDbHelper;
  private ArrayList<ArrayList<String>>bill2List;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewsById();
    mDbHelper = new DBHelper(this);
    mDbHelper.open();
    bill2List=new ArrayList<ArrayList<String>>();
  }
  private void findViewsById() {
    mFoodEdt = (EditText) findViewById(R.id.family_bill_food_edt);
    mArticlesEdt = (EditText) findViewById(R.id.family_bill_articles_edt);
    mTrafficEdt = (EditText) findViewById(R.id.family_bill_traffic_edt);
    mTravelEdt = (EditText) findViewById(R.id.family_bill_travel_edt);
    mClothesEdt = (EditText) findViewById(R.id.family_bill_clothes_edt);
    mDoctorEdt = (EditText) findViewById(R.id.family_bill_doctor_edt);
    mRenQingEdt = (EditText) findViewById(R.id.family_bill_laiwang_edt);
    mBabyEdt = (EditText) findViewById(R.id.family_bill_baby_edt);
    mLiveEdt = (EditText) findViewById(R.id.family_bill_live_edt);
    mOtherEdt = (EditText) findViewById(R.id.family_bill_other_edt);
    mRemarkEdt = (EditText) findViewById(R.id.family_bill_remark_edt);
    mSaveBtn = (Button) findViewById(R.id.family_bill_save);
    mSaveBtn.setOnClickListener(this);
  }
  @Override
  public void onClick(View v) {
    if (v.getId() == R.id.family_bill_save) {
      saveData = new String[] { new SimpleDateFormat("yyyy-MM-dd").format(new Date()), mFoodEdt.getText().toString().trim(), mArticlesEdt.getText().toString().trim(), mTrafficEdt.getText().toString().trim(), mTravelEdt.getText().toString().trim(), mClothesEdt.getText().toString().trim(), mDoctorEdt.getText().toString().trim(), mRenQingEdt.getText().toString().trim(), mBabyEdt.getText().toString().trim(), mLiveEdt.getText().toString().trim(), mOtherEdt.getText().toString().trim(), mRemarkEdt.getText().toString().trim() };
      if (canSave(saveData)) {
        ContentValues values = new ContentValues();
        values.put("time", new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
        values.put("food", mFoodEdt.getText().toString());
        values.put("use", mArticlesEdt.getText().toString());
        values.put("traffic", mTrafficEdt.getText().toString());
        values.put("travel", mTravelEdt.getText().toString());
        values.put("clothes", mClothesEdt.getText().toString());
        values.put("doctor", mDoctorEdt.getText().toString());
        values.put("laiwang", mRenQingEdt.getText().toString());
        values.put("baby", mBabyEdt.getText().toString());
        values.put("live", mLiveEdt.getText().toString());
        values.put("other", mOtherEdt.getText().toString());
        values.put("remark", mRemarkEdt.getText().toString());
        long insert = mDbHelper.insert("family_bill", values);
        if (insert > 0) {
          initData();
        }
      }
      else {
        Toast.makeText(this, "请填写任意一项内容", Toast.LENGTH_SHORT).show();
      }
    }
  }
  @SuppressLint("SimpleDateFormat")
  public void initData() {
    file = new File(getSDPath() + "/Family");
    makeDir(file);
    ExcelUtils.initExcel(file.toString() + "/bill.xls", title);
    ExcelUtils.writeObjListToExcel(getBillData(), getSDPath() + "/Family/bill.xls", this);
  }
  private ArrayList<ArrayList<String>> getBillData() {
    Cursor mCrusor = mDbHelper.exeSql("select * from family_bill");
    while (mCrusor.moveToNext()) {
      ArrayList<String> beanList=new ArrayList<String>();
      beanList.add(mCrusor.getString(1));
      beanList.add(mCrusor.getString(2));
      beanList.add(mCrusor.getString(3));
      beanList.add(mCrusor.getString(4));
      beanList.add(mCrusor.getString(5));
      beanList.add(mCrusor.getString(6));
      beanList.add(mCrusor.getString(7));
      beanList.add(mCrusor.getString(8));
      beanList.add(mCrusor.getString(9));
      beanList.add(mCrusor.getString(10));
      beanList.add(mCrusor.getString(11));
      beanList.add(mCrusor.getString(12));
      bill2List.add(beanList);
    }
    mCrusor.close();
    return bill2List;
  }
  public static void makeDir(File dir) {
    if (!dir.getParentFile().exists()) {
      makeDir(dir.getParentFile());
    }
    dir.mkdir();
  }
  public String getSDPath() {
    File sdDir = null;
    boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
    if (sdCardExist) {
      sdDir = Environment.getExternalStorageDirectory();
    }
    String dir = sdDir.toString();
    return dir;
  }
  private boolean canSave(String[] data) {
    boolean isOk = false;
    for (int i = 0; i < data.length; i++) {
      if (i > 0 && i < data.length) {
        if (!TextUtils.isEmpty(data[i])) {
          isOk = true;
        }
      }
    }
    return isOk;
  }
}

CreateExcel.java:

package com.ldm.excel;
import java.io.File;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import android.os.Environment;
public class CreateExcel {
  // 准备设置excel工作表的标题
  private WritableSheet sheet;
  /**创建Excel工作薄*/
  private WritableWorkbook wwb;
  private String[] title = { "日期", "食物支出", "日用品项", "交通话费", "旅游出行", "穿着支出", "医疗保健", "人情客往", "宝宝专项", "房租水电", "其它支出", "备注说明" };
  public CreateExcel() {
    excelCreate();
  }
  public void excelCreate() {
    try {
      /**输出的excel文件的路径*/
      String filePath = Environment.getExternalStorageDirectory() + "/family_bill";
      File file = new File(filePath, "bill.xls");
      if (!file.exists()) {
        file.createNewFile();
      }
      wwb = Workbook.createWorkbook(file);
      /**添加第一个工作表并设置第一个Sheet的名字*/
      sheet = wwb.createSheet("家庭帐务表", 0);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
  public void saveDataToExcel(int index, String[] content) throws Exception {
    Label label;
    for (int i = 0; i < title.length; i++) {
      /**Label(x,y,z)其中x代表单元格的第x+1列,第y+1行, 单元格的内容是y
       * 在Label对象的子对象中指明单元格的位置和内容
       * */
      label = new Label(i, 0, title[i]);
      /**将定义好的单元格添加到工作表中*/
      sheet.addCell(label);
    }
    /*
     * 把数据填充到单元格中
     * 需要使用jxl.write.Number
     * 路径必须使用其完整路径,否则会出现错误
     */
    for (int i = 0; i < title.length; i++) {
      Label labeli = new Label(i, index, content[i]);
      sheet.addCell(labeli);
    }
    // 写入数据
    wwb.write();
    // 关闭文件
    wwb.close();
  }
}

DBHelper.java:

package com.ldm.db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
  public static final String DB_NAME = "ldm_family"; // DB name
  private Context mcontext;
  private DBHelper mDbHelper;
  private SQLiteDatabase db;
  public DBHelper(Context context) {
    super(context, DB_NAME, null, 11);
    this.mcontext = context;
  }
  public DBHelper(Context context, String name, CursorFactory factory, int version) {
    super(context, name, factory, version);
  }
  /**
   * 用户第一次使用软件时调用的操作,用于获取数据库创建语句(SW),然后创建数据库
   */
  @Override
  public void onCreate(SQLiteDatabase db) {
    String sql = "create table if not exists family_bill(id integer primary key,time text,food text,use text,traffic text,travel text,clothes text,doctor text,laiwang text,baby text,live text,other text,remark text)";
    db.execSQL(sql);
  }
  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  }
  /* 打开数据库,如果已经打开就使用,否则创建 */
  public DBHelper open() {
    if (null == mDbHelper) {
      mDbHelper = new DBHelper(mcontext);
    }
    db = mDbHelper.getWritableDatabase();
    return this;
  }
  /* 关闭数据库 */
  public void close() {
    db.close();
    mDbHelper.close();
  }
  /**添加数据 */
  public long insert(String tableName, ContentValues values) {
    return db.insert(tableName, null, values);
  }
  /**查询数据*/
  public Cursor findList(String tableName, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) {
    return db.query(tableName, columns, selection, selectionArgs, groupBy, having, orderBy, limit);
  }
  public Cursor exeSql(String sql) {
    return db.rawQuery(sql, null);
  }
}

ExcelUtils.java:

package com.ldm.excel;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import android.content.Context;
import android.widget.Toast;
public class ExcelUtils {
  public static WritableFont arial14font = null;
  public static WritableCellFormat arial14format = null;
  public static WritableFont arial10font = null;
  public static WritableCellFormat arial10format = null;
  public static WritableFont arial12font = null;
  public static WritableCellFormat arial12format = null;
  public final static String UTF8_ENCODING = "UTF-8";
  public final static String GBK_ENCODING = "GBK";
  public static void format() {
    try {
      arial14font = new WritableFont(WritableFont.ARIAL, 14, WritableFont.BOLD);
      arial14font.setColour(jxl.format.Colour.LIGHT_BLUE);
      arial14format = new WritableCellFormat(arial14font);
      arial14format.setAlignment(jxl.format.Alignment.CENTRE);
      arial14format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
      arial14format.setBackground(jxl.format.Colour.VERY_LIGHT_YELLOW);
      arial10font = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD);
      arial10format = new WritableCellFormat(arial10font);
      arial10format.setAlignment(jxl.format.Alignment.CENTRE);
      arial10format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
      arial10format.setBackground(jxl.format.Colour.LIGHT_BLUE);
      arial12font = new WritableFont(WritableFont.ARIAL, 12);
      arial12format = new WritableCellFormat(arial12font);
      arial12format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
    }
    catch (WriteException e) {
      e.printStackTrace();
    }
  }
  public static void initExcel(String fileName, String[] colName) {
    format();
    WritableWorkbook workbook = null;
    try {
      File file = new File(fileName);
      if (!file.exists()) {
        file.createNewFile();
      }
      workbook = Workbook.createWorkbook(file);
      WritableSheet sheet = workbook.createSheet("家庭帐务表", 0);
      sheet.addCell((WritableCell) new Label(0, 0, fileName, arial14format));
      for (int col = 0; col < colName.length; col++) {
        sheet.addCell(new Label(col, 0, colName[col], arial10format));
      }
      workbook.write();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
    finally {
      if (workbook != null) {
        try {
          workbook.close();
        }
        catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    }
  }
  @SuppressWarnings("unchecked")
  public static <T> void writeObjListToExcel(List<T> objList, String fileName, Context c) {
    if (objList != null && objList.size() > 0) {
      WritableWorkbook writebook = null;
      InputStream in = null;
      try {
        WorkbookSettings setEncode = new WorkbookSettings();
        setEncode.setEncoding(UTF8_ENCODING);
        in = new FileInputStream(new File(fileName));
        Workbook workbook = Workbook.getWorkbook(in);
        writebook = Workbook.createWorkbook(new File(fileName), workbook);
        WritableSheet sheet = writebook.getSheet(0);
        for (int j = 0; j < objList.size(); j++) {
          ArrayList<String> list=(ArrayList<String>) objList.get(j);
          for (int i = 0; i < list.size(); i++) {
            sheet.addCell(new Label(i, j+1, list.get(i), arial12format));
          }
        }
        writebook.write();
        Toast.makeText(c, "保存成功", Toast.LENGTH_SHORT).show();
      }
      catch (Exception e) {
        e.printStackTrace();
      }
      finally {
        if (writebook != null) {
          try {
            writebook.close();
          }
          catch (Exception e) {
            e.printStackTrace();
          }
        }
        if (in != null) {
          try {
            in.close();
          }
          catch (IOException e) {
            e.printStackTrace();
          }
        }
      }
    }
  }
  public static Object getValueByRef(Class cls, String fieldName) {
    Object value = null;
    fieldName = fieldName.replaceFirst(fieldName.substring(0, 1), fieldName.substring(0, 1).toUpperCase());
    String getMethodName = "get" + fieldName;
    try {
      Method method = cls.getMethod(getMethodName);
      value = method.invoke(cls);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
    return value;
  }
}

附:完整源码点击此处本站下载

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android文件操作技巧汇总》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android布局layout技巧总结》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android多国语言转换Excel及Excel转换为string详解

    前言 在实际的开发中,当我们完成了一个apk,一般都是英语和中文简体这两种语语言,如果发布了,则需要把字符转换给翻译公司,让他们帮忙翻译,一般提供一个 Excel 表格,如下: 当翻译完成之后,我们希望能把它快速转换成 value-xx 文件下对应的 string 或者 arrays ,如: 我只要复制粘贴即可.当然网上也有很多大神用 Python 或者其他语言写了,但是我们用 Android 的,所以肯定用 Java 了.于是我写了个 EasyTransLib 用来方便翻译.因为 studio

  • android读取assets中Excel表格并显示

    本文实例为大家分享了android读取assets中Excel的具体代码,供大家参考,具体内容如下 1.在assets下放的excel表格,命名为excel.xls 2.添加读取excel需要的jar包"jxl.jar",assets是建在main级别目录下,建错地方找不到文件 3.读取excel中的文件 /*获取excel表格中的数据不能在主线程中调用 xlsName 为表格的名称 index 表示第几张表格 */ public ArrayList<ExcelBean>

  • android通过jxl读excel存入sqlite3数据库

    复制代码 代码如下: package com.demo.day20140228; import java.io.File;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.Statement; import jxl.Cell;import jxl.Sheet;import jx

  • Android操作Excel文件的功能实现

    Android中操作Excel文件导出报表时主要采用开源库jxl,最早用在java上,但也可用于Android.与之类似的POI,因为依赖库众多,所以只能用于java,而不能用于Android. 使用jxl需要在Android工程中导入jxl.jar包,jxl可以完成Excel的基本读写操作,其支持与不支持的情况如下: 1.jxl只支持Excel2003格式,不支持Excel2007格式.即支持xls文件,不支持xlsx文件. 2.jxl不支持直接修改excel文件,但可通过复制新文件覆盖原文件

  • Android 操作excel功能实例代码

    学习app对excel的读写控制 1.界面设计 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id

  • Android 中读取Excel文件实例详解

    Android 中读取Excel文件实例详解 最近有个需求需要在app内置数据,新来的产品扔给了我两个Excel表格就不管了(两个表格格式还不统一...),于是通过度娘等方法找到了Android中读取Excel表格文件的一种方法,记录一下. 闲话一下Excel中工作簿和工作表的区别: 工作簿中包含有工作表.工作簿可以由一张或多张工作表组成,一个工作簿就是一个EXCEL表格文件. 好了,开始读取表格文件吧. 前提 首先,我们假设需要读取的表格文件名字为test.xls, 位于assets根目录下.

  • Android实现仿excel数据表格效果

    在没给大家分享代码之前,先给大家展示下效果图: 1.activity /** * 采购需求 * Created by Administrator on 2016/10/13. */ public class PurchaseRequireActivity extends BaseActivity implements PurchaseRequireView { @Bind(R.id.appTitle) TextView appTitle; @Bind(R.id.scrollLinearLayou

  • Android应用读取Excel文件的方法

    本文实例讲述了Android应用读取Excel文件的方法.分享给大家供大家参考,具体如下: ReadExcel.java文件: public class ReadExcel extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)

  • Android开发实现读取excel数据并保存为xml的方法

    本文实例讲述了Android开发实现读取excel数据并保存为xml的方法.分享给大家供大家参考,具体如下: 前阵子,公司请外面人翻译了一些android中values中的一些strings,然而保存的都是excel格式,如果单纯的将excel中的数据粘贴到指定的xml中的话,工作量非常的大,于是,自己写了个简单的demo,将excel中的数据读取并保存为xml对应的数据,下面的demo和图片展示: 1.数据保存在BeanValue中,包括key和value,方便后续数据读取 package c

  • Android开发实现生成excel的方法详解

    本文实例讲述了Android开发实现生成excel的方法.分享给大家供大家参考,具体如下: 都说程序员不爽产品经理,其实有的时候遇到一些奇葩的后台开发人员也会很不顺心.最近项目有这样一个要求,要生成一个excel然后发邮件给客户.结果后台人员直接把这个功能扔给客户端,理由是后台不好实现.听到这也就只能自己实现了(分分钟就想来个螺旋王扣它头上).这篇博客讲下如下在android中生成excel表并存到本地.先看下生成后的效果图: 初始化数据 首先我们要先造下测试数据,这里我把数据写死在一个常量类C

随机推荐