公司有个项目是需要把数据导出Excel表格的,最初是使用的poi来导出的,把poi的jar包放进去后出现各种各样的问题,实在麻烦,然后在网上继续找有没有简单的,就找到了jxl,个人感觉操作确实和网上说的是比poi简单,当然,功能也简单,不过能满足我的业务需求就行,效果图如下:

首先添加dependencies:

implementation group: 'net.sourceforge.jexcelapi', name: 'jxl', version: '2.6.12'

生成excel表格的工具类:

package com.zxl.temp.utilsimport android.content.Context
import android.os.Environment
import android.text.TextUtils
import android.util.Log
import com.zxl.temp.R
import jxl.Workbook
import jxl.WorkbookSettings
import jxl.format.Alignment
import jxl.format.Border
import jxl.format.BorderLineStyle
import jxl.format.Colour
import jxl.write.*
import java.io.File
import java.io.FileInputStream
import java.io.IOException
import java.io.InputStream
import kotlin.collections.ArrayListobject ExcelUtil {var arial14font: WritableFont? = nullvar arial14format: WritableCellFormat? = nullvar arial10font: WritableFont? = nullvar arial10format: WritableCellFormat? = nullvar arial12font: WritableFont? = nullvar arial12format: WritableCellFormat? = nullprivate const val UTF8_ENCODING = "UTF-8"/*** 单元格的格式设置 字体大小 颜色 对齐方式、背景颜色等...*/private fun format() {try {arial14font = WritableFont(WritableFont.ARIAL, 14, WritableFont.BOLD)arial14font!!.colour = Colour.LIGHT_BLUEarial14format = WritableCellFormat(arial14font)arial14format!!.alignment = Alignment.CENTREarial14format!!.setBorder(Border.ALL, BorderLineStyle.THIN)arial14format!!.setBackground(Colour.VERY_LIGHT_YELLOW)arial10font = WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD)arial10format = WritableCellFormat(arial10font)arial10format!!.alignment = Alignment.CENTREarial10format!!.setBorder(Border.ALL, BorderLineStyle.THIN)arial10format!!.setBackground(Colour.GRAY_25)arial12font = WritableFont(WritableFont.ARIAL, 10)arial12format = WritableCellFormat(arial12font)arial10format!!.alignment = Alignment.CENTRE //对齐格式arial12format!!.setBorder(Border.ALL, BorderLineStyle.THIN) //设置边框} catch (e: WriteException) {e.printStackTrace()}}private fun initExcel(fileName: String, colName: Array<String>) {format()var workbook: WritableWorkbook? = nulltry {val file = File(fileName)if (!file.exists()) {file.createNewFile()}workbook = Workbook.createWorkbook(file)val sheet = workbook!!.createSheet("error", 0)//创建标题栏sheet.addCell(Label(0, 0, fileName, arial14format) as WritableCell?)for (col in colName.indices) {sheet.addCell(Label(col, 0, colName[col], arial10format))}sheet.setRowView(0, 340) //设置行高workbook!!.write()} catch (e: Exception) {e.printStackTrace()} finally {if (workbook != null) {try {workbook.close()} catch (e: Exception) {e.printStackTrace()}}}}private fun <T> writeObjListToExcel(objList: List<T>?, fileName: String?) {if (objList != null && objList.isNotEmpty()) {var writebook: WritableWorkbook? = nullvar `in`: InputStream? = nulltry {val setEncode = WorkbookSettings()setEncode.encoding = UTF8_ENCODING`in` = FileInputStream(File(fileName))val workbook: Workbook = Workbook.getWorkbook(`in`)writebook = Workbook.createWorkbook(File(fileName), workbook)val sheet = writebook.getSheet(0)for (j in objList.indices) {val list = objList[j] as ArrayList<String>for (i in 0 until list.size) {sheet.addCell(Label(i, j + 1, list[i], arial12format))if (list[i].length <= 5) {sheet.setColumnView(i, list[i].length + 8) //设置列宽} else {sheet.setColumnView(i, list[i].length + 5) //设置列宽}}sheet.setRowView(j + 1, 350) //设置行高}writebook.write()} catch (e: java.lang.Exception) {e.printStackTrace()} finally {if (writebook != null) {try {writebook.close()} catch (e: java.lang.Exception) {e.printStackTrace()}}if (`in` != null) {try {`in`.close()} catch (e: IOException) {e.printStackTrace()}}}}}private fun makeDir(dir: File?) {if (!dir!!.exists()) {dir.mkdirs()}}fun <T> exportExcel(context: Context?,title: Array<String>,objList: List<T>?,fileName: String) {var folderPath = CommonlyUsedUtil.getStoragePath(context, true)if (TextUtils.isEmpty(folderPath)) {folderPath = CommonlyUsedUtil.getStoragePath(context, false)if (TextUtils.isEmpty(folderPath)) {folderPath = Environment.getExternalStorageDirectory().path}}val file = File("$folderPath/ErrorInfo")makeDir(file)val filePath = "$folderPath/ErrorInfo/${fileName}"Log.d("ExcelUtil", "文件路径:${file}/$fileName")initExcel(file.toString() + File.separator + fileName, title)writeObjListToExcel(objList, filePath)ToastUtil.showToast(context!!.resources.getString(R.string.label_export_success, filePath))}
}

调用工具类生成表格

private val title = arrayOf(APP.getContext()!!.resources.getString(R.string.label_number),APP.getContext()!!.resources.getString(R.string.label_error_code),APP.getContext()!!.resources.getString(R.string.label_error_title),APP.getContext()!!.resources.getString(R.string.label_fault_time))viewBinding!!.btnExport.setOnClickListener {if (!ClickUtil.isFastClick()) {return@setOnClickListener}if (APP.faultInfoList.size == 0) {ToastUtil.showToast(resources.getString(R.string.label_export_empty))return@setOnClickListener}val date = SimpleDateFormat("yyyyMMddHHmmss").format(System.currentTimeMillis())val fileName = "$date.xls"val dataList = mutableListOf<MutableList<String>>()//此处将数据集合转化为mutableListOf<MutableList<String>>APP.faultInfoList.forEach {val colList = mutableListOf<String>()colList.add("${it.num}")colList.add("${it.code}")colList.add("${it.msg}")colList.add("${it.time}")dataList.add(colList)}ExcelUtil.exportExcel(this, title, dataList, fileName)}

这样就能在指定的路径下生成xls文件了,失败的话请检查权限问题。

参考文档:

Android使用jxl快速生成Excel表

Android使用jxl快速导出Excel表格相关推荐

  1. Android使用jxl快速生成Excel表

    super.onCreate();//模拟数据集合students = new ArrayList<Strudent>();for (int i = 1; i <= 10; i++) ...

  2. jxl 新版电子表格_Android使用jxl快速生成Excel表

    前言 在Android开发时,有些时候需要把app中List集合数据,导出到Excel表中,方便进一步操作.Android可以使用jxl或poi来导出Excel,关于jxl和poi的比较网上有很多说法 ...

  3. 表格导出计算机,电脑怎么导出excel表格数据-如何将百度指数数据导出到Excel表格...

    系统没有导出功能,电脑表格里的数据有什么方法拿... 将网页表格数据导入到Excel中的方法: 第一步,将包括所需表格的网页打开,并按CTRL C把网址复制到剪贴板,以备下一步使用. 第二步,打开运行 ...

  4. latex 的列表和表格环境-快速导入excel表格源文件

    latex 的列表和表格环境-快速导出excel表格源文件 列表-1 基本语法 \begin{itemize}\item 列表内容\item 列表内容\item 列表内容 \end{itemiz ...

  5. java中使用jxl导出Excel表格详细通用步骤

    该方法一般接收两个参数,response和要导出的表格内容的list. 一般我们将数据库的数据查询出来在页面进行展示,根据用户需求,可能需要对页面数据进行导出. 此时只要将展示之前查询所得的数据放入s ...

  6. vb用数组方式快速导出MSFlexGrid表格数据到Excel表格中

    本来从MSFlexGrid或MSHFlexGrid导出数据到Excel中,是一个非常简单的问题,但论坛里还是经常有人问如何导出,有的虽然知道用单元格赋值方式循环导出,但速度太慢,因此写了一个通用的数据 ...

  7. java中使用jxl导出excel表格的工具类(全网唯一亲测可用,在原来基础上扩展)

    java中后台导出excel的话,有两种方案,一是使用poi(不过由于是windows版本的,存在不兼容,但功能更多,更强大),而是使用jxl(纯java编写,不过兼容,简单一些),可以设置输出的ex ...

  8. 快速查询优速多个快递物流,并将信息导出EXCEL表格

    优速,是一家提供全国性快递服务的规模性快递企业,聚焦"大包裹",坚持走差异化发展道路.那么优速快递的物流该如何批量查询,并将信息导出EXCEL表格呢?下面随小编一起用快递批量查询高 ...

  9. excel导出_SpringBoot实现快速导出Excel

     阅读本文约需要6分钟  大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了下MyBatis 几种通用的写法的相关知识,今天跟大 ...

最新文章

  1. NOIP2018 集训(一)
  2. 抛出运行时异常的目的_「JAVA」运行时异常、编译时异常、自定义异常,通过案例实践转译和异常链...
  3. xgboost模型参数详解
  4. 财税、管理知识,离您那么远吗?
  5. 如何找到准确的终端连接端口?(转)
  6. 高并发下如何缩短响应时间?
  7. scala 正则表达式
  8. 武汉CMMI3认证和CMMI5认证在评估的时候需要具备哪些条件?
  9. 【遥感数字图像处理】实验:遥感影像增强方法大全处理看过来(Erdas版)
  10. 前端:分享几个前端素材网站
  11. Java实现餐厅点餐系统
  12. 长尾理论 推荐系统长尾理论
  13. 让div中的p标签文字垂直居中的方法
  14. 软件测试的工作流程是什么?
  15. 异常java.lang.IllegalArgumentException: Validation failed for query for method public abstract
  16. 短视频剪辑如何正确把握“节奏感”,三个小技巧助你快慢有序
  17. 2010企业IT应用9大趋势
  18. HTML代码学习(上)
  19. problem 1205
  20. 无人驾驶技术——P5:3D Object Tracking

热门文章

  1. lol手游一直显示服务器维护,《lol手游》Serveriscurrentlyundermaintenance解决方法 异常解决攻略...
  2. ElasticSearch、可视化页面、kibana安装
  3. Flutter常用插件和对.yaml讲解
  4. 计算机视觉技术在零件识别中的应用,计算机视觉技术在自动化中的应用探析
  5. 软件生存周期过程及其模型
  6. upload组件多个文件上传、自定义文件列表显示及手动上传
  7. Socket传输信息或文件
  8. 关于婚姻你不能不知的事
  9. xlsxwriter EXCEL文件的写入
  10. 定昌rk3288 ubuntu18.04 开发笔记