【andriod】设备APP开发之数据就地Excel存储


前言

在设备APP开发过程中,有时会遇到客户要求把重要指标数据以Excel表格的形式存储下来,并且做到每月一个Excel数据表,每月表格里又要一天做一个sheet,问题就来了,怎么具体实现呢,本篇就来详细的讲一讲数据就地Excel存储和按客户要求储存。


提示:以下是本篇文章正文内容,下面案例可供参考

一、开发工具

使用软件Android Studio 4.1版本
在这里插入图片描述

1、软件介绍

Android Studio 是基于 IntelliJ IDEA 的官方 Android 应用开发集成开发环境 (IDE)。除了 IntelliJ 强大的代码编辑器和开发者工具,Android Studio 提供了更多可提高 Android 应用构建效率的功能,例如:

基于 Gradle 的灵活构建系统

快速且功能丰富的模拟器

可针对所有 Android 设备进行开发的统一环境

Instant Run,可将变更推送到正在运行的应用,无需构建新的 APK

可帮助您构建常用应用功能和导入示例代码的代码模板和 GitHub 集成

扫描二维码关注公众号,回复: 14525035 查看本文章

丰富的测试工具和框架

可捕捉性能、易用性、版本兼容性以及其他问题的 Lint 工具

C++ 和 NDK 支持

内置对 Google 云端平台的支持,可轻松集成 Google Cloud Messaging 和 App 引擎

2、Android JDK配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、Android Gradle配置

在这里插入图片描述

4、Android API配置

在这里插入图片描述

5、项目依赖配置

在这里插入图片描述

6、做Excel存储的依赖配置

下载jxl-2.6.12.jar,然后添加到依赖中。
在这里插入图片描述
在这里插入图片描述
然后看一下gradle中是否已implementation files(‘…\jxl-2.6.12.jar’)。
在这里插入图片描述

7、解锁andriod系统内存的读写

在AppCompatActivity{}中定义:

private void requestPermission() {
    
    
        if (Build.VERSION.SDK_INT > 23) {
    
    
            if (ContextCompat.checkSelfPermission(this, permissions[0]) == PackageManager.PERMISSION_GRANTED) {
    
    
                Log.e(getLocalClassName(),"requestPermission:" + "用户之前已经授予了权限!");
            } else {
    
    
                requestPermissions(permissions, REQUEST_PERMISSION_CODE);
            }
        }
    }

在 onCreate()中解锁:

DisplayMetrics metrics = new DisplayMetrics();
        Display display = this.getWindowManager().getDefaultDisplay();
        display.getMetrics(metrics);

        requestPermission();
        StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
        StrictMode.setVmPolicy(builder.build());
        builder.detectFileUriExposure();

在Andriodmainfest.xml中:

 <receiver
            android:name=".BootBroadcastReceiver"
            android:enabled="true"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

二、实现Excel存储细节详情

判断Excel是否存在
不存在就以月份创建数据表,并按日期创建好每个月的sheet:

if (!file.exists() && !file.isDirectory()) {
    
     //判断文件是否存在,存在就跳过,不存在就创建
            WritableWorkbook wwb = Workbook.createWorkbook(file);//file路径下创建水质2022-06.xls工资表
            String j;
            try {
    
    
                for(int kk=0; kk<31; kk++) {
    
    
                    if (kk<=8){
    
    
                        j=("0"+(kk+1));
                    } else j=String.valueOf(kk+1);
                    WritableSheet ws = wwb.createSheet((newdate3 + j), kk);//在excel中通过for循环创建1-31个sheet
                    Label labelId = new Label(0, 0, "时间");//每个sheet写第1列标题
                    Label labelName = new Label(1, 0, "回水电阻");//每个sheet写第2列标题
                    Label labelSex = new Label(2, 0, "回水电导");//每个sheet写第3列标题
                    ws.addCell(labelId);
                    ws.addCell(labelName);
                    ws.addCell(labelSex);
//               Label labelId_i = new Label(0,  1, newdate);
//                jxl.write.Number number1 = new jxl.write.Number(1,1,TOC3);
//                jxl.write.Number number2 = new jxl.write.Number(2,1,TOC5);  ;
//                ws.addCell(labelId_i);
//                ws.addCell(number1);
//                ws.addCell(number1);
                }
            } catch (Exception e) {
    
    
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
               //内容写进Excel工作薄
                wwb.write();
                // 关闭Excel工作簿
                wwb.close();

如果按月份数据表已经存在,就按日存入数据:

 } else {
    
    
            System.out.println("文件已存在");
            Workbook wwb = Workbook.getWorkbook(file);//如果工作表已存在就读取工作薄
            WritableWorkbook writableWorkbook = Workbook.createWorkbook(file, wwb);//读出EXCEL工作表
//            int num = writableWorkbook.getNumberOfSheets();//获得sheetbiao数
            WritableSheet ws = writableWorkbook.getSheet((newdate3+newdate4));//读出与今天日期对应的sheet表格
//            String sheetName = ws.getName();
//            if (sheetName==newdate1){
    
    
            try {
    
    
//                ws.getColumns();获得列数
                FFF= ws.getRows();//获得当日sheet表已写行数
//                if ( FFF==0){
    
    
//                    FFF=1;
//                }
                Label labelId_0 = new Label(0, FFF+1, newdate);//在第1列空白行记录数据时间节点
                Label labelId_1 = new Label(1, FFF+1, TOC2);//在第2列空白行记录浮点型数据
                Label labelId_2 = new Label(2, FFF+1, TOC4);//在第3列空白行记录浮点型数据
                ws.addCell(labelId_0);
                ws.addCell(labelId_1);
                ws.addCell(labelId_2);
                FFF++;//记录一次行数加1
                System.out.println(FFF);
                writableWorkbook.write();//写Excel工作薄
                writableWorkbook.close(); // 关闭Excel工作簿
            } catch (Exception e) {
    
    
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
//        }else {
    
    
//          WritableSheet ws1 = writableWorkbook.createSheet(newdate1, num+1);
//            }
        }

三、实现详情概览

1、在平板文件夹中

在这里插入图片描述

2、在Excel表格内

在这里插入图片描述

在这里插入图片描述

总结

关于APP开发之数据就地Excel存储各有各的用法,本文仅仅只是简单的介绍了一种,方法搞懂了就行,如有遗漏和瑕疵,请大家广开思路自己去学习实践开发一波。

猜你喜欢

转载自blog.csdn.net/weixin_41729677/article/details/127116724