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() + "\t"); } System.out.print("\n"); } // 得到第一列第一行的单元格 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);

 二、遇到的问题

    不会应用

三、明日计划

   明天继续学习相关内容

posted @ 2021-03-10 17:35  小仙女W  阅读(177)  评论(0编辑  收藏  举报