我想编写一个应用程序,将 Excel 电子表格转换为 HTML 并保留样式。 Apache Tika 是迄今为止我发现的最好的免费解决方案。我在命令行中测试了一些转换,例如:
java -jar tika-app-2.9.2.jar --html spreadsheet.xlsx > output.html
输出看起来很棒。我得到一个包含大量样式的 HTML 文件(即 table 标签、tr 标签等)。
我在使用 Kotlin 和 Tika 包在代码中复制此行为时遇到一些问题。我得到的最接近的是下面的代码,它解析电子表格并将内容输出为字符串。
import org.apache.tika.metadata.Metadata
import org.apache.tika.parser.ParseContext
import org.apache.tika.parser.microsoft.ooxml.OOXMLParser
import org.apache.tika.sax.BodyContentHandler
import java.io.File
import java.io.FileInputStream
fun tikaHelper(inputFilePath: String) {
//detecting the file type
val handler = BodyContentHandler()
val metadata = Metadata()
val inputstream = FileInputStream(File(inputFilePath))
val pcontext = ParseContext()
//OOXml parser
val msofficeparser = OOXMLParser()
msofficeparser.parse(inputstream, handler, metadata, pcontext)
println("Contents of the document:$handler")
}
fun main() {
val inputFilePath = "./spreadsheet.xlsx"
tikaHelper(inputFilePath)
}
这只是将数据输出为字符串。我如何模仿
--html
CLI 参数的行为?
我尝试遵循各种在线文档,例如https://www.tutorialspoint.com/tika/tika_extracting_ms_office_files.htm,但这只能让我了解电子表格-->字符串。我需要从电子表格-->html。
ToXMLContentHandler
代替 BodyContentHandler
。
这是一个例子:
val inputFilePath = "input.xlsx"
val handler = ToXMLContentHandler()
val metadata = Metadata()
val pcontext = ParseContext()
val msofficeparser = OOXMLParser()
val html = FileInputStream(File(inputFilePath)).use {
msofficeparser.parse(it, handler, metadata, pcontext)
handler.toString()
}
Files.writeString(Paths.get("output.html"), html)