Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Apache POI - Вопрос по выводу значений ячеек

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Hehabr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нижеследующий код выдает результат в консоли:
....................
D5 - C34
C34
....................
Почему выводится сама формула (=C34) , стоящая в ячейке D5, а не число, которое видно в ячейке D5 если открыть сам файл?
Как сделать чтобы выводилось само число?
 
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
 
public class POITest {
 
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("C:/Test/1.xlsm");
        XSSFWorkbook workbook = new XSSFWorkbook(fis);
        XSSFSheet sheet = workbook.getSheetAt(1);
        CellReference ref = new CellReference("D5");
        int row = ref.getRow();
        int col = ref.getCol();
        Cell cell = sheet.getRow(row).getCell(col);
        gettingTheCellContents(ref, cell);
        fis.close();
        workbook.close();
    }
 
    // https://poi.apache.org/spreadsheet/quick-guide.html#CellContents
    private static void gettingTheCellContents(CellReference cellRef, Cell cell) {
 
        DataFormatter formatter = new DataFormatter();
        System.out.print(cellRef.formatAsString());
        System.out.print(" - ");
 
        // get the text that appears in the cell by getting the cell value and applying any data formats (Date, 0.00, 1.23e9, $1.23, etc)
        String text = formatter.formatCellValue(cell);
        System.out.println(text);
 
        // Alternatively, get the value and format it yourself
        switch (cell.getCellTypeEnum()) {
            case STRING:
                System.out.println(cell.getRichStringCellValue().getString());
                break;
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    System.out.println(cell.getDateCellValue());
                } else {
                    System.out.println(cell.getNumericCellValue());
                }
                break;
            case BOOLEAN:
                System.out.println(cell.getBooleanCellValue());
                break;
            case FORMULA:
                System.out.println(cell.getCellFormula());
                break;
            case BLANK:
                System.out.println();
                break;
            default:
                System.out.println();
        }
    }
     
}

Всего записей: 41 | Зарегистр. 07-06-2013 | Отправлено: 00:05 03-08-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Hehabr
https://stackoverflow.com/a/7609587 + https://stackoverflow.com/questions/17510112/how-to-read-cell-value-from-formula-cell-using-apache-poi

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 00:09 03-08-2017 | Исправлено: Mavrikii, 00:10 03-08-2017
Hehabr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Заработало! Спасибо Mavrikii !!
 
------------------------------------------------
 
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
import java.io.FileInputStream;
import java.io.IOException;
 
public class POITestRB {
 
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("C:/Test/1.xlsm");
        XSSFWorkbook workbook = new XSSFWorkbook(fis);
 
        gettingTheCellContents(workbook, "D5");
 
        fis.close();
        workbook.close();
    }
 
    private static void gettingTheCellContents(XSSFWorkbook workbook, String cellId) {
 
        XSSFSheet sheet = workbook.getSheetAt(1);
        CellReference ref = new CellReference(cellId);
        int row = ref.getRow();
        int col = ref.getCol();
        Cell cell = sheet.getRow(row).getCell(col);
 
        switch (cell.getCellTypeEnum()) {
            case STRING:
                System.out.println(cell.getRichStringCellValue().getString());
                break;
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    System.out.println(cell.getDateCellValue());
                } else {
                    System.out.println(cell.getNumericCellValue());
                }
                break;
            case BOOLEAN:
                System.out.println(cell.getBooleanCellValue());
                break;
            case FORMULA:
                System.out.println("Formula is: " + cell.getCellFormula());
                switch(cell.getCachedFormulaResultType()) {
                    case Cell.CELL_TYPE_NUMERIC:
                        System.out.println("1. case Cell.CELL_TYPE_NUMERIC --> Last evaluated as: " + cell.getNumericCellValue());
                        break;
                    case Cell.CELL_TYPE_STRING:
                        System.out.println("2. case Cell.CELL_TYPE_STRING --> Last evaluated as \"" + cell.getRichStringCellValue() + "\"");
                        break;
                }
                break;
            case BLANK:
                System.out.println();
                break;
            default:
                System.out.println();
        }
    }
 
}

Всего записей: 41 | Зарегистр. 07-06-2013 | Отправлено: 11:18 03-08-2017
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Apache POI - Вопрос по выводу значений ячеек


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru