文章目录
前言
在设备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 集成
丰富的测试工具和框架
可捕捉性能、易用性、版本兼容性以及其他问题的 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存储各有各的用法,本文仅仅只是简单的介绍了一种,方法搞懂了就行,如有遗漏和瑕疵,请大家广开思路自己去学习实践开发一波。