当前位置: 首页 > article >正文

Android:生成Excel表格并保存到本地

提醒
本文实例是使用Kotlin进行开发演示的。

一、技术方案

  • org.apache.poi:poi
  • org.apache.poi:poi-ooxml

二、添加依赖

[versions]

poi = "5.2.3"
log4j = "2.24.2"

[libraries]

#https://mvnrepository.com/artifact/org.apache.poi/poi
apache-poi = { module = "org.apache.poi:poi", version.ref = "poi" }
apache-poi-ooxml = { module = "org.apache.poi:poi-ooxml", version.ref = "poi" }
# https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core 上面的 apache-poi 需要添加log4j-core
log4j-core = { module = "org.apache.logging.log4j:log4j-core", version.ref = "log4j" }
implementation(libs.apache.poi)
implementation(libs.apache.poi.ooxml)
implementation(libs.log4j.core)

三、效果图

在这里插入图片描述

四、示例代码

TestPoi.kt

package com.example.test.test

import org.apache.poi.ss.usermodel.HorizontalAlignment
import org.apache.poi.ss.usermodel.VerticalAlignment
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import java.io.File
import java.io.FileOutputStream

data class Fruit(
    val id: Long,
    var name: String,
    var price: String,
    var desc: String?,
    var count: Int = 0,
    var tip: String? = null
)


fun getProductList(): List<Fruit> {
    val productList: MutableList<Fruit> = mutableListOf()
    productList.add(Fruit(1001, "蓝莓", "40.00", "新鲜水果", 10))
    productList.add(Fruit(1002, "葡萄", "15.00", "新鲜水果", 20))
    productList.add(Fruit(1003, "苹果", "12.00", "新鲜水果", 30))
    productList.add(Fruit(1004, "香蕉", "8.00", "新鲜水果", 15))
    productList.add(Fruit(1005, "西瓜", "4.00", "新鲜水果", 6))
    productList.add(Fruit(1006, "橙子", "5.00", "新鲜水果", 9))
    productList.add(Fruit(1007, "柚子", "5.00", "新鲜水果", 5))
    productList.add(Fruit(1008, "火龙果", "9.00", "新鲜水果", 11))
    productList.add(Fruit(1009, "猕猴桃", "10.00", "新鲜水果", 12))
    productList.add(Fruit(1010, "哈密瓜", "7.00", "新鲜水果", 6))
    productList.add(Fruit(1011, "皇冠梨", "5.00", "新鲜水果", 8))
    return productList
}

fun createExcelSheet() {
    // 创建一个新的工作簿
    val workbook = XSSFWorkbook()
    // 创建一个工作表(sheet)
    val sheet = workbook.createSheet("水果清单")

    //创建XSSFFont对象
    val headXSSFFont = workbook.createFont()

    //设置字体样式,如字体名称、字体大小、加粗等, 下面设置了字体名称为Arial、字体大小为12、加粗
    headXSSFFont.fontName = "Arial"
    headXSSFFont.fontHeightInPoints = 14
    headXSSFFont.bold = true

    // 创建一个XSSFCellStyle对象来表示要设置的样式
    val headXSSFCellStyle = workbook.createCellStyle()
    // 将字体样式设置到XSSFCellStyle对象中
    headXSSFCellStyle.setFont(headXSSFFont)


    // 居中对齐
    headXSSFCellStyle.alignment = HorizontalAlignment.CENTER
    headXSSFCellStyle.verticalAlignment = VerticalAlignment.CENTER

    // 创建行(0基索引)
    var xssFRow = sheet.createRow(0)
    //设置行高
    xssFRow.heightInPoints = 40F
//    xssFRow.height = 600
    //设置样式
//    xssFRow.rowStyle = headXSSFCellStyle
    val excleHead = arrayOf("编号", "水果名", "价格(斤)", "库存(箱)", "描述", "备注")
    for ((index, item) in excleHead.withIndex()) {
        var width = 20 * 256
        if (index == 2 || index == 3) {
            width = 15 * 256
        } else if (index == 4 || index == 5) {
            width = width shl 1
        }
        // 设置列宽
        sheet.setColumnWidth(index, width)
        val xSSFCell = xssFRow.createCell(index)
        //设置样式
        xSSFCell.cellStyle = headXSSFCellStyle
        xSSFCell.setCellValue(item)
    }

    val deviceInfoList = getProductList()

    val xSSFFont = workbook.createFont()
    xSSFFont.fontHeightInPoints = 12
    val xSSFCellStyle = workbook.createCellStyle()
    xSSFCellStyle.setFont(xSSFFont)
    xSSFCellStyle.alignment = HorizontalAlignment.CENTER
    xSSFCellStyle.verticalAlignment = VerticalAlignment.CENTER

    for ((index, item) in deviceInfoList.withIndex()) {
        xssFRow = sheet.createRow(index + 1)
        xssFRow.heightInPoints = 40F
//        xssFRow.height = 600
        val cXSSFCell0 = xssFRow.createCell(0)
        cXSSFCell0.setCellValue(item.id.toString())
        cXSSFCell0.cellStyle = xSSFCellStyle

        val cXSSFCell1 = xssFRow.createCell(1)
        cXSSFCell1.setCellValue(item.name)
        cXSSFCell1.cellStyle = xSSFCellStyle

        val cXSSFCell2 = xssFRow.createCell(2)
        cXSSFCell2.setCellValue(item.price)
        cXSSFCell2.cellStyle = xSSFCellStyle

        val cXSSFCell3 = xssFRow.createCell(3)
        cXSSFCell3.setCellValue(item.count.toString())
        cXSSFCell3.cellStyle = xSSFCellStyle

        val cXSSFCell4 = xssFRow.createCell(4)
        cXSSFCell4.setCellValue(item.desc.toString())
        cXSSFCell4.cellStyle = xSSFCellStyle
    }

    try {
        val fileOutputStream = FileOutputStream("水果清单.xlsx")
//        val fileOutputStream = FileOutputStream(File("D:\\水果清单.xlsx"))// Windows磁盘: D盘
//        val fileOutputStream = FileOutputStream(File("/Users/chinadragon/Desktop/水果清单.xlsx"))// mac 文件地址
        workbook.write(fileOutputStream)
        fileOutputStream.close()
        workbook.close()
        println("成功创建水果清单表格")
    } catch (e: Exception) {
        println("生成水果清单表格发生异常 $e")

    }
}

fun main() {
    createExcelSheet()
}

http://www.kler.cn/a/420001.html

相关文章:

  • 渗透测试之Web基础之Linux病毒编写——泷羽sec
  • 常见排序算法总结 (三) - 归并排序与归并分治
  • 数据结构实训——查找
  • 用于LiDAR测量的1.58um单芯片MOPA(一)
  • 高校数字化运营平台解决方案:构建统一的服务大厅、业务平台、办公平台,助力打造智慧校园
  • 【人工智能】用Python和Pandas进行时间序列数据分析:从处理到预测
  • 使用epoll监测定时器是否到达指定时间,并执行回调函数
  • 前端番外小知识——为什么需要箭头函数?
  • Pytorch使用手册-What is torch.nn really?(专题九)
  • 【电子通识】USB Type-C线缆为什么有的用到E-Marker芯片
  • 数据结构自测题4
  • 【docker】docker网络六种网络模式
  • 雪花算法生成ID
  • git 常用命令及问题
  • 多级缓存设计实践
  • Cannot resolve symbol ‘ActivityThread‘ | Android 语法
  • 【目标跟踪】AntiUAV600数据集详细介绍
  • avcodec_alloc_context3,avcodec_open2,avcodec_free_context,avcodec_close
  • 多功能察打一体多旋翼无人机技术详解
  • 摆脱复杂配置!使用MusicGPT部署你的私人AI音乐生成环境
  • [在线实验]-ActiveMQ Docker镜像的下载与部署
  • 【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
  • HCSIF: 中国区域2000-2022年高时空分辨率(500m)SIF数据集
  • 电子电气架构 --- E/E(电子电气架构)的重新定义
  • 深度学习案例:ResNet50模型+SE-Net
  • C语言——实现转换成大写