Android 如何数据生成表格

LZQ plus

发布于 2018.03.07 00:34 阅读 2431 评论 0

在实际Android应用中,如果有的数据是需要打印或者记录怎么办,特别是类似记账APP,用户需要按月打印表格怎么办,总不会要让用户在记录到手机上的数据再重新打一遍吧,所以这里的一键生成表格就显得人性化许多,对吧。

(开发环境:Android studio

好,这里是需要jxl包的。

当然首先是下载jar包配置好。然后就是一系列疯狂操作:

public class FileUtils {

    //sd卡根目录

    private static final String BASE_PATH = Environment.getExternalStorageDirectory().getPath() + File.separator;

    private static final String rootDir=BASE_PATH+"/储存表格的文件夹名/";

    private static String[] title = { "车主姓名","客户等级","单位/地址", "联系电话", "身份证号", "车牌号码","车色/车型","车识别号","年均行程","修车记录"};


    private static Label label;

    public static void makeRootDirectory() {

        File file = null;

        try {

            file = new File(rootDir);

            if (!file.exists()) {

                file.mkdir();

            }

        } catch (Exception e) {

        }

    }


    public static void writeExcel(Context context, List<MyBean> beanList) throws Exception {

        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)&&getAvailableStorage()>1000000) {

            Toast.makeText(context, "SD卡不可用", Toast.LENGTH_LONG).show();

            return;

        }else{

            Toast.makeText(context, "正在为您生成,请稍后...", Toast.LENGTH_SHORT).show();

        }

        SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd");

        File file = new File(rootDir,formatter.format(new Date()) + "CarInfo.xls");


        // 创建Excel工作表

        WritableWorkbook wwb;

        OutputStream os = new FileOutputStream(file);

        wwb = Workbook.createWorkbook(os);

        // 添加第一个工作表并设置第一个Sheet的名字

        WritableSheet sheet = wwb.createSheet("首佳车信记录表", 0);

        for (int i = 0; i < title.length; i++) {

            // Label(x,y,z) 代表单元格的第x+1列,第y+1行, 内容z

            // 在Label对象的子对象中指明单元格的位置和内容

            label = new Label(i, 0, title[i], getHeader());

            // 将定义好的单元格添加到工作表中

            sheet.addCell(label);

        }


        for (int i = 0; i < beanList.size(); i++) {

            MyBean b = beanList.get(i);

            Label state = new Label(0, i + 1, b.getpName());

            Label date = new Label(1, i + 1, b.getpLevel());
                  ................
                   一阵疯狂操作
                  ................

            Label remark = new Label(9, i + 1, b.getRemarks());


            sheet.addCell(state);

            sheet.addCell(date);
            ................
               一阵疯狂操作
            ................

            sheet.addCell(remark);

        }

        // 写入数据

        wwb.write();

        // 关闭文件

        wwb.close();

        Toast.makeText(context, "表格文件生成完毕! 文件路径:\n" + rootDir ,Toast.LENGTH_LONG).show();


    }



    public static WritableCellFormat getHeader() {

        WritableFont font = new WritableFont(WritableFont.TIMES, 10,

                WritableFont.BOLD);// 定义字体

        try {

            font.setColour(Colour.BLUE);// 蓝色字体

        } catch (WriteException e1) {

            e1.printStackTrace();

        }

        WritableCellFormat format = new WritableCellFormat(font);

        try {

            format.setAlignment(jxl.format.Alignment.CENTRE);// 左右居中

            format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);// 上下居中

            // format.setBorder(Border.ALL, BorderLineStyle.THIN,

            // Colour.BLACK);// 黑色边框

            // format.setBackground(Colour.YELLOW);// 黄色背景

        } catch (WriteException e) {

            e.printStackTrace();

        }

        return format;

    }



    /** 获取SD可用容量 */

    private static long getAvailableStorage() {

        StatFs statFs = new StatFs(BASE_PATH);

        long blockSize = statFs.getBlockSize();

        long availableBlocks = statFs.getAvailableBlocks();

        long availableSize = blockSize * availableBlocks;

        // Formatter.formatFileSize(context, availableSize);

        return availableSize;

    }

}

Yi:  -> makeRootDirectory()

    创建表格的文件目录,一般地这个方法在安装APP的时候就执行完毕。

Er:  -> writeExcel()

    生成表格,基本上是在用户点击了一个按钮执行此方法。

San: -> getHeader()

    创建表头,在 Er 中调用。

Si:  -> getAvailableStorage()

    获取SD可用容量,一般现在手机都可以满足的了,在 Er 中调用。

 

其中

SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd");

File file = new File(rootDir,formatter.format(new Date()) + "CarInfo.xls");

是在生成的文件前边加时间前缀,好明确这个文件是那日生成的,做个时间记录。

 

好用?那是必须的!