На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Apache POI : Как удалить из файла (после его обновления) кешированные...
    Нужно обновить данные в файле со многими сложными формулами.

    Использовать функции эвалюации не представляется возможным, так-как в файле используются формулы, не поддеживаемые Apache POI

    Как удалить из файла (после его обновления) кешированные результаты вычислений по формулам, перед сохранением нового файла?

    ExpandedWrap disabled
      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.*;
       
      public class POITestRB {
       
          static String excelFileOrig = "C:/Test/1.xlsm";
          static String excelFileNew = "C:/Test/excelFileNew.xlsm";
          static FileInputStream fis;
          static XSSFWorkbook workbook;
       
          public static void main(String[] args) throws IOException {
       
              fis = new FileInputStream(excelFileOrig);
              workbook = new XSSFWorkbook(fis);
              gettingCellContents(workbook, "D5");
              updateCell(workbook, 10.0);
              fis.close();
              workbook.close();
       
              fis = new FileInputStream(excelFileNew);
              workbook = new XSSFWorkbook(fis);
              gettingCellContents(workbook, "D5");
              fis.close();
              workbook.close();
       
          }
       
       
          public static void updateCell(XSSFWorkbook workbook, Double newData) {
              try {
                  XSSFSheet sheet = workbook.getSheetAt(1);
                  CellReference ref = new CellReference("C8");
                  int row = ref.getRow();
                  int col = ref.getCol();
                  Cell cell = sheet.getRow(row).getCell(col);
                  if (cell != null) {
                      cell.setCellValue(newData);
                  }
       
                  workbook.getCreationHelper().createFormulaEvaluator().clearAllCachedResultValues();
                  // workbook.getCreationHelper().createFormulaEvaluator().evaluateAll();
       
                  OutputStream os = new FileOutputStream(excelFileNew);
                  workbook.write(os);
                  os.flush();
                  os.close();
              }
              catch (Exception e) {
                  e.printStackTrace();
              }
          }
       
       
          private static void gettingCellContents(XSSFWorkbook workbook, String cellId) {
       
              workbook.setForceFormulaRecalculation(true);
       
              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());
                      System.out.println("cell.getCachedFormulaResultType(): " + cell.getCachedFormulaResultType());
       
                      switch(cell.getCachedFormulaResultType()) {
                          case Cell.CELL_TYPE_NUMERIC:
                              System.out.println("0. case Cell.CELL_TYPE_NUMERIC --> Last evaluated as: " + cell.getNumericCellValue());
                              break;
                          case Cell.CELL_TYPE_STRING:
                              System.out.println("4. case Cell.CELL_TYPE_STRING --> Last evaluated as \"" + cell.getRichStringCellValue() + "\"");
                              break;
                          case Cell.CELL_TYPE_ERROR:
                              System.out.println("5. case Cell.CELL_TYPE_ERROR --> ");
                              break;
                      }
                      break;
                  case BLANK:
                      System.out.println();
                      break;
                  default:
                      System.out.println("default");
              }
          }
       
      }
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script Execution time: 0,0732 ]   [ 17 queries used ]   [ Generated: 24.09.17, 01:33 GMT ]