当前位置: 首页 > news >正文

Android 开发execel文件在内存和外存传递

需要jxl.jar包,导入到你的项目中:


下载地址:
https://download.csdn.net/my/uploads

package com.example.administrator.myapplication.db;

import android.content.Context;
import android.os.Environment;

import com.example.administrator.myapplication.bean.data_new;
import com.example.administrator.myapplication.common_util.SelfDialog;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

/**
 * Created by Administrator on 2019/5/16 0016.
 */


导出文件到外存



public class ExpportDataBeExcel {
    private Context mContext;

    public ExpportDataBeExcel(Context context) {
        this.mContext = context;
    }

    public void exportData(List<data_new> datas) {
        //需要导出的excel文件的文件名
        String fileName = "盘点导出表.xls";
        //操作excel的对象
        WritableWorkbook wwb = null;
        try {
            //根据当前的文件路径创建统计的文件并且实例化出一个操作excel的对象
            wwb = Workbook.createWorkbook(new File("/sdcard/盘点导出表.xls"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (wwb != null) {
            //创建底部的选项卡  传参是选项卡的名称  和  选型卡的索引
            WritableSheet writableSheet = wwb.createSheet("页签1", 0);
            //创建excel的表头的信息
//            资产编号
//            资产名称
//            资产分类
//            取得方式
//            规格型号

//            计量单位
//            取得日期
//            财务入账日期
//            价值类型
//            账面数量

//            账面价值
//            盘点数量
//            盘点结果
//            存放地点
//            使用部门

//            使用人
//            备注
            String[] topic = {"资产编号", "资产名称", "资产分类", "取得方式", "规格型号",
                    "计量单位", "取得日期", "财务入账日期", "价值类型", "账面数量",
                    "账面价值", "盘点数量", "盘点结果", "存放地点", "使用部门",
                    "使用人", "备注"};
            for (int i = 0; i < topic.length; i++) {
                //横向的在单元格中填写数据
                Label labelC = new Label(i, 0, topic[i]);
                try {
                    writableSheet.addCell(labelC);
                } catch (WriteException e) {
                    e.printStackTrace();
                }
            }
            //从实体中遍历数据并将数据写入excel文件中
            data_new account;
            ArrayList<String> header = new ArrayList<>();
//            header.add(0, "  资产编号");
//            header.add(1, "  资产名称 ");
//            header.add(2, "  资产分类   ");
//            header.add(3, "  取得方式   ");
//            header.add(4, "  规格型号   ");
//            header.add(5, "  计量单位   ");
//            header.add(6, "  取得日期   ");
//            header.add(7, "  财务入账日期 ");
//            header.add(8, "  价值类型   ");
//            header.add(9, "  账面数量   ");
//            header.add(10, " 账面价值    ");
//            header.add(11, " 盘点数量    ");
//            header.add(12, " 盘点结果     ");
//            header.add(13, " 存放地点    ");
//            header.add(14, " 使用部门    ");
//            header.add(15, " 使用人     ");
//            header.add(16, " 备注  ");
            ArrayList<String> li_one = new ArrayList<>();
            ArrayList<String> li = new ArrayList<>();
            li_one.add("1");
            li_one.add("2");
            li_one.add("3");
            li_one.add("4");
            li_one.add("5");
            li_one.add("6");
            li_one.add("7");
            li_one.add("8");
            li_one.add("9");
            li_one.add("10");
            li_one.add("11");
            li_one.add("12");
            li_one.add("13");
            li_one.add("14");
            li_one.add("15");
            li_one.add("16");
            li_one.add("17");
            for (int j = 0; j < datas.size(); j++) {
                //将数据源列表中的数据整合成 一个个的字符串列表
                //第一行寫入數字等等
                account = datas.get(j);
                li = new ArrayList<>();

                li.add(account.getNUMBERING());
                li.add(account.getNAME());
                li.add(account.getCLASSIFICATION());
                li.add(account.getGETTING_METHOR());
                li.add(account.getSPECIFICATIONA());
                li.add(account.getCOUNTER());
                li.add(account.getGET_THE_DATA());
                li.add(account.getDATA_O_ENTRY());
                li.add(account.getVALUE_TYPE());
                li.add(account.getBOOK_AMOUNT());
                li.add(account.getVALUE_MONEY());
                li.add(account.getINVENTORY_AMOUNT());

                //盘点结果状态修改
                if (Double.parseDouble(account.getBOOK_AMOUNT()) < Double.parseDouble(account.getINVENTORY_AMOUNT())) {
                    li.add("盘实");//根据要求进行更改
                } else if (Double.parseDouble(account.getBOOK_AMOUNT()) == Double.parseDouble(account.getINVENTORY_AMOUNT())) {
                    li.add("盘实");
                } else if (Double.parseDouble(account.getBOOK_AMOUNT()) > Double.parseDouble(account.getINVENTORY_AMOUNT())) {
                    li.add("盘亏");
                }
                li.add(account.getLOCATION());
                li.add(account.getUSER_OF_DEPARTMENT());
                li.add(account.getUSERS());
                li.add(account.getNOTE());

                int k = 0;
                //写入后面的数据
                for (String l : li) {
                    //将单个的字符串列表横向的填入到excel表中
                    Label labelC = new Label(k, j + 2, l);
                    k++;
                    try {
                        writableSheet.addCell(labelC);
                    } catch (WriteException e) {
                        e.printStackTrace();
                    }
                }
                li = null;
            }
            //写入第一行12345--
            int a=0;
            for (String l : li_one) {
                //将单个的字符串列表横向的填入到excel表中
                Label labelC = new Label(a, 1, l);
                a++;
                try {
                    writableSheet.addCell(labelC);
                } catch (WriteException e) {
                    e.printStackTrace();
                }
            }
        }
        //将文件从内存写入到文件当中
        try {
            wwb.write();
            wwb.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (WriteException e) {
            e.printStackTrace();
        }
//        SelfDialog.getInstanceYes(mContext, "提示", "确定导出数据", "确定").buildYesDialog();
        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
        builder.setTitle("提示");
        builder.setMessage("导出完成");
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(mContext, "导出完成", Toast.LENGTH_SHORT).show();
            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();
        FileUtils.renameFile("/sdcard/盘点导出表.xls","/sdcard/盘点导出.xls");

    }
}

 

存在问题:

到出的execel文件在Android studio中文件查看能看到,但是不能save,并且手机连接电脑进行copy不行。我怀疑可能和手机有关,但是还得进一步的测试看看,不一定 啊。现在看了问题,解决办法:对文件进行修改,重命名,移动,复制,都行的,就是在电脑上显示出来的。

 

导到内存

 

public class ImportDataFromExcel {
    //将excel文件导入到内存中
    private List<BeanExportData> datas;
    public String ImportExcelData(){
        datas = new ArrayList<>();
        Workbook workbook = null;
        String fileName ="考情统计.xls";
        try {
            workbook = Workbook.getWorkbook(new File(Environment.getExternalStorageDirectory()+"/"+fileName));
            Sheet sheet = workbook.getSheet(0);
            int rows = sheet.getRows();
            int columns = sheet.getColumns();
            //遍历excel文件的每行每列
            for (int i=0; i < rows ;i++){
                //遍历行
                List<String> li = new ArrayList<>();
                for (int j = 0 ; j < columns ; j++ ){
                    Cell cell = sheet.getCell(j,i);
                    String result = cell.getContents();
                    if (i!=0){
                        li.add(result);
                    }
                }
                if (li.size()>0){
                    datas.add(new BeanExportData(li.get(0),li.get(1),li.get(2),li.get(3)));
                }
                li = null;
            }
            Gson gson = new Gson();
            return gson.toJson(datas);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (BiffException e) {
            e.printStackTrace();
        }
        return "error";
    }
}
 

相关文章:

  • Android 开发 sqllite文件查看,SqlLite文件查看步骤
  • GreenDao查询,Querying
  • 新版gradle 找不到 greendao 报错 android studio 怎样查看导报文件 怎样打开db文件 android greendao 工具类使用以及数据更新
  • android.content.res.Resources$NotFoundException: String resource ID #0x1
  • 通过Interface:fragment向activity传值
  • kotlin 基础语法
  • Kotlin 基本数据类型
  • Android写入文件电脑上看不到的原因
  • DexArchiveMergerException,Could not resolve all files for configuration,Failed to resolve: com.githu
  • StringUtils在commons-lang3和commons-lang中的区别,下载commons-lang3.jar包
  • android.os.NetworkOnMainThreadException
  • 编译release版,报错:the apk for your currently selected variant(app-release-unsigned.apk)is not signed.
  • Kotlin 条件控制
  • Debugview(VC调试工具)是一款电脑查错调试软件,该工具是程序员调试必备,能在运行程序后将错误提示完整记录在日志文本中,以供直接查看,进行故障修复,快下载使用吧!
  • Android解决读取txt文件中文乱码问题,reload和cnvert区别,按行读取txt文件,按 |进行字符串分割
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Angular2开发踩坑系列-生产环境编译
  • create-react-app做的留言板
  • export和import的用法总结
  • JavaScript DOM 10 - 滚动
  • JS函数式编程 数组部分风格 ES6版
  • MySQL用户中的%到底包不包括localhost?
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Next.js之基础概念(二)
  • 从零开始的无人驾驶 1
  • 给第三方使用接口的 URL 签名实现
  • 今年的LC3大会没了?
  • 马上搞懂 GeoJSON
  • 想使用 MongoDB ,你应该了解这8个方面!
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #pragma pack(1)
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (多级缓存)缓存同步
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)计算机毕业设计大学生兼职系统
  • (十三)Maven插件解析运行机制
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .NET Standard 的管理策略
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET与 java通用的3DES加密解密方法
  • .NET中winform传递参数至Url并获得返回值或文件
  • .php文件都打不开,打不开php文件怎么办
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @Bean, @Component, @Configuration简析
  • @SentinelResource详解
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [Android 数据通信] android cmwap接入点
  • [android] 请求码和结果码的作用
  • [flink总结]什么是flink背压 ,有什么危害? 如何解决flink背压?flink如何保证端到端一致性?
  • [IE编程] 如何获得IE版本号
  • [IM] [Webhook] Webhook实现IM平台机器人
  • [leetcode] Balanced Binary Tree