在开发中可能会经常遇到将数据导出到excel表中,然后调用打印机来将excel打印出来,当然这种情况在java中是经常需要的,但是在Android中可能会比较少这种情况,因为毕竟在Android中要将导出的excel表进行打印的话手机上还得安装打印的相关驱动,但是将数据导入到excel还是经常见到的,下面就一起来分析吧。
先上效果图:
1、一般情况下我们会用第三方的jar包来帮助实现,比如 jxl.jar , poi.jar
点击下载开发需要的jar包
2、开发的时候需要注意加上读写权限,尤其在Android 6.0 的时候需要动态去申请读写的权限
if (ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST);
} else {
saveToExcel.writeToExcel(name,sex,phone,address);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == MY_PERMISSIONS_REQUEST) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
saveToExcel.writeToExcel(name,sex,phone,address);
} else {
// Permission Denied
Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
}
return;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
3、指定Excel文件存放的文件夹,并为文件取名
public static String getExcelDir() {
// SD卡指定文件夹
String sdcardPath = Environment.getExternalStorageDirectory()
.toString();
File dir = new File(sdcardPath + File.separator + "Excel"
+ File.separator + "Person");
if (dir.exists()) {
return dir.toString();
} else {
dir.mkdirs();
Log.e("BAG", "保存路径不存在,");
return dir.toString();
}
}
在activity 中进行调用 :
String excelPath = getExcelDir()+ File.separator+"demo.xls";
4、将数据存入到Excel表中,在这里写了一个工具类saveToExcel(),具体代码如下
public class SaveToExcelUtil {
private WritableWorkbook wwb;
private String excelPath;
private File excelFile;
private Activity activity;
public SaveToExcelUtil(Activity activity, String excelPath) {
this.excelPath = excelPath;
this.activity = activity;
excelFile = new File(excelPath);
createExcel(excelFile);
}
// 创建excel表.
public void createExcel(File file) {
WritableSheet ws = null;
try {
if (!file.exists()) {
wwb = Workbook.createWorkbook(file);
ws = wwb.createSheet("sheet1", 0);
// 在指定单元格插入数据
Label lbl1 = new Label(0, 0, "姓名");
Label lbl2 = new Label(1, 0, "性别");
Label lbl3 = new Label(2, 0, "电话");
Label lbl4 = new Label(3, 0, "地址");
ws.addCell(lbl1);
ws.addCell(lbl2);
ws.addCell(lbl3);
ws.addCell(lbl4);
// 从内存中写入文件中
wwb.write();
wwb.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
//将数据存入到Excel表中
public void writeToExcel(Object... args) {
try {
Workbook oldWwb = Workbook.getWorkbook(excelFile);
wwb = Workbook.createWorkbook(excelFile, oldWwb);
WritableSheet ws = wwb.getSheet(0);
// 当前行数
int row = ws.getRows();
Label lab1 = new Label(0, row, args[0] + "");
Label lab2 = new Label(1, row, args[1] + "");
Label lab3 = new Label(2, row, args[2] + "");
Label lab4 = new Label(3, row, args[3] + "");
ws.addCell(lab1);
ws.addCell(lab2);
ws.addCell(lab3);
ws.addCell(lab4);
// 从内存中写入文件中,只能刷一次.
wwb.write();
wwb.close();
Toast.makeText(activity, "保存成功", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
}
如果开发中需要向指定模板的Excel中写入数据,可以参考我的下一篇文章:
Android 将数据保存到模板中的Excel
如果开发中需要想制定的Word模板中写入数据,可参考:
将数据写入到制定的Word模板中
需要的源码的可直接下载:点击下载源代码