Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ApachePOI从Excel中获取HTML格式的单元格值_Java_Html_Excel_Apache Poi_Apache Tika - Fatal编程技术网

Java 使用ApachePOI从Excel中获取HTML格式的单元格值

Java 使用ApachePOI从Excel中获取HTML格式的单元格值,java,html,excel,apache-poi,apache-tika,Java,Html,Excel,Apache Poi,Apache Tika,我正在使用ApachePOI阅读excel文档。至少可以说,到目前为止,它能够达到我的目的。但有一件事让我印象深刻,那就是将单元格的值提取为HTML 我有一个单元格,用户将在其中输入一些字符串并应用一些格式(如项目符号/数字/粗体/斜体)等 因此,当我阅读时,内容应该是HTML格式,而不是POI给出的纯字符串格式 我几乎浏览了整个POI API,但找不到任何人。我只想保留一个特定列的格式,而不是整个excel。我所说的“列”是指在该列中输入的文本。我希望该文本为HTML文本 还探索并使用了Apa

我正在使用ApachePOI阅读excel文档。至少可以说,到目前为止,它能够达到我的目的。但有一件事让我印象深刻,那就是将单元格的值提取为HTML

我有一个单元格,用户将在其中输入一些字符串并应用一些格式(如项目符号/数字/粗体/斜体)等

因此,当我阅读时,内容应该是HTML格式,而不是POI给出的纯字符串格式

我几乎浏览了整个POI API,但找不到任何人。我只想保留一个特定列的格式,而不是整个excel。我所说的“列”是指在该列中输入的文本。我希望该文本为HTML文本

还探索并使用了ApacheTika。然而,据我所知,它只能给我文本,而不能给我文本的格式

请有人引导我。我别无选择了

假设我在Excel中写下我的名字是天使和恶魔


我应该在Java中得到的输出是
我的名字是Angel and Demon

我已经将其作为unicode粘贴到xls文件的单元格A1中:

<html><p>This is a test. Will this text be <b>bold</b> or <i>italic</i></p></html>
这是一个测试。这个文本是粗体还是斜体

此html行生成以下内容:

这是一个测试。这个文本是粗体还是斜体

我的代码:

public class ExcelWithHtml {
    // <html><p>This is a test. Will this text be <b>bold</b> or
    // <i>italic</i></p></html>

    public static void main(String[] args) throws FileNotFoundException,
            IOException {
        new ExcelWithHtml()
                .readFirstCellOfXSSF("/Users/rcacheira/testeHtml.xlsx");
    }

    boolean inBold = false;
    boolean inItalic = false;

    public void readFirstCellOfXSSF(String filePathName)
            throws FileNotFoundException, IOException {
        FileInputStream fis = new FileInputStream(filePathName);
        XSSFWorkbook wb = new XSSFWorkbook(fis);
        XSSFSheet sheet = wb.getSheetAt(0);

        String cellHtml = getHtmlFormatedCellValueFromSheet(sheet, "A1");

        System.out.println(cellHtml);

        fis.close();
    }

    public String getHtmlFormatedCellValueFromSheet(XSSFSheet sheet,
            String cellName) {

        CellReference cellReference = new CellReference(cellName);
        XSSFRow row = sheet.getRow(cellReference.getRow());
        XSSFCell cell = row.getCell(cellReference.getCol());

        XSSFRichTextString cellText = cell.getRichStringCellValue();

        String htmlCode = "";
        // htmlCode = "<html>";

        for (int i = 0; i < cellText.numFormattingRuns(); i++) {
            try {
                htmlCode += getFormatFromFont(cellText.getFontAtIndex(i));
            } catch (NullPointerException ex) {
            }
            try {
                htmlCode += getFormatFromFont(cellText
                        .getFontOfFormattingRun(i));
            } catch (NullPointerException ex) {
            }

            int indexStart = cellText.getIndexOfFormattingRun(i);
            int indexEnd = indexStart + cellText.getLengthOfFormattingRun(i);

            htmlCode += cellText.getString().substring(indexStart, indexEnd);
        }

        if (inItalic) {
            htmlCode += "</i>";
            inItalic = false;
        }
        if (inBold) {
            htmlCode += "</b>";
            inBold = false;
        }

        // htmlCode += "</html>";
        return htmlCode;

    }

    private String getFormatFromFont(XSSFFont font) {
        String formatHtmlCode = "";
        if (font.getItalic() && !inItalic) {
            formatHtmlCode += "<i>";
            inItalic = true;
        } else if (!font.getItalic() && inItalic) {
            formatHtmlCode += "</i>";
            inItalic = false;
        }

        if (font.getBold() && !inBold) {
            formatHtmlCode += "<b>";
            inBold = true;
        } else if (!font.getBold() && inBold) {
            formatHtmlCode += "</b>";
            inBold = false;
        }

        return formatHtmlCode;
    }

}
public类ExcelWithHtml{
//这是一个测试。此文本是粗体还是文本
//斜体

公共静态void main(字符串[]args)引发FileNotFoundException, IOException{ 新的ExcelWithHtml() .readFirstCellOfXSSF(“/Users/rcacheira/testeHtml.xlsx”); } 布尔inBold=false; 布尔inItalic=false; public void readFirstCellFXSSF(字符串文件路径名) 抛出FileNotFoundException,IOException{ FileInputStream fis=新的FileInputStream(filePathName); XSSF工作簿wb=新XSSF工作簿(fis); XSSFSheet-sheet=wb.getSheetAt(0); 字符串cellHtml=GetHtmlFormattedCellValueFromSheet(sheet,“A1”); System.out.println(cellHtml); fis.close(); } 公共字符串GetHtmlFormattedCellValueFromSheet(XSSFSheet, 字符串(单元名){ CellReference CellReference=新的CellReference(cellName); XSSFRow row=sheet.getRow(cellReference.getRow()); XSSFCell cell=row.getCell(cellReference.getCol()); XSSFRichTextString cellText=cell.getRichStringCellValue(); 字符串htmlCode=“”; //htmlCode=“”; 对于(int i=0;i
我的输出:

This is a test. Will this text be <b>bold</b> or <i>italic</i>
这是一个测试。这个文本是粗体还是斜体

我认为这是您想要的,我只是向您展示可能性,我没有使用最佳代码实践,我只是快速编程以生成输出。

您能发布代码部分吗?帮助你更容易!需要代码的哪一部分。带Apache POI的还是带Apache Tika的?你可能想看看你的问题的格式,似乎有点奇怪。我编辑了我的文章,提到了一个例子,并更正了文本的格式。感谢你的努力。然而,我正在寻找完全相反的结果。在excel单元格列中输入文本,并将该文本提取为HTML文本。编辑我的文章以给出一个例子。请帮助。接受答案,因为它对粗体和斜体很有效,但对下划线则返回一个数组。我不知道数组中的0和1是什么。。如果是项目符号列表和编号列表,如何执行此操作。。有办法吗?我今天晚上会测试,看看能不能看到solution@RicardoCacheira:请您在excel中发布输出粗体和斜体的原始答案。我的意思是我的输入字符串应该是这是一个测试。此文本是粗体还是斜体

,我希望excel单元格中的输出是粗体和斜体。谢谢