最近需要用到把Android数据到处保存到Excel表格中,个人感觉也比较实用,所以就和大家分享一下。以前没接触过该怎么办呢?有问题找百度,只有你想不到的没有你找不到的。在网上也找到了一些例子,自己又加以完善。代码也比较容易,只需要用到一个jxl.jar包,举一反三android数据应该也能转为Word什么的,呵呵。
Demo实现了一个简单的记账功能,点击导出账单就导出到了Excel表。点击导入账单就把Excel数据显示到Android手机上了。导出账单先把数据保存到Sqlite中然后再倒入Excel,这样做的好处是就算你把Excel表格误删了,还是能从Sqlite中读出以前的保存记录。效果图如下:
主要代码是ExcelUtils类,封装了把数据转化为Excel的工具类:
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, "导出到手机存储中文件夹Family成功", 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 List<BillObject> read2DB(File f, Context con) {
ArrayList<BillObject> billList = new ArrayList<BillObject>();
try {
Workbook course = null;
course = Workbook.getWorkbook(f);
Sheet sheet = course.getSheet(0);
Cell cell = null;
for (int i = 1; i < sheet.getRows(); i++) {
BillObject tc = new BillObject();
cell = sheet.getCell(1, i);
tc.setFood(cell.getContents());
cell = sheet.getCell(2, i);
tc.setClothes(cell.getContents());
cell = sheet.getCell(3, i);
tc.setHouse(cell.getContents());
cell = sheet.getCell(4, i);
tc.setVehicle(cell.getContents());
Log.d("gaolei", "Row"+i+"---------"+tc.getFood() + tc.getClothes()
+ tc.getHouse() + tc.getVehicle());
billList.add(tc);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return billList;
}
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;
}
}