Java 使用ApachePOI从Excel中获取HTML格式的单元格值
我正在使用ApachePOI阅读excel文档。至少可以说,到目前为止,它能够达到我的目的。但有一件事让我印象深刻,那就是将单元格的值提取为HTML 我有一个单元格,用户将在其中输入一些字符串并应用一些格式(如项目符号/数字/粗体/斜体)等 因此,当我阅读时,内容应该是HTML格式,而不是POI给出的纯字符串格式 我几乎浏览了整个POI API,但找不到任何人。我只想保留一个特定列的格式,而不是整个excel。我所说的“列”是指在该列中输入的文本。我希望该文本为HTML文本 还探索并使用了ApacheTika。然而,据我所知,它只能给我文本,而不能给我文本的格式 请有人引导我。我别无选择了 假设我在Excel中写下我的名字是天使和恶魔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
我应该在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单元格中的输出是粗体和斜体。谢谢