Сводные таблицы - создание Excel с Java вызывает ошибку открытия в Excel - PullRequest
0 голосов
/ 14 июля 2020

Кому это может быть интересно,

Я пытаюсь создать сводную таблицу с помощью Excel, но сталкиваюсь с теми же ошибками, которые не знаю, как исправить. Всякий раз, когда я открываю документ с помощью excel, он выдает следующие ошибки:

Removed Part: /xl/pivotTables/pivotTable1.xml part with XML error.  (PivotTable view) Load error. Line 2, column 0.
Removed Records: Workbook properties from /xl/workbook.xml part (Workbook)

Это код, который используется при создании сводной таблицы:

public static void main(String[] args) throws IOException, IndexOutOfBoundsException {
        SpringApplication.run(SpringLowestPriceFinderApplication.class, args);
        FileInputStream file1 = new FileInputStream(
                new File("C:\\users\\sbitzer\\downloads\\RxWave Daily Report-07-08-2020 Sam5.xlsx"));
        JSONParser parser = new JSONParser();
        XSSFWorkbook wb1 = new XSSFWorkbook(file1);
        XSSFSheet s1 = wb1.getSheetAt(5);
        XSSFSheet s2 = wb1.getSheetAt(0);
        XSSFSheet s3 = wb1.getSheetAt(6);
        XSSFSheet s4 = wb1.getSheetAt(7);
        XSSFSheet s5 = wb1.getSheetAt(8);
        addToFirstDrugList(wb1);
        addToSecondDrugList(wb1);
        addToThirdDrugList(wb1);
        addToFourthDrugList(wb1);
        addToFifthDrugList(wb1);
        //int count = 2773;
        for (int i = 0; i < 2808; i++)
        {
            
            double v1 = lowestPrices1.get(i);
            double v2 = lowestPrices2.get(i);
            double v3 = lowestPrices3.get(i);
            double v4 = lowestPrices4.get(i);
            double v5 = lowestPrices5.get(i);
            
        double x = findMinimumPrice(v1,v2,v3,v4,v5);
            DecimalFormat df = new DecimalFormat("#.00");
            System.out.println(i+2);
            System.out.println(s1.getPhysicalNumberOfRows());
            Row r = s1.createRow(i+1);
            Row r2 = s2.getRow(i+1);
            r.createCell(0).setCellValue(r2.getCell(0).getStringCellValue());
            r.createCell(1).setCellValue(r2.getCell(1).getStringCellValue());
            r.createCell(2).setCellValue(r2.getCell(2).getStringCellValue());
            r.createCell(3).setCellValue(r2.getCell(3).getStringCellValue());
            r.createCell(4).setCellValue(r2.getCell(4).getStringCellValue());
            r.createCell(5).setCellValue(r2.getCell(5).getStringCellValue());
            r.createCell(6).setCellValue(r2.getCell(6).getStringCellValue());
            String minZ = findMinZip(v1,v2,v3,v4,v5);
            String z = df.format(x);
            System.out.println("X IS: " + x);
            if (Double.isNaN(x))
            {
                z = "N/A";
            }
            System.out.println("Z IS: " + z);
            r.createCell(7).setCellValue(minZ);
            r.createCell(8).setCellValue(z);
            r.createCell(9).setCellValue(r2.getCell(12).getStringCellValue());

        }
        int count = 1;
        for (int j = 0; j < s2.getPhysicalNumberOfRows()-1; j++)
        {
            try {
            Row r = s2.getRow(j+1);
            Row r2 = s3.createRow(count);
            //System.out.println(r.getCell(27).getStringCellValue());
            if (r.getCell(8).getStringCellValue().equals(r.getCell(11).getStringCellValue()) && (!r.getCell(8).getStringCellValue().equals("N/A")))
            {
                r2.createCell(0).setCellValue(r.getCell(0).getStringCellValue());
                r2.createCell(1).setCellValue(r.getCell(1).getStringCellValue());
                r2.createCell(2).setCellValue(r.getCell(2).getStringCellValue());
                r2.createCell(3).setCellValue(r.getCell(3).getStringCellValue());
                r2.createCell(4).setCellValue(r.getCell(4).getStringCellValue());
                r2.createCell(5).setCellValue(r.getCell(5).getStringCellValue());
                r2.createCell(6).setCellValue(r.getCell(6).getStringCellValue());
                r2.createCell(7).setCellValue(r.getCell(7).getStringCellValue());
                r2.createCell(8).setCellValue(r.getCell(10).getStringCellValue());
                r2.createCell(9).setCellValue(r.getCell(8).getStringCellValue());
                r2.createCell(10).setCellValue(r.getCell(11).getStringCellValue());
                r2.createCell(11).setCellValue(r.getCell(12).getStringCellValue());
                
                System.out.println(j);
                
                    r2.createCell(12).setCellValue(r.getCell(27).getStringCellValue());
                    r2.createCell(13).setCellValue("0%");
                
                count++;
            }
            }
            catch (NullPointerException e)
            {
                e.printStackTrace();
            }
        }
        AreaReference a = new AreaReference("'Pivot Reference'!$A$1:$N$291", SpreadsheetVersion.EXCEL2007);
        CellReference c = new CellReference("'InsideRx Best Price'!$A$6");
        XSSFPivotTable iRxBest = s4.createPivotTable(a,c,s3);
//      iRxBest.addReportFilter(12);
//      iRxBest.addReportFilter(8);
        iRxBest.addRowLabel(0);
        iRxBest.addRowLabel(1);
        iRxBest.addRowLabel(2);
        iRxBest.addRowLabel(3);
        iRxBest.addRowLabel(4);
        iRxBest.addRowLabel(5);
        iRxBest.addRowLabel(6);
        iRxBest.addRowLabel(7);
        iRxBest.addRowLabel(9);
        iRxBest.addRowLabel(10);
        iRxBest.addRowLabel(11);
        iRxBest.addRowLabel(13);
    //  iRxBest.addColumnLabel(DataConsolidateFunction.SUM, 13);
        count = 1;
        for (int j = 0; j < s2.getPhysicalNumberOfRows()-1; j++)
        {
            try {
            Row r = s2.getRow(j+1);
            Row r2 = s5.createRow(count);
            if (!(r.getCell(8).getStringCellValue().equals("N/A")) && (!(r.getCell(11).getStringCellValue().equals("N/A"))))
            {
            double d1 = Double.parseDouble(r.getCell(8).getStringCellValue());
            double d2 = Double.parseDouble(r.getCell(11).getStringCellValue());
            if ((d1 < d2))
            {
                r2.createCell(0).setCellValue(r.getCell(0).getStringCellValue());
                r2.createCell(1).setCellValue(r.getCell(1).getStringCellValue());
                r2.createCell(2).setCellValue(r.getCell(2).getStringCellValue());
                r2.createCell(3).setCellValue(r.getCell(3).getStringCellValue());
                r2.createCell(4).setCellValue(r.getCell(4).getStringCellValue());
                r2.createCell(5).setCellValue(r.getCell(5).getStringCellValue());
                r2.createCell(6).setCellValue(r.getCell(6).getStringCellValue());
                r2.createCell(7).setCellValue(r.getCell(7).getStringCellValue());
                r2.createCell(8).setCellValue(r.getCell(10).getStringCellValue());
                r2.createCell(9).setCellValue(r.getCell(8).getStringCellValue());
                r2.createCell(10).setCellValue(r.getCell(11).getStringCellValue());
                r2.createCell(11).setCellValue(r.getCell(12).getStringCellValue());
                
                System.out.println(j);
                //System.out.println(r.getCell(27).getStringCellValue());
                
                    r2.createCell(12).setCellValue(r.getCell(27).getStringCellValue());
                    //r2.createCell(13).setCellValue("0%");
                
            //  r2.createCell(11).setCellValue(r.getCell(11).getStringCellValue());
                count++;
            }
            }
            }
            catch (NullPointerException e)
            {
                e.printStackTrace();
            }
        }
            count = 1;
        FileOutputStream foo = new FileOutputStream("C:\\users\\sbitzer\\downloads\\RxWave Daily Report-07-08-2020 Sam5.xlsx");
        wb1.write(foo);
        file1.close();

        // Closing the workbook
        wb1.close();
        System.out.println("END OF PROGRAM");
    }

Если вы знаете, как Решите эту проблему, дайте мне знать. Я не хочу, чтобы при попытке открыть сводную таблицу с помощью excel возникали какие-либо ошибки.

...