读取excel单元格并确定单元格中的格式化单词
是否有可能从excell表格中读取单元格的格式并确定哪些单词是粗体或斜体? 我可以读写单元格,而且我也知道JExcel可以编写格式化的单元格。 在格式化的单元格中,我的意思是文本是斜体或粗体。
是否有可能读取单元格数据并确定哪些单词是粗体? 比如我会在单元格中有这个:
“一个excel单元格的 示例文本”
我想知道string“excel单元格”是粗体,而string“样本”是斜体。 这可能在JExcel中,如果不是,我将如何在Java中做到这一点? 有人可以build议一个API? 也许更好的方法是削减一个XML文件。
我不知道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单元格,但是),然后迭代格式化运行并检查每个字体。 它看起来像第一次运行使用单元格的CellStyle /字体,所以你必须以这种方式来查找(如果你想从RichTextString中得到它,你会得到一个NPE)。
一旦你有字体,你可以得到它的所有属性。 这是POI的字体的Javadoc。
如果使用较旧的非XLSX文件,请在类名称中将HSSFreplace为XSSF,并且必须稍微更改RichTextString代码才能使用字体索引查找字体。 这里是XSSFRichTextString和HSSFRichTextString的JavaDocs。
在Sheet 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
以下是我如何在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