Условное форматирование работает в Excel 2007, но не в Excel 2016 - PullRequest
0 голосов
/ 17 апреля 2019

Я нахожусь в ситуации, когда я поместил условное форматирование по формуле, например:

=COUNTIF($A14,"*~*")>0

Для ячеек E14 - E38.

Теперь это работает довольно хорошо в Excel 2007, но неработает вообще в Excel 2016. Я проверил XML-файл, который выглядит так:

<conditionalFormatting sqref="E14:E38">
    <cfRule priority="1" dxfId="0" type="expression">
        <formula>COUNTIF($A14,"*~*")>0</formula>
    </cfRule>
</conditionalFormatting>

Даже если я удаляю правила и добавляю его снова, он не работает.Я пробовал другое правило, но для этих ячеек условное форматирование вообще не работает.

К вашему сведению, я установил область печати, и условное форматирование внутри области печати не работает ни для одной ячейки, но работает довольно хорошо вне печатиarea.

Все эти проблемы есть только в Excel 2016.

NB. Я создаю файл excel с использованием Apache POI

По сути, я копирую условноформатирование с одного листа Excel на другой.Код как ниже;

    private void copyConditionalFormattingRules(Sheet source,Sheet destination){

        try{
            SheetConditionalFormatting sscf= source.getSheetConditionalFormatting();
            SheetConditionalFormatting dscf= destination.getSheetConditionalFormatting();
            //SheetConditionalFormatting dscf0= ((XSSFSheet)destination).getSheetConditionalFormatting();

            // delete existng formattings,if any
            for(int i=0;i<dscf.getNumConditionalFormattings();i++){

                dscf.removeConditionalFormatting(i);                    
            }

            //looping over all conditional formattings
            for(int i=0;i<sscf.getNumConditionalFormattings();i++){

                ConditionalFormatting cf = sscf.getConditionalFormattingAt(i);
                ConditionalFormatting cf1 = sscf.getConditionalFormattingAt(i);


                CellRangeAddress[] range = cf.getFormattingRanges();

                for(int j=0;j<cf.getNumberOfRules();j++){

                    //getting various properties from source
                    ConditionalFormattingRule rule = cf.getRule(j);
                    String formula1 = rule.getFormula1();

                    //creating new rule for destination sheet
                    ConditionalFormattingRule newRule = dscf.createConditionalFormattingRule(formula1);

                    try{
                        //Get pattern formatting
                        PatternFormatting pattern = rule.getPatternFormatting();
                        PatternFormatting newPattern = newRule.createPatternFormatting();

                        //retrieve pattern information
                        Color bgcolor = pattern.getFillBackgroundColorColor();
                        Color fgcolor = pattern.getFillForegroundColorColor();
                        short bgcolor1 = pattern.getFillBackgroundColor();
                        short fgcolor1 = pattern.getFillForegroundColor();
                        short fillPattern = pattern.getFillPattern();

                        if(bgcolor != null)
                            newPattern.setFillBackgroundColor(bgcolor);

                        if(bgcolor1 != 0)
                            newPattern.setFillBackgroundColor(bgcolor1);

                        if(fgcolor != null)
                            newPattern.setFillForegroundColor(fgcolor);

                        if(fgcolor1 != 0)
                            newPattern.setFillBackgroundColor(fgcolor1);

                        if(fillPattern != 0)
                            newPattern.setFillPattern(fillPattern);
                    }catch(Exception e){
                        e.printStackTrace();
                    }


                    try{
                        //Get font formatting
                        FontFormatting font = rule.getFontFormatting();

                        FontFormatting newFont = newRule.createFontFormatting();

                        if(font != null) {
                            //retrieve font information
                            int colorIndex = font.getFontColorIndex();
                            Color fontColor = font.getFontColor();
                            int fontHeight = font.getFontHeight();
                            short ulType = font.getUnderlineType();


                            if(colorIndex != 0)
                                newFont.setFontColorIndex((short) colorIndex);

                            if(fontColor != null){
                                //currently font color not working
                                //https://stackoverflow.com/questions/45611870/can-not-set-font-color-in-conditional-formatting-cell-via-apache-poi
                                try{
                                    newFont.setFontColor(fontColor);
                                }catch(Exception e){

                                }
                            }

                            if(fontHeight != 0)
                                newFont.setFontHeight(fontHeight);

                            if(ulType != 0)
                                newFont.setUnderlineType(ulType);
                        }
                    }catch(Exception e){
                        e.printStackTrace();
                    }


                    try{
                        //Get border formatting
                        BorderFormatting borderFormatting = rule.getBorderFormatting();
                        BorderFormatting newBorderFormatting = newRule.createBorderFormatting();

                        if(borderFormatting != null) {
                            //retrieve border information
                            int bBottom = borderFormatting.getBorderBottom();
                            int bLeft = borderFormatting.getBorderLeft();
                            int bDiagonal = borderFormatting.getBorderDiagonal();
                            int bTop = borderFormatting.getBorderTop();
                            int bRight = borderFormatting.getBorderRight();
                            int bBottomColor = borderFormatting.getBottomBorderColor();
                            int bTopColor = borderFormatting.getTopBorderColor();
                            int bRightColor = borderFormatting.getRightBorderColor();
                            int bLeftColor = borderFormatting.getLeftBorderColor();
                            int bDiagonalColor = borderFormatting.getDiagonalBorderColor();


                            if(bBottom != 0)
                                newBorderFormatting.setBorderBottom((short) bBottom);

                            if(bTop != 0)
                                newBorderFormatting.setBorderBottom((short) bTop);

                            if(bLeft != 0)
                                newBorderFormatting.setBorderBottom((short) bLeft);

                            if(bRight != 0)
                                newBorderFormatting.setBorderBottom((short) bRight);

                            if(bDiagonal != 0)
                                newBorderFormatting.setBorderBottom((short) bDiagonal);

                            if(bBottomColor != 0)
                                newBorderFormatting.setBottomBorderColor((short) bBottomColor);

                            if(bTopColor != 0)
                                newBorderFormatting.setTopBorderColor((short) bTopColor);

                            if(bLeftColor != 0)
                                newBorderFormatting.setLeftBorderColor((short) bLeftColor);

                            if(bRightColor != 0)
                                newBorderFormatting.setRightBorderColor((short) bRightColor);

                            if(bDiagonalColor != 0)
                                newBorderFormatting.setDiagonalBorderColor((short) bDiagonalColor);
                        }
                    }catch(Exception e){
                        e.printStackTrace();
                    }

                    //--------------------------------End of getting------------------------------

                    //setting properties from source


                    dscf.addConditionalFormatting(range,newRule);
                }
            }

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

Любая помощь будет очень полезна для меня.Если вам нужно больше деталей, пожалуйста, дайте мне знать.Заранее спасибо.

...