Android中如何加载并显示Assets文件夹内的XLSX文件
解决方案:Android加载并显示Assets中的XLSX文件
方案一:第三方解析库+原生UI展示
直接解析XLSX内容,用Android原生控件(如TableLayout、RecyclerView)渲染,推荐以下成熟库:
1. Apache POI
Java生态主流的Excel解析库,完整支持XLSX格式。
- 集成依赖:
implementation 'org.apache.poi:poi-ooxml:5.2.5'
注:库体积较大,建议开启R8/ProGuard压缩,或改用精简版poi-ooxml-lite。
- 核心实现步骤:
- 读取Assets中的文件流:
val inputStream = assets.open("asmls.xlsx") val workbook = XSSFWorkbook(inputStream) val targetSheet = workbook.getSheetAt(0) // 获取第一个工作表
- 遍历工作表的行与单元格,提取数据后填充到原生UI控件中。
2. EasyExcel(阿里开源)
轻量级、低内存的Excel解析库,适配移动端资源限制。
- 集成依赖:
implementation 'com.alibaba:easyexcel:3.3.2'
- 核心实现步骤:
- 定义对应Excel列的数据实体类:
data class ExcelRowData( @ExcelProperty(index = 0) val column1: String?, @ExcelProperty(index = 1) val column2: String? // 按需添加更多列定义 )
- 解析Assets文件并处理数据:
val inputStream = assets.open("asmls.xlsx") EasyExcel.read(inputStream, ExcelRowData::class.java, object : AnalysisEventListener<ExcelRowData>() { override fun invoke(rowData: ExcelRowData, context: AnalysisContext?) { // 将每行数据加入数据源列表 } override fun doAfterAllAnalysed(context: AnalysisContext?) { // 解析完成后更新UI展示 } }).sheet().doRead()
方案二:转HTML后用WebView加载
把XLSX内容转换为HTML格式,利用WebView渲染表格样式:
- 结合Apache POI的
XSSFExcelToHtmlConverter工具类实现:
val inputStream = assets.open("asmls.xlsx") val workbook = XSSFWorkbook(inputStream) val targetSheet = workbook.getSheetAt(0) val converter = XSSFExcelToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument()) converter.processSheet(targetSheet) val htmlContent = converter.document.outerHtml webView.loadDataWithBaseURL(null, htmlContent, "text/html", "UTF-8", null)
方案三:在线预览(需网络)
将Assets文件复制到本地缓存,调用Google文档在线预览(依赖网络,部分地区可能无法访问):
- 核心步骤:
- 复制Assets文件到缓存目录:
val tempFile = File(cacheDir, "temp_asmls.xlsx") val inputStream = assets.open("asmls.xlsx") val outputStream = FileOutputStream(tempFile) inputStream.copyTo(outputStream) inputStream.close() outputStream.close()
- 加载预览链接:
val previewUrl = "https://docs.google.com/gview?url=${Uri.fromFile(tempFile).toString()}&embedded=true" webView.loadUrl(previewUrl)
内容的提问来源于stack exchange,提问作者Shobhith
相关产品推荐
相关产品推荐

