有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java获取poi事件中的单元格背景颜色

我用POI事件导入了一个非常大的excel。我得到了所有的内容,但没有细胞的背景颜色

我尝试了ExtendedFormatRecords(如here所述),但我无法确定哪一个是前一个包含行号和列号信息的单元格

就我而言,我需要号码记录的颜色

我是这样尝试的:

    switch (record.getSid()) {
    case BOFRecord.sid:
        break;
    case BoundSheetRecord.sid:
        BoundSheetRecord bsr = (BoundSheetRecord) record;
        System.out.println("New sheet named: " + bsr.getSheetname());
        break;
    case RowRecord.sid:
        break;
    case NumberRecord.sid: // Contains a numeric cell value
        NumberRecord numrec = (NumberRecord) record;
        row = numrec.getRow();
        col = numrec.getColumn();
        //Do something
        break;
    case ExtendedFormatRecord.sid:
        ExtendedFormatRecord efr = (ExtendedFormatRecord) record;
        if (previousSid == NumberRecord.sid) {
            // row = previousRecord.getRow();
            // col = previousRecord.getColumn();
            // System.out.println("row: " + row + " column: " + col);
            System.out.println("ExtendedFormat "+efr.getFillForeground() + "");
        } else {
            System.out.println("ops! not that");
        }
        break;
        //other cases
        ...
    }//end switch
    previousSid = record.getSid();
    if (previousRecord != record) {
        previousRecord = null;
    }

有人能帮我吗

谢谢


共 (1) 个答案

  1. # 1 楼答案

    在我们讨论太多细节之前,我认为有两段代码你应该看一下。第一个是ApachePOI的一部分,在作为EventUserModel-FormatTrackingHSSFListener的一部分处理Excel文件时,处理跟踪格式和样式。第二,Apache Tika的一部分,是一个在事件处理中使用它对单元格进行即时格式化的示例-ExcelExtractor

    你想做的应该是可能的,但需要做一点工作。幸运的是,Excel中的格式和样式信息是工作簿信息的一部分,而不是工作表信息的一部分,所以它是第一位的。你需要做的是在你第一次访问这些记录时缓存它们,这样你就可以在单元格经过时使用它们

    其次,您应该看看POI用户模型代码,看看它实际上是如何与记录一起处理颜色和格式的。虽然您不能使用这些类,但您很可能可以从它们那里借用一些关键的代码片段,用于自己的类来实现同样的事情

    您要做的是使用FormatTrackingHSSFListener获取可用的ExtendedFormatRecords,然后为遇到的每个单元格查找记录。在XFR上,你会发现各种颜色相关的细节。有填充前景色和背景色、边框和字体。接下来,当您获得PaletterRecord时,保留它,并将其包装在UserModel HSSFPalette类中。然后,您可以使用它根据XFR的索引获取颜色。您还应该捕获FontRecords,这样就可以从XFR上的索引中查找它们,从FontRecord中可以获得颜色索引,在HSSFPalette上查找,就完成了

    最后,如果你让它工作,请考虑把它作为对Apache POI的一个增强来帮助下一个人!p>