是否可以从excell表中读取单元格的格式并确定哪些单词是粗体还是斜体? 我可以读取和写入单元格,我也知道JExcel可以写入格式化的单元格。在格式化的单元格中,我的意思是文本是斜体或粗体。
是否可以读取单元格数据并确定哪些单词是粗体? 例如,我将在单元格中有这个:
来自一个 excel小区的 示例 文字“
我想知道字符串“excel cell”是粗体,字符串“sample”是Italic。 这在JExcel中是否可行,如果不是,我将如何在Java中执行此操作?有人可以推荐一个API吗? 也许更好的方法是削减xml文件。
答案 0 :(得分:12)
我不了解JExcel,但我可以告诉你这在Apache POI中相当容易。这是一个简单的应用程序,以显示它可以完成的一种方式。这不是非常漂亮,但它应该足以让你开始:
public static final void main(String... args) throws Exception
{
InputStream is = ExcelFormatTest.class.getResourceAsStream("Test.xlsx");
Workbook wb = new XSSFWorkbook(is);
Sheet sheet = wb.getSheetAt(0);
Cell cell = sheet.getRow(0).getCell(0);
XSSFRichTextString richText = (XSSFRichTextString)cell.getRichStringCellValue();
int formattingRuns = cell.getRichStringCellValue().numFormattingRuns();
for(int i = 0; i < formattingRuns; i++)
{
int startIdx = richText.getIndexOfFormattingRun(i);
int length = richText.getLengthOfFormattingRun(i);
System.out.println("Text: " + richText.getString().substring(startIdx, startIdx + length));
if(i == 0)
{
short fontIndex = cell.getCellStyle().getFontIndex();
Font f = wb.getFontAt(fontIndex);
System.out.println("Bold: " + (f.getBoldweight() == Font.BOLDWEIGHT_BOLD));
System.out.println("Italics: " + f.getItalic() + "\n");
}
else
{
Font f = richText.getFontOfFormattingRun(i);
System.out.println("Bold: " + (f.getBoldweight() == Font.BOLDWEIGHT_BOLD));
System.out.println("Italics: " + f.getItalic() + "\n");
}
}
}
基本上,你从一个单元格中获取一个RichTextString
对象(但要确保它首先是一个String单元格),然后迭代格式化运行并检查每个单元格的字体。看起来第一次使用Cell的CellStyle /字体,所以你必须以那种方式查找(如果你试图从RichTextString中获取它,你会得到一个NPE)。
获得字体后,您可以获得其所有属性。这是POI的Font的Javadoc。
如果您使用较旧的非XLSX文件,请在类名中将XSSF替换为HSSF,并且您必须稍微更改RichTextString代码以使用字体索引查找字体。以下是XSSFRichTextString和HSSFRichTextString的JavaDoc。
使用工作表1中的以下内容运行此操作,A1:“示例文本来自一个 excel单元格 “给出了以下结果:
Text: A
Bold: false
Italics: false
Text: sample
Bold: true
Italics: false
Text: text
Bold: false
Italics: false
Text: from
Bold: false
Italics: true
Text: one
Bold: false
Italics: false
Text: excel cell
Bold: true
Italics: true
答案 1 :(得分:3)
以下是我在VBA中的表现。也许你可以翻译:
Sub ListBoldStrings()
Dim cell As Excel.Range
Dim i As Long
Dim BoldChars As String
Dim BoldStrings() As String
'replace "|" with a char that will not appear in evaluated strings
Const SEPARATOR_CHAR As String = "|"
Set cell = ActiveCell
With cell
For i = 1 To .Characters.Count
If .Characters(i, 1).Font.Bold Then
BoldChars = BoldChars + .Characters(i, 1).Text
Else
BoldChars = BoldChars + SEPARATOR_CHAR
End If
If Right$(BoldChars, 2) = WorksheetFunction.Rept(SEPARATOR_CHAR, 2) Then
BoldChars = Left$(BoldChars, Len(BoldChars) - 1)
End If
Next i
End With
BoldStrings = Split(BoldChars, SEPARATOR_CHAR)
For i = LBound(BoldStrings) To UBound(BoldStrings)
Debug.Print BoldStrings(i)
Next i
End Sub