Android系统直接输出Excel文档

一、背景

  • 以前Android设备只具备生成txt的能力,数据内容不直观,可读性较差,如果需要Excel文档数据,通常要通过PC软件来进行二次封装和转化,步骤多且繁琐。
  • 随着生产过程的深入,越来越需要Android设备直接转化并产出Excel类型文档,提高效率和准确性。
  • 鉴于以上问题,我们尝试引入WEB端常用的处理Excel表格的解决方案JXL的使用。

二、JXL的特点

  • 一个轻量级的JS插件用于创建与Excel兼容并基于WEB的交互式表格和电子表格
  • 读取和写入Excel电子表格数据
  • 生成Excel格式的电子表格数据
  • 支持对字体,数字,日期的格式化
  • 支持对单元格加阴影和加色彩
  • 修改存在的工作表
  • 支持图片的创建
  • 日志记录可以定制

三、JXL在Android端如何引入

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

四、JXL介绍

  • 主要API介绍

    • Workbook:读工作簿
    • WritableWorkbook:写工作簿
    • Sheet:读工作表
    • WritableSheet:写工作表
    • Cell:读单元格
    • WritableCell:写单元格
    • Label:单元格内容
  • 应用
    excel文件由一个工作簿(Workbook)组成,工作簿由工作表(sheet)组成,每个工作表又由很多单元格(cell)组成

    • WritableFont:文本输入的格式
    // 字体 ARIAL, 字号 14  bold  粗体
    WritableFont arial14font = new WritableFont(WritableFont.ARIAL, 14, BOLD);
    // 字体的颜色
    arial14font.setColour(Colour.BLACK);
    //设置下划线
    arial14font.setUnderlineStyle(UnderlineStyle.SINGLE);
    
    • WritableCellFormat:单元格输入的格式
    WritableCellFormat arial14format = new WritableCellFormat(arial14font);
    // 水平对齐方式
    arial14format.setAlignment(Alignment.CENTRE);
    // 垂直对齐方式
    arial14format.setVerticalAlignment(VerticalAlignment.CENTRE);
    // 边框的格式
    arial14format.setBorder(Border.ALL, BorderLineStyle.THIN);
    // 底色
    arial14format.setBackground(Colour.VERY_LIGHT_YELLOW);
    
    • getWorkbook:得到工作簿对象
    • createWorkbook:创建一个工作簿对象
      第一个参数是必须的:文件或输入流,第二个参数:工作簿是作为读出来的excel的一些约定,如地区,编码等.
    • createSheet:创建工作表
    • getSheet:获取工作表对象
    • mergeCells:合并单元格
      包含起始第几行、第几列,终到第几行、第几列
    • addCell:新增单元格
    • new Label():创建单元格内容
      包含第几行、第几列、文本内容、格式等入参
    • setRowView:设置行
    • setColumnView:设置列

五、调用示例

  /*** 生成excel*/public boolean toTempReviewExcel(OutputStream excelStream, List<?> dataList) throws Exception {if (dataList == null || dataList.size() == 0) {return false;}// 通过自定义注解获取工作表名称和工作区域信息Class<?> dataType = dataList.get(0).getClass();String sheetName = getSheetName(dataType);List<ExcelClassKey> keys = getKeys(dataType);WritableWorkbook workbook = null;try {// 创建一个工作簿workbook = Workbook.createWorkbook(excelStream);// 创建一个工作表,位置第一个WritableSheet sheet = workbook.createSheet(sheetName, 0);// 第一行内容,合并单元格第1行和第2行,以及第1列和第21列sheet.mergeCells(0, 0, 22, 1);sheet.addCell(new Label(0, 0, sheetName, arial14format));// 添加titlefor (int x = 0; x < keys.size(); x++) {// 合并相邻单元格if (keys.get(x).getIndex() < 2) {sheet.addCell(new Label(x, 8, keys.get(x).getTitle(), arial12format));} else if (keys.get(x).getIndex() == 2) {sheet.mergeCells(x, 8, x + 1, 8); // 合并单元格sheet.addCell(new Label(x, 8, keys.get(x).getTitle(), arial12format));}  else {sheet.addCell(new Label(x + 2, 8, keys.get(x).getTitle(), arial12format));}// 设置行高500sheet.setRowView(8, 500);}fieldCache.clear();// 添加数据for (int y = 0; y < dataList.size(); y++) {for (int x = 0; x < keys.size(); x++) {String fieldName = keys.get(x).getFieldName();Field field = getField(dataType, fieldName);Object value = field.get(dataList.get(y));String content = value != null ? value.toString() : "";// 合并相邻单元格if (keys.get(x).getIndex() < 2) {sheet.addCell(new Label(x, y + 9, content, arial12format));} else if (keys.get(x).getIndex() == 2) {sheet.mergeCells(x, y + 9, x + 1, y + 9);sheet.addCell(new Label(x, y + 9, content, arial12format));}  else {sheet.addCell(new Label(x + 2, y + 9, content, arial12format));}// 设置行高500sheet.setRowView(y + 9, 500);}}} catch (Exception e) {throw e;} finally {if (workbook != null) {try {workbook.write();// IO操作需要关闭workbook.close();} catch (IOException e) {e.printStackTrace();} catch (WriteException e) {e.printStackTrace();}}try {// IO操作需要关闭excelStream.close();} catch (IOException e) {e.printStackTrace();}}return true;}

六、总结

  • IO操作需要close()
  • 每次createWorkbook的操作,相关格式样式需要重新创建
  • 合并和操作单元格需要知道确切的位置信息(第几行、第几列)
  • JXL同样支持读物Excel数据,并转化为常用的数据结构,前提是按照表格创建的规则读取
  • JXL还提供了复制工作表,复制单元格等操作,可以通过查询API来了解其具体的用法

Android系统直接输出Excel文档相关推荐

  1. MFC输出EXCEL文档的过程总结

    于目前的工作内容涉及到了几处需要输出EXCEL表格的内容,因此在网上也查找了些资料,在下面总结下,以方便使用: 1.当你输出的内容已经在输出的时候全部知道,并且输出格式已经固定,那么你就可以使用下面的 ...

  2. 一个excel文档里复制黏贴另外表单跟着变动_利用Excel连接Power BI,实现PPT报告自动输出...

    ​文/HALI就职于汽车行业战略部门 专注汽车市场信息情报收集和分析 因为工作需要,每月周期性的更新数据和撰写PPT 报告成为繁重的劳动.结果是很多时间花费在数据处理上,真正的分析工作,往往只能草草收 ...

  3. “在线Excel文档编辑系统”新手开发训练营开营啦,完全免费,欲报从速!

    疫情当前,远程办公风口正盛,腾讯文档.飞书.石墨文档等在线协同办公软件供应商迅速崛起.抓住风口,你也能造就下一个BAT. 本期训练营,将引导您快速开发一款基于Vue框架,简单.能迅速投入使用的在线Ex ...

  4. Stata outreg2命令中(label)无法正确输出Word/Excel文档

    版本:Stata 17,Win10 命令如下: . sysuse auto,clear . outreg2 using test.doc, replace sum(detail) keep(price ...

  5. php 页面上显示xls文档,phpExcel输出xls文档显示乱码的解决方法

    phpExcel输出xls文档显示乱码的解决办法 最近在做一些报表的系统,主要是对excel的读取和处理操作. 之前在自己的机器上做开发的时候,没有出现乱码的情况, 即使是我布置到服务器上,导入,导出 ...

  6. 单sheet页的多个EXCEL文档合并为一个多sheet页的EXCEL文档

    文章目录 前言 一.生成多个excel文档 二.合并excel文档 1. excel文档的实质 2.修改文件拓展名为.zip,并解压 3.处理XML文件 4.压缩文件夹组,并修改.zip为.xlsx ...

  7. VB中操作Excel文档

    ​​​​​​​篇一:利用 Python 操作 Excel文档 利用 Python 操作 Excel 在Excel 2010中打开VBA编辑器,请按 Alt + F11 打开: 以下代码在 Excel ...

  8. Solid Converter PDF10.1Crack,将pdf表转换为可编辑的Excel文档

    Solid Converter PDF10.1Crack,将pdf表转换为可编辑的Excel文档 Solid Converter PDF是Solid Documents的软件,可将PDF文档转换为Wo ...

  9. Python实现谷歌翻译爬虫,翻译PDF,翻译Excel,支持excel文档打开翻译,支持xlsx,xlsm等格式。

    前言: 这两个Python脚本是我在实习期间完成的,具体来自于小组主管的两个小需求.做完之后感觉还是挺有收获的. 实现谷歌翻译,首先需要将我们写的Python脚本还有需要翻译的文件放到谷歌浏览器的安装 ...

最新文章

  1. PHP气缸种类,气缸分类方法有哪些及气缸的种类
  2. 算法分析与设计之多处最优服务次序问题2
  3. python中可变参数args_python 可变参数 *args, **kwds
  4. 20佳精美404错误页面设计欣赏
  5. 发送ActivityFeed的隐藏功能
  6. Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法
  7. Python : *args和**kwargs是什么东东呢?
  8. 设置日志不记录指定类型的文件,日志文件的切割,配置静态元素过期时间
  9. turbo码书籍推荐
  10. The JSR-133 Cookbook for Compiler Writers 中英对照版翻译
  11. android动态设置渐变背景
  12. 回味宋朝——文化的盛世
  13. 项目管理知识体系指南(四)项目管理范围
  14. 51单片机基础——串口发送66,数码管显示66
  15. 为什么NFT的头像卖这么贵?这与IPFS/FIL有什么联系
  16. 中国品牌授权市场规模分析:2020年中国授权商品零售额为1106亿元,同比增长11.5%[图]
  17. AI开发者被疯抢,华为做了什么?
  18. 重读 阿里中供系前世今生:马云最神秘的子弟兵二
  19. 家用计算机按键不灵怎么修,电脑键盘两个ctrl键失灵怎么回事?ctrl键失灵的修复方法...
  20. java 链表 深拷贝_单链表深拷贝的实现

热门文章

  1. 《“理想我”与“现实我”》
  2. 应用程序如何使用驱动程序
  3. Makefile 指南
  4. 计算机网络atm功能,自考计算机网络实用技术考核知识点之ATM原理
  5. 你想拥有一台可以水下通话的手机吗?
  6. .c文件如何一步步变成.exe文件
  7. 嵌入式软件工程师笔试面试指南-网络编程
  8. oracle 固定顺序排序
  9. Unity之使物体透明化和还原
  10. word中使用mathtype编辑公式并添加序号