You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Kotlin结合Apache Tika实现Excel转带样式的HTML?

解决Apache Tika Excel转HTML(保留样式)的Kotlin实现问题

你当前的代码使用BodyContentHandler只会提取纯文本内容,而命令行的--html参数实际是调用了Tika的XHTML结构化输出处理器,并启用了表格样式渲染逻辑。要复现该行为,需调整以下关键部分:

核心修改点

  • 替换BodyContentHandler为XHTMLContentHandler,用于生成带结构的HTML内容
  • 配置解析上下文,启用Excel表格的样式渲染
  • 将输出写入文件(而非仅打印纯文本)

完整Kotlin代码示例

import org.apache.tika.metadata.Metadata
import org.apache.tika.parser.AutoDetectParser
import org.apache.tika.parser.ParseContext
import org.apache.tika.sax.XHTMLContentHandler
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.OutputStreamWriter

fun convertExcelToHtml(inputFilePath: String, outputFilePath: String) {
    val inputStream = FileInputStream(File(inputFilePath))
    val outputStream = FileOutputStream(File(outputFilePath))
    val writer = OutputStreamWriter(outputStream, "UTF-8")

    // 使用XHTML处理器生成带结构的HTML内容
    val xhtmlHandler = XHTMLContentHandler(writer)
    val metadata = Metadata()
    val parseContext = ParseContext()

    // 自动检测文件类型(适配更多Office格式,也可替换为OOXMLParser仅处理Excel)
    val parser = AutoDetectParser()
    parseContext.set(org.apache.tika.parser.microsoft.ooxml.OOXMLParser::class.java, org.apache.tika.parser.microsoft.ooxml.OOXMLParser())
    
    // 执行解析,生成带样式的HTML
    parser.parse(inputStream, xhtmlHandler, metadata, parseContext)
    
    writer.flush()
    writer.close()
    inputStream.close()
    println("HTML文件已生成:$outputFilePath")
}

fun main() {
    val inputPath = "./spreadsheet.xlsx"
    val outputPath = "./output.html"
    convertExcelToHtml(inputPath, outputPath)
}

关键细节说明

  1. XHTMLContentHandler:这个处理器会将Excel的表格结构(行、列、单元格样式)转换成标准的HTML <table>、<tr>、<td>等标签,完全对应命令行--html的输出逻辑。
  2. 样式保留:Tika的OOXML解析器默认会保留单元格的基本样式(如边框、背景色、字体格式),这些样式会被转换为内联CSS或HTML属性,与命令行输出效果一致。
  3. AutoDetectParser:替代直接使用OOXMLParser可自动识别不同Office文件格式,扩展性更强;若仅需处理Excel,直接使用OOXMLParser并保留上下文配置即可。

依赖说明

确保项目依赖包含Tika核心包和标准解析包(以Maven为例):

<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers-standard-package</artifactId>
    <version>2.9.2</version>
</dependency>

内容的提问来源于stack exchange,提问作者mitch g

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 05:33:29