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);