您的位置:首页 > 数据库

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

2016-08-27 09:22 141 查看
      这是我遇到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,s
4000
heetTitle[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表所需要的包
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息