Формула = TEXT (A6, "ddd") принимает значение следующей строки - PullRequest
0 голосов
/ 17 октября 2019

Я написал код, который читает лист Excel с формулами в нем и пишет, что превосходно для вывода Excel.

в моем Excel у меня есть столбцы типа Дата |день |месяц |год

Столбец даты содержит значение, подобное 1-12-2019, а в других столбцах (день, месяц, год) у меня есть формула возврата (TEXT (A5, "ddd"), TEXT (A5, "mmm"), TEXT (A5, гггг)).

В коде нет ошибок, но когда я в строке A5. столбцы день, месяц, год, содержащие данные столбца A6 (TEXT (A6, "ddd" и т. д.).

package com.opentext.shifttimes;

import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import org.apache.log4j.Logger;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ShiftRecord {

    ResourceBundle rs=ResourceBundle.getBundle("com.opentext.shifttimes.shift_parameters");
    static Logger logger = Logger.getLogger(ShiftRecord.class);

    String SHIFT_XLSX_FILE_PATH;
    String FileName;

    public void ReadExcelFiles()
    {
            try{

                XSSFWorkbook outputWorkbook=new XSSFWorkbook();

            if(!rs.getString("excel_files_path").equals("") && rs.getString("excel_files_path")!=null)
            {
                SHIFT_XLSX_FILE_PATH = rs.getString("excel_files_path");
            }
            else
            {
                SHIFT_XLSX_FILE_PATH="C:/Team";
            }

            if(!rs.getString("file_name").equals("") && rs.getString("file_name")!=null)
            {
                FileName = rs.getString("file_name");
                //SHIFT_XLSX_FILE_PATH=SHIFT_XLSX_FILE_PATH+"/"+FileName;   

                logger.info("::::::: Printing Excel Path ::::::::: "+SHIFT_XLSX_FILE_PATH);

                 Workbook workbook = WorkbookFactory.create(new File(SHIFT_XLSX_FILE_PATH));

                 FileOutputStream fos=new FileOutputStream(rs.getString("excel_output_file_path"));

                 logger.info("Workbook has " + workbook.getNumberOfSheets() + " Sheets : ");


                 logger.info("Retrieving Sheets using for-each loop");
                    for(Sheet sheet: workbook) {
                        logger.info(" Sheet Name : " + sheet.getSheetName());
                    }


                    Sheet sheet = workbook.getSheetAt(0);

                    getSheets(outputWorkbook,sheet);

                   // outputWorkbook.write(fos); 

                    Sheet sheet1 = workbook.getSheetAt(1);

                    getSheets(outputWorkbook,sheet1);
                    outputWorkbook.write(fos); 

                      // Step #10 : At the end of the Program close the FileOutputStream object. 
                       fos.close();

            }
            else
            {
                FileName="";
            }


        }
        catch(Exception e)
        {
            logger.info(" >>>>>> Got Exception in ReadExcelFiles >>>>>> "+e.getMessage());
            e.printStackTrace();
        }

    }

    public void getSheets(XSSFWorkbook outputWorkbook,Sheet sheet)
    {
        try
        {
             XSSFSheet outputSheet=outputWorkbook.createSheet(sheet.getSheetName()); 
               // DataFormatter dataFormatter = new DataFormatter();

                logger.info("\n\nIterating over Rows and Columns using Iterator\n");

             // Shift of one row all the rows starting from the 3th row
                sheet.shiftRows(2, sheet.getLastRowNum(), 1, true, true);
                // Create my new 3th row
                sheet.createRow(2);

                int i=0;
                for (Row row: sheet) {
                    int j=0;
                    //List<Object> data=new ArrayList<Object>();
                    logger.info("================== printing Rows =========================================="+row.getCell(7));


                    for(Cell cell: row) {

                         logger.info("================= Row No======="+i+"========");
                         //data.add(cell);

                         /*if( row.getCell(6)==null || row.getCell(6).equals("") || row.getCell(6).equals(null) || row.getCell(6).equals("-") || row.getCell(6).equals("Shift"))*/
                        /* if( row.getCell(7)==null || row.getCell(7).getStringCellValue().equals("") || row.getCell(7).equals(null))
                         {
                             logger.info("================= Shift is null not copying data for tis row===============");
                         }
                         else
                         {*/
                             printCellValue(outputSheet,i,j,cell);
                         /*}*/
                       j++;
                    }
                    i++;
                }



        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }


    private static void printCellValue(XSSFSheet outputSheet,int i,int j,Cell cell) {

        switch (cell.getCellTypeEnum()) {

        case BOOLEAN:
           logger.info(" BOOLEAN : "+cell.getBooleanCellValue());
                   if(j==0)
                   {
                   outputSheet.createRow(i).createCell(j).setCellValue(cell.getBooleanCellValue());
                   }
                   else
                   {
                    outputSheet.getRow(i).createCell(j).setCellValue(cell.getBooleanCellValue());
                   }
            break;
        case STRING:
                    logger.info(" STRING : "+cell.getRichStringCellValue().getString());
                   if(j==0)
                   {
                   outputSheet.createRow(i).createCell(j).setCellValue(cell.getRichStringCellValue().getString());
                   }
                   else
                   {
                    outputSheet.getRow(i).createCell(j).setCellValue(cell.getRichStringCellValue().getString());
                   }
            break;
        case NUMERIC:

            if(j==0)
               {
                 if (DateUtil.isCellDateFormatted(cell)) {
                     logger.info(" DATE : "+cell.getDateCellValue());
                     SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
                     String  value =  sdf.format(cell.getDateCellValue());
                     outputSheet.createRow(i).createCell(j).setCellValue(value);
                  } else {
                     logger.info(" NUMBER : "+cell.getNumericCellValue());
                     outputSheet.createRow(i).createCell(j).setCellValue(cell.getNumericCellValue());
                  }

               }
               else
               {

                   if (DateUtil.isCellDateFormatted(cell)) {
                         logger.info(" DATE else : "+cell.getDateCellValue());
                         SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
                         String  value =  sdf.format(cell.getDateCellValue());
                         outputSheet.getRow(i).createCell(j).setCellValue(value);
                      } else {
                         logger.info(" NUMBER else : "+cell.getNumericCellValue());
                         outputSheet.getRow(i).createCell(j).setCellValue(cell.getNumericCellValue());
                      } 
               }
            break;
        case FORMULA:
            System.out.print(cell.getCellFormula());
             if(j==0)
               {
                 outputSheet.createRow(i).createCell(j).setCellFormula(cell.getCellFormula());
               }
               else
               {
                 outputSheet.getRow(i).createCell(j).setCellFormula(cell.getCellFormula());
               }
            break;
        case BLANK:
           logger.info(" BLANK CELL ");
            break;
        default:
           logger.info("");
    }

        System.out.println("\n");
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try
        {
            ShiftRecord records=new ShiftRecord();
            records.ReadExcelFiles();
        }
        catch (Exception e) {
            // TODO: handle exception
            logger.info(" >>>> Got Exception in main>>>> "+e.getMessage());
            e.printStackTrace();
        }


    }

}

я хочу, чтобы столбец дня, месяца и года получал те же данные строки, а не следующиеданные строки.

на данный момент, если дата 1-12-2018 в строке A5, то день, месяц, год, столбцы отображаются следующим образом:

день - солнце (неверно. показывает следующий день строки, здесь это должно быть сидело). месяц - декабрь год-2018.

Пожалуйста, помогите по вышеуказанному вопросу.

...