• 软工试水日报 3/5


    今天是周五,本来以为能正经休息一天,结果昨天的体温填报少做了Excel导出……于是我便急急忙忙开始继续作业了……

    之前在做javaIO操作的时候,稍微也看了一点关于jxl.jar操作Excel的知识——当然说实话也就是知道有这么个东西而已的程度,实际上也确实是第一次用,所以发生了一些令人意想不到的错误也在情理之中……

    先上代码(我将整个表的建立写成了一整个函数,其实分开更好理解,不过我还是有点懒惰了……):

    package com.example.helloworld;
    
    import android.content.Context;
    import android.content.ContextWrapper;
    import android.content.SharedPreferences;
    import android.os.Build;
    import android.os.Environment;
    import android.util.Log;
    import android.widget.Toast;
    
    import androidx.annotation.RequiresApi;
    
    import java.io.File;
    import java.util.ArrayList;
    
    import jxl.Workbook;
    import jxl.format.Alignment;
    import jxl.format.VerticalAlignment;
    import jxl.write.Label;
    import jxl.write.WritableCellFormat;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;
    
    import static android.content.Context.MODE_PRIVATE;
    
    public class Excel {
    
        private static final String TAG = "SEL";
    
        @RequiresApi(api = Build.VERSION_CODES.N)
        public void excelCreate(String name, Context con) {

    //获取待填写的数据 SharedPreferences sp
    = con.getSharedPreferences("temper", MODE_PRIVATE); String code=sp.getString("code","未设定"); String cla=sp.getString("class","未设定"); String phone=sp.getString("phone","未设定"); String safe="良好"; dao poi=new dao(con); ArrayList<info> pop=poi.serme(code); try {
    //按路径创建xls ContextWrapper cw
    = new ContextWrapper(con); File directory = cw.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS); File file = new File(directory, name + "体温报表.xls"); Toast.makeText(con, "文件储存路径为" + file.getAbsolutePath(), Toast.LENGTH_SHORT).show(); Log.d(TAG, file.getAbsolutePath()); WritableWorkbook wwb = Workbook.createWorkbook(file); WritableSheet sheet = wwb.createSheet("sheet1", 0);
    //文字对齐格式 WritableCellFormat headerFormat
    = new WritableCellFormat(); //水平居中对齐 headerFormat.setAlignment(Alignment.CENTRE); headerFormat.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN); //竖直方向居中对齐 headerFormat.setVerticalAlignment(VerticalAlignment.CENTRE); sheet.mergeCells(0, 0, 6, 1); //合并单元格 Label label = new Label(0, 0, "学生体温信息登记表", headerFormat); //插入数据 sheet.addCell(label); label = new Label(0, 2, "班级", headerFormat); sheet.addCell(label); sheet.mergeCells(1, 2, 3, 2); label = new Label(1, 2, cla, headerFormat); sheet.addCell(label); label = new Label(4, 2, "填表日期", headerFormat); sheet.addCell(label); sheet.mergeCells(5, 2, 6, 2); label = new Label(5, 2, poi.getTime(), headerFormat); sheet.addCell(label); label = new Label(0, 3, "姓名", headerFormat); sheet.addCell(label); sheet.mergeCells(1, 3, 3, 3); label = new Label(1, 3, name, headerFormat); sheet.addCell(label); label = new Label(4, 3, "学号", headerFormat); sheet.addCell(label); sheet.mergeCells(5, 3, 6, 3); label = new Label(5, 3, code, headerFormat); sheet.addCell(label); label = new Label(0, 4, "健康状况", headerFormat); sheet.addCell(label); sheet.mergeCells(1, 4, 3, 4); label = new Label(1, 4, "良好", headerFormat); sheet.addCell(label); label = new Label(4, 4, "手机号", headerFormat); sheet.addCell(label); sheet.mergeCells(5, 4, 6, 4); label = new Label(5, 4, phone, headerFormat); sheet.addCell(label); sheet.mergeCells(0, 5, 6, 6); label = new Label(0, 5, "每日体温状况监测", headerFormat); sheet.addCell(label); label = new Label(0, 7, "日期", headerFormat); sheet.addCell(label); label = new Label(1, 7, "体温", headerFormat); sheet.addCell(label); label = new Label(2, 7, "健康状况", headerFormat); sheet.addCell(label); sheet.mergeCells(3, 7, 4, 7); sheet.mergeCells(5, 7, 6, 7); label = new Label(3, 7, "填报时位置", headerFormat); sheet.addCell(label); label = new Label(5, 7, "备注", headerFormat); sheet.addCell(label); for (int i = 8; i <= 21; i++) { sheet.mergeCells(3, i, 4, i); sheet.mergeCells(5, i, 6, i); if((i-8)<pop.size()){ label = new Label(0, i, pop.get(i-8).getTime(), headerFormat); sheet.addCell(label); label = new Label(1, i, pop.get(i-8).getTem(), headerFormat); sheet.addCell(label); label = new Label(2, i, "良好", headerFormat); sheet.addCell(label); label = new Label(3, i, pop.get(i-8).getPlace(), headerFormat); sheet.addCell(label); label = new Label(5, i, pop.get(i-8).getSide(), headerFormat); sheet.addCell(label); } } sheet.mergeCells(0, 22, 6, 23); label = new Label(0, 22, " 本人承诺:自觉履行疫情防控责任和义务,保证以上填报信息全部属实,如有隐瞒,自愿承担相应法律后果。"); sheet.addCell(label); sheet.mergeCells(0, 24, 1, 25); label = new Label(0, 24, "本人签字", headerFormat); sheet.addCell(label); sheet.mergeCells(2, 24, 3, 25); sheet.mergeCells(4, 24, 4, 25); label = new Label(4, 24, "签字日期", headerFormat); sheet.addCell(label); sheet.mergeCells(5, 24, 6, 25); label = new Label(5, 24, poi.getsTime(), headerFormat); sheet.addCell(label); wwb.write(); wwb.close(); } catch (Exception e) { e.printStackTrace(); } } }

    虽然看上去繁琐,但实际上就是不断地合并单元格插入数据,实际上花不了多久就能理顺思路

    但真正恶心的是Android中的文件操作,恶心得要死

    本来我的设想是直接把表输出到根目录(storage/emulated/0/)下,但无论怎么尝试都会报错,开始为还以为是代码本身的问题,改了n遍后才发现Android 7.0以后不能随便操作根目录……

    所以就改到了文件包本身的路径了

    最后贴一下运行效果:

     好!那么今天就是这样!

  • 相关阅读:
    python 时间差计算
    NET Framework 4.5新特性 (一) 数据库的连接加密保护。
    某表含有N个字段超精简模糊查询方法
    清空javascript数组数据
    IIS无法连接LocalDb,怎么办?
    jquery 模糊查询对象属性
    解释杨中科随机数为什么会骗人?
    前端Js传递数组至服务器端
    javascript获取客户端默认打印机
    水晶报表注意的问题
  • 原文地址:https://www.cnblogs.com/Sakuraba/p/14489267.html
Copyright © 2020-2023  润新知