需要jxl.jar包,导入到你的项目中: 下载地址:
https://download.csdn.net/my/uploadspackage 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 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 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 li_one = new ArrayList(); ArrayList 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 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 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"; } }