需要jxl.jar包,导入到你的项目中:
下载地址:
javascript:void(0)
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";
}
}