2017-08-03 13 views
0

私は間違って何をしていますか? ファイルexcelFileNew.xlsmのセルD5の値は、次のとおりです。#DIV/0! なぜですか?Apache POI:多くの数式でExcelファイルを更新するには?

- プログラムの出力:

Formula is: C34 
1. case Cell.CELL_TYPE_NUMERIC --> Last evaluated as: 407.2521754511886 
Formula is: C34 

- セル値:

Value of the cell D5 in file excelFileOrig.xlsm is: 407,25 
Value of the cell D5 in file excelFileNew.xlsm is: #DIV/0! 
Value of the cell C8 in file excelFileOrig.xlsm is: 5,0 
Value of the cell D5 in file excelFileNew.xlsm is: 15,0 

- コード:1件の回答

+1

C34' 'に何がで参照してください? –

+0

チェーンの始まり次のようになります。 D5 = C34 C34 = SUM(A8:A13) A8 = IFERROR(SUM(B22); 0) A9は A10 = SUM(B24) A11 "空です" "空である" A12 = SUM(B26) A13が "空である" B22 = SUM(D12:F12) B24 = SUM(D14:F14) B26 = SUM(D16:F16) D12 = E18 =(J18-J20)* SheetA!F3; MAX(E18-(J18-J20)* SheetA! (D82 + E82) F12 = F228 /(D82 + E58) F12 = F228 /(D82 + E58) D40/H40/I40/J40 * H64 * I64 * J64; 0) E14 = E40/H40 * H64 + E40/J40 *(J64-J40)* 0,3 F14 = F40 /(D40 + E40)*(D64 + E64) など – Hehabr

+0

エクセルファイルでの式 : AND、FALSE、IF、IFERROR、MAX、OR、SUM、SUMPRODUCT、VLOOKUPシステムとプログラムで – Hehabr

答えて

0
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(); 

    } 


    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"); 
     } 
    } 

    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(); 
     } 
    } 

} 

// output: 
// Formula is: C34 
// cell.getCachedFormulaResultType(): 0 
// 0. case Cell.CELL_TYPE_NUMERIC --> Last evaluated as: 407.2521754511886 
// Formula is: C34 
// cell.getCachedFormulaResultType(): 5 
// 5. case Cell.CELL_TYPE_ERROR --> 
関連する問題