zoukankan      html  css  js  c++  java
  • 2021.3.10 Android导出Excel表

    一、今日学习内容

       

    将数据导入与 导出Excel文件案例

    1、引入Excel 依赖包

    在app的build.gradle里面添加依赖包:

     implementation 'net.sourceforge.jexcelapi:jxl:2.6.12'

    2、编写ExcelUtils 工具类

    复制代码
    package com.rfid.uhfsdktest.util;
    
    import android.Manifest;
    import android.app.Activity;
    import android.content.pm.PackageManager;
    import android.support.v4.app.ActivityCompat;
    import android.util.Log;
    
    import com.rfid.uhfsdktest.bean.InventoryBuffer;
    import com.rfid.uhfsdktest.bean.OperateTagBuffer;
    import com.rfid.uhfsdktest.R;
    import com.rfid.uhfsdktest.UHFApplication;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.lang.reflect.Method;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Locale;
    
    import jxl.Cell;
    import jxl.Sheet;
    import jxl.Workbook;
    import jxl.WorkbookSettings;
    import jxl.read.biff.BiffException;
    import jxl.write.Label;
    import jxl.write.WritableCell;
    import jxl.write.WritableCellFormat;
    import jxl.write.WritableFont;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;
    import jxl.write.WriteException;
    import jxl.write.biff.RowsExceededException;
    
    public class ExcelUtils {
    
        public static WritableFont arial14font = null;
    
        public static WritableCellFormat arial14format = null;
        public static WritableFont arial10font = null;
        public static WritableCellFormat arial10format = null;
        public static WritableFont arial12font = null;
        public static WritableCellFormat arial12format = null;
    
        public final static String UTF8_ENCODING = "UTF-8";
        public final static String GBK_ENCODING = "GBK";
    
        private final static String[] mContent = new String[]{"ID", "EPC", "PC",
                UHFApplication.getContext().getResources().getString(R.string.real_list_times),
                "RSSI",UHFApplication.getContext().getString(R.string.real_list_freq),
                UHFApplication.getContext().getString(R.string.tag_inventory_time)};
    
        private final static String[] mOperateData = new String[] {
                "ID","PC","CRC","EPC",UHFApplication.getContext().getString(R.string.data),
                UHFApplication.getContext().getString(R.string.data_length),
                UHFApplication.getContext().getString(R.string.list_antenna_port),
                UHFApplication.getContext().getString(R.string.access_list_times)
        };
    
        private final static String FILE_SUFFIX = ".xls";
    
        // Storage Permissions
        private static final int REQUEST_EXTERNAL_STORAGE = 1;
        private static String[] PERMISSIONS_STORAGE = {
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE
        };
    
        public static void format() {
    
            try {
                arial14font = new WritableFont(WritableFont.ARIAL, 14,
                        WritableFont.BOLD);
                arial14font.setColour(jxl.format.Colour.LIGHT_BLUE);
                arial14format = new WritableCellFormat(arial14font);
                arial14format.setAlignment(jxl.format.Alignment.CENTRE);
                arial14format.setBorder(jxl.format.Border.ALL,
                        jxl.format.BorderLineStyle.THIN);
                arial14format.setBackground(jxl.format.Colour.VERY_LIGHT_YELLOW);
                arial10font = new WritableFont(WritableFont.ARIAL, 10,
                        WritableFont.BOLD);
                arial10format = new WritableCellFormat(arial10font);
                arial10format.setAlignment(jxl.format.Alignment.CENTRE);
                arial10format.setBorder(jxl.format.Border.ALL,
                        jxl.format.BorderLineStyle.THIN);
                arial10format.setBackground(jxl.format.Colour.LIGHT_BLUE);
                arial12font = new WritableFont(WritableFont.ARIAL, 12);
                arial12format = new WritableCellFormat(arial12font);
                arial12format.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN);
    
            } catch (WriteException e) {
    
                e.printStackTrace();
            }
    
        }
    
        public static void write(String inputFile)  {
    
            try {
                inputFile = inputFile.trim() + FILE_SUFFIX;
    
                File file = new File(inputFile);
    WorkbookSettings wbSettings = new WorkbookSettings(); wbSettings.setLocale(new Locale("en", "EN")); WritableWorkbook workbook = Workbook.createWorkbook(file, wbSettings); workbook.createSheet("Report", 0); WritableSheet excelSheet = workbook.getSheet(0); workbook.write(); workbook.close(); } catch (IOException e) { e.printStackTrace(); } catch (WriteException e) { e.printStackTrace(); } } public static void initExcel(String fileName, String[] colName) { format(); WritableWorkbook workbook = null; try { File file = new File(fileName); if (!file.exists()) { file.createNewFile(); } workbook = Workbook.createWorkbook(file); WritableSheet sheet = workbook.createSheet("tags", 0); sheet.addCell((WritableCell) new Label(0, 0, fileName,arial14format)); for (int col = 0; col < colName.length; col++) { sheet.addCell(new Label(col, 0, colName[col], arial10format)); } workbook.write(); } catch (Exception e) { e.printStackTrace(); } finally { if (workbook != null) { try { workbook.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public static void writeOperateTagToExcel (String fileName, List<OperateTagBuffer.OperateTagMap> maps) { fileName = fileName.trim() + FILE_SUFFIX; initExcel(fileName,mOperateData); writeOperateTagListToExcel(maps,fileName); } public static void writeTagToExcel(String fileName, List<InventoryBuffer.InventoryTagMap> maps) { fileName = fileName.trim() + FILE_SUFFIX; initExcel(fileName,mContent); writeObjListToExcel(maps,fileName); } @SuppressWarnings("unchecked") public static <T> void writeObjListToExcel(List<T> objList,String fileName) { if (objList != null && objList.size() > 0) { WritableWorkbook writebook = null; InputStream in = null; try { WorkbookSettings setEncode = new WorkbookSettings(); setEncode.setEncoding(UTF8_ENCODING); in = new FileInputStream(new File(fileName)); Workbook workbook = Workbook.getWorkbook(in); writebook = Workbook.createWorkbook(new File(fileName),workbook); WritableSheet sheet = writebook.getSheet(0); for (int j = 0; j < objList.size(); j++) { ArrayList<String> list = new ArrayList<String>(); InventoryBuffer.InventoryTagMap map = ((InventoryBuffer.InventoryTagMap)(objList.get(j))); list.add(j + 1 + ""); list.add(map.strEPC); list.add(map.strPC); list.add(map.nReadCount + ""); list.add((Integer.parseInt(map.strRSSI) - 129) + "dBm"); list.add(map.strFreq); list.add(new SimpleDateFormat("yyyy/MM/dd").format(map.mDate) + " " + new SimpleDateFormat("kk:mm:ss").format(map.mDate)); for (int i = 0; i < list.size(); i++) { sheet.addCell(new Label(i, j + 1, list.get(i), arial12format)); } } writebook.write(); } catch (Exception e) { e.printStackTrace(); } finally { if (writebook != null) { try { writebook.close(); } catch (Exception e) { e.printStackTrace(); } } if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } } } @SuppressWarnings("unchecked") public static <T> void writeOperateTagListToExcel(List<T> objList, String fileName) { if (objList != null && objList.size() > 0) { WritableWorkbook writebook = null; InputStream in = null; try { WorkbookSettings setEncode = new WorkbookSettings(); setEncode.setEncoding(UTF8_ENCODING); in = new FileInputStream(new File(fileName)); Workbook workbook = Workbook.getWorkbook(in); writebook = Workbook.createWorkbook(new File(fileName),workbook); WritableSheet sheet = writebook.getSheet(0); for (int j = 0; j < objList.size(); j++) { ArrayList<String> list = new ArrayList<String>(); OperateTagBuffer.OperateTagMap map = ((OperateTagBuffer.OperateTagMap)(objList.get(j))); list.add(j + 1 + ""); list.add(map.strPC); list.add(map.strCRC); list.add(map.strEPC); list.add(map.strData); list.add(map.nDataLen + ""); list.add(map.btAntId + ""); list.add(map.nReadCount + ""); for (int i = 0; i < list.size(); i++) { sheet.addCell(new Label(i, j + 1, list.get(i),arial12format)); } } writebook.write(); } catch (Exception e) { e.printStackTrace(); } finally { if (writebook != null) { try { writebook.close(); } catch (Exception e) { e.printStackTrace(); } } if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } } } public static Object getValueByRef(Class cls, String fieldName) { Object value = null; fieldName = fieldName.replaceFirst(fieldName.substring(0, 1), fieldName .substring(0, 1).toUpperCase()); String getMethodName = "get" + fieldName; try { Method method = cls.getMethod(getMethodName); value = method.invoke(cls); } catch (Exception e) { e.printStackTrace(); } return value; } /** * Checks if the app has permission to write to device storage * * If the app does not has permission then the user will be prompted to grant permissions * * @param activity */ public static void verifyStoragePermissions(Activity activity) { // Check if we have write permission int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permission != PackageManager.PERMISSION_GRANTED) { // We don't have permission so prompt the user ActivityCompat.requestPermissions( activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE ); } } public static void readExcel(String filepath) { try { /** * 后续考虑问题,比如Excel里面的图片以及其他数据类型的读取 **/ InputStream is = new FileInputStream(filepath); Workbook book = Workbook.getWorkbook(new File(filepath)); book.getNumberOfSheets(); // 获得第一个工作表对象 Sheet sheet = book.getSheet(0); int Rows = sheet.getRows(); int Cols = sheet.getColumns(); System.out.println("当前工作表的名字:" + sheet.getName()); System.out.println("总行数:" + Rows); System.out.println("总列数:" + Cols); for (int i = 0; i < Cols; ++i) { for (int j = 0; j < Rows; ++j) { // getCell(Col,Row)获得单元格的值 System.out.print((sheet.getCell(i, j)).getContents() + " "); } System.out.print(" "); } // 得到第一列第一行的单元格 Cell cell1 = sheet.getCell(0, 0); String result = cell1.getContents(); System.out.println(result); book.close(); } catch (Exception e) { System.out.println(e); } } }
    复制代码

    3、调用方式

    3.1、导出excel调用方式:

    private List<InventoryBuffer.InventoryTagMap> mTags = new ArrayList<InventoryBuffer.InventoryTagMap>();
    final String file = SDCardRootDir.getAbsolutePath() + "/" + mDirectory.getText().toString() + "/" + mFileName.getText().toString() ;
    ExcelUtils.writeTagToExcel(file,data);

    3.2、导入excel调用方式:

    String filePath = Environment.getExternalStorageDirectory() + File.separator +"test.xls" ;
    ExcelUtils.readExcel(filePath);

     二、遇到的问题

        不会应用

    三、明日计划

       明天继续学习相关内容

  • 相关阅读:
    第48天-shell(2013.09.25)
    嵌入式Linux gdb core dump快速定位程序crash问题
    va_arg va_start va_end 获取函数参数内容
    Ubunut apache2 服务器 搭建 文件下载
    CRC16 串口校验
    Linux 处理中文字符串 :/区分中文和英文的方法
    LINUX 工具移植:scp 快速拷贝文件到开发板
    打印内存变量定位 程序出现内存方面的问题
    Linux C 调用 ping命令 检测网络状态
    Ubuntu Gitlab 备份代码服务器
  • 原文地址:https://www.cnblogs.com/wmdww/p/14903655.html
Copyright © 2011-2022 走看看