Spring Apache Poi SAX写入空单元格

Spring Apache Poi SAX写入空单元格,spring,spring-mvc,apache-poi,Spring,Spring Mvc,Apache Poi,1文本文本文本 2文本文本文本 我正在读取excel文件,然后添加一些数据更改并将其作为输出。 但有时文本可能是空的,问题是在编写excel文件时没有考虑空单元格,而是使用下一个单元格的内容获取。 请问我该怎么办 Excel文件写得“稀疏”,不包括不用于减少空间的单元格。当你读回这些文件时,你需要考虑到这一点 如果您使用的是easy(但内存不足)用户模型,那么您可以使用诸如控制如何处理这些丢失的单元格之类的东西 如果您想进入低级别并使用SAX事件处理它,正如您所看到的,那么您需要自己处理它。只要

1文本文本文本

2文本文本文本

我正在读取excel文件,然后添加一些数据更改并将其作为输出。 但有时文本可能是空的,问题是在编写excel文件时没有考虑空单元格,而是使用下一个单元格的内容获取。 请问我该怎么办

Excel文件写得“稀疏”,不包括不用于减少空间的单元格。当你读回这些文件时,你需要考虑到这一点

如果您使用的是easy(但内存不足)用户模型,那么您可以使用诸如控制如何处理这些丢失的单元格之类的东西

如果您想进入低级别并使用SAX事件处理它,正如您所看到的,那么您需要自己处理它。只要抓住每个单元格经过时的引用,跟踪最后一个看到的单元格,并在该点处理丢失的单元格

阿帕奇波伊。你需要大体上遵循同样的逻辑,例如

 A       B       C       D
私有类SheetToCSV实现SheetContentsHandler{
private boolean firstfrow=false;
private int currentCol=-1;
公共空单元格(字符串cellReference、字符串formattedValue、,
XSSFComment注释){
如果(第一次){
FIRSTCELFROW=假;
}否则{
append(',');
}
//我们错过了什么牢房吗?
int thisCol=(新的CellReference(CellReference)).getCol();
int missedCols=thisCol-currentCol-1;

对于(int i=0;i我面临着基于SAX事件的xlsx解析器的相同场景&我只是扩展了Gagravarr的方法以适应我的需求,即在这个模型中,您需要跟踪最后处理的列,以便根据您的意愿在当前列之前处理跳过的列&您知道这些单元格是空白的

private class SheetToCSV implements SheetContentsHandler {
    private boolean firstCellOfRow = false;
    private int currentCol = -1;

    public void cell(String cellReference, String formattedValue,
            XSSFComment comment) {
        if (firstCellOfRow) {
            firstCellOfRow = false;
        } else {
            output.append(',');
        }

        // Did we miss any cells?
        int thisCol = (new CellReference(cellReference)).getCol();
        int missedCols = thisCol - currentCol - 1;
        for (int i=0; i<missedCols; i++) {
            output.append(',');
        }
        currentCol = thisCol;

        // .... Rest of cell contents handling method goes here ....

我基本上有特定的金额和日期列,如果这些列包含无效值,我需要填充一条警告消息&blank不是有效的金额或日期。但由于没有为空单元格调用
cell
方法,所以我无法为特定单元格填充该警告消息。

每个单元格都带有单元格的引用,所以你可以通过单元格从A3跳到C3来轻松辨别丢失的单元格。为什么不添加逻辑呢?谢谢@Gagravarr,但我似乎不熟悉这种逻辑,请,你能给我提点建议吗?@Gagravarr实际上,我一直在寻找这个问题,但是单元格引用的问题假设我知道em之前的pty细胞。或者,我想在治疗过程中寻找它们,并用数据填充它们。有什么建议吗?谢谢你的帮助,我会按照这个例子,看看它给了我什么。你能做到吗?@Johnspecter我也有同样的情况
private class SheetToCSV implements SheetContentsHandler {
    private boolean firstCellOfRow = false;
    private int currentCol = -1;

    public void cell(String cellReference, String formattedValue,
            XSSFComment comment) {
        if (firstCellOfRow) {
            firstCellOfRow = false;
        } else {
            output.append(',');
        }

        // Did we miss any cells?
        int thisCol = (new CellReference(cellReference)).getCol();
        int missedCols = thisCol - currentCol - 1;
        for (int i=0; i<missedCols; i++) {
            output.append(',');
        }
        currentCol = thisCol;

        // .... Rest of cell contents handling method goes here ....
@Override
    public void cell(String cellReference, String formattedValue) {
    int currentColumnIndex = (new CellReference(cellReference)).getCol();
    for (int columnIndex = previousCol + 1; columnIndex <= currentColumnIndex; ++columnIndex) {
        if (columnIndex != currentColumnIndex) {
            setValueInRowObject(columnIndex, "");
        } else {
            setValueInRowObject(columnIndex, formattedValue);
        }
    }
    previousCol = currentColumnIndex;
    }
    @Override
        public void startRow(int rowNum) {
        previousCol = -1;
}