0

Excel 2007を使用しpoi-3.8-20120326.jarて、すべてのセル値を 1 つのリストに収集しようとしています。

日付のインクリメント操作に式を使用しています。例: =(i2+3)k2 セルの場合。

私のJavaコードを介してこの式を評価している間、#VALUE!i2は日付セルです。)

4

1 に答える 1

1

ソースがなければ、何が悪いのかを推測するのは難しいですが、それはあなたが忘れているかもしれない2つのことだと思います。

1)FormulaEvaluator

2)DataFormatter

例を見てください。

import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileNotFoundException;

public class CellReader {

    private Workbook workbook;
    private DataFormatter formatter;
    private FormulaEvaluator evaluator;

    private void openWorkbook(String file) throws FileNotFoundException,
            IOException, InvalidFormatException {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);

            workbook = WorkbookFactory.create(fis);
            evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            formatter = new DataFormatter(true);
        } finally {
            if (fis != null) {
                fis.close();
            }
        }
    }

    private void printXLSX() {
        Sheet sheet = null;
        Row row = null;
        Cell cell = null;
        int lastRowNum;
        int lastCellNum;
        sheet = workbook.getSheetAt(0);

        lastRowNum = sheet.getLastRowNum();
        for (int j = 0; j <= lastRowNum; j++) {
            row = sheet.getRow(j);
            if (row == null) {
                continue;
            }
            lastCellNum = row.getLastCellNum();
            for (int k = 0; k <= lastCellNum; k++) {
                cell = row.getCell(k);
                if (cell == null) {
                    continue;
                }
                if (cell.getCellType() != Cell.CELL_TYPE_FORMULA) {
                    System.out.println(formatter.formatCellValue(cell));
                } else {
                    System.out.println(formatter.formatCellValue(cell,evaluator));
                }
            }

        }
    }

    public static void main(String[] args) {
        CellReader converter = null;
        try {
            converter = new CellReader();
            converter.openWorkbook("a.xlsx");
            converter.printXLSX();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
于 2012-11-16T12:34:16.723 に答える