万能 Android 数据库导出Excal表代码

      这是我遇到Android 需要将sqlite数据库导出Excal表时写万能操作Excal代码,这段代码将所有导出时所有操作都进行封装;只需传入相应要对Excal表的值就行 调用  databaseDump1.writesqlExcel(sql11,tablename,sheet,sheetTitle);第一个参数表示传过来的sql语句 第二个参数是excal表名 第三个参数是string数组表示每个表sheet分组名

例如:

                       DatabaseDump databaseDump1=new DatabaseDump(db1);//这的db1是SQLiteDatabase db1,也就是你要操作的数据库的SQLiteDatabase


//String[] sql, String tablename, String[] sheet,String[] sheetTitle
String sql11[]=new String[]{"select * from person","select * from person","select * from person"};
String tablename="student";
String[] sheet=new String[]{"person1","person2","person3"};
String[] sheetTitle=new String[]{"我是好孩子","我不是好孩子","我就是好孩子"};

databaseDump1.writesqlExcel(sql11,tablename,sheet,sheetTitle);



import java.io.File;
import java.io.*;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;


public class DatabaseDump {
private SQLiteDatabase mDb;
public DatabaseDump(SQLiteDatabase db) {
mDb = db;
}


/**

* 设置每个单元格的字体 居中 自动换行

* @param fontsize
* @return
*/
public WritableCellFormat setFont(int fontsize) {
WritableFont font1 = new WritableFont(WritableFont.TIMES, fontsize, WritableFont.BOLD);
WritableCellFormat writableCellFormat = new WritableCellFormat(font1);
try {
// 设置字体在单元格水平居中
writableCellFormat.setAlignment(Alignment.CENTRE);
// 设置字体在单元格垂直居中
writableCellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
// 设置字体在单元格自动换行
writableCellFormat.setWrap(true);
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


return writableCellFormat;
}


/**
* 单个sql语句写入excal表

*/
public void writesqlExcel(String[] sql, String tablename, String[] sheet,String[] sheetTitle) {
/**
* 第一个参数表示传过来的sql语句 第二个参数是excal表名 第三个参数是string数组表示每个表sheet分组名
*/
WritableWorkbook wwb = null;
String fileName;
fileName = "/sdcard/Download/" + tablename + ".xls";
try {
// 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb = Workbook.createWorkbook(new File(fileName));
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; i < sql.length; i++) {
int r = 0;
Cursor cur = mDb.rawQuery(sql[i], new String[0]);
int numcols = cur.getColumnCount();
int numrows = cur.getCount();
// Log.i("row", numrows + "");
// Log.i("col", numcols + "");


String records[][] = new String[numrows + 1][numcols];// 存放答案,多一行标题行


if (cur.moveToFirst()) {
while (cur.getPosition() < cur.getCount()) {
for (int c = 0; c < numcols; c++) {
if (r == 0) {
// 从数据库表中获取每一列的名字 将数据类型传入表中
records[r][c] = cur.getColumnName(c);
// 从数据库中获取每一列的值将之传入表中
records[r + 1][c] = cur.getString(c);
} else {
records[r + 1][c] = cur.getString(c);
}
// Log.i("value" + r + " " + c, records[r][c]);
}
cur.moveToNext();
r++;
}


cur.close();
}
// try {
// // 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
// wwb = Workbook.createWorkbook(new File(fileName));
// } catch (IOException e) {
// e.printStackTrace();
// }
if (wwb != null) {
// 创建一个可写入的工作表
// Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheet ws = wwb.createSheet(sheet[i], i);
switch (i) {
case 0:
writeexcal(ws,numcols,numrows,records,sheetTitle[0]);
break;
case 1:
writeexcal(ws,numcols,numrows,records,sheetTitle[1]);
break;
case 2:
writeexcal(ws,numcols,numrows,records,sheetTitle[2]);
break;
}

}


}
try {
// 从内存中写入文件中
wwb.write();
// 关闭资源,释放内存
wwb.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}


}
/**
* 写入exaca表

*/
public void writeexcal(WritableSheet ws,int numcols,int numrows,String records[][],String sheetTitle){
// 下面开始添加单元格
for (int i1 = 0; i1 < numrows + 2; i1++) {
for (int j = 0; j < numcols; j++) {
// 这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
if (i1 == 0) {
try {
ws.mergeCells(0, 0, numcols, 0);
WritableCellFormat writableCellFormat = setFont(16);
Label labelC = new Label(0, 0,sheetTitle, writableCellFormat);
ws.addCell(labelC);
} catch (RowsExceededException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


} else {
WritableCellFormat writableCellFormat = setFont(8);
Label labelC = new Label(j, i1, records[i1 - 1][j], writableCellFormat);
// Log.i("Newvalue" + i + " " + j, records[i][j]);
try {
// 将生成的单元格添加到工作表中
ws.addCell(labelC);
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}


}
}
}




}

Android 操作Excal表所需要的包

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值