最近需要用到把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;
- }
- }