From 218354f5b99de0e0a69dbba6def792745d83db31 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Sun, 3 Jan 2021 12:01:08 +0000 Subject: [PATCH] Bug 64494: Ensure "applyAlignment" in cell-styles is enabled when necessary Also check it when fetching currently defined cell-alignment git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1885059 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xssf/usermodel/XSSFCellStyle.java | 8 +++++ .../poi/xssf/usermodel/TestXSSFBugs.java | 35 ++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java index 0bebc2d119..b5ec7f2fc7 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java @@ -222,6 +222,8 @@ public class XSSFCellStyle implements CellStyle, Duplicatable { @Override public HorizontalAlignment getAlignment() { + if(!_cellXf.getApplyAlignment()) return HorizontalAlignment.GENERAL; + CTCellAlignment align = _cellXf.getAlignment(); if(align != null && align.isSetHorizontal()) { return HorizontalAlignment.forInt(align.getHorizontal().intValue()-1); @@ -629,6 +631,8 @@ public class XSSFCellStyle implements CellStyle, Duplicatable { @Override public VerticalAlignment getVerticalAlignment() { + if(!_cellXf.getApplyAlignment()) return VerticalAlignment.BOTTOM; + CTCellAlignment align = _cellXf.getAlignment(); if(align != null && align.isSetVertical()) { return VerticalAlignment.forInt(align.getVertical().intValue()-1); @@ -654,6 +658,8 @@ public class XSSFCellStyle implements CellStyle, Duplicatable { */ @Override public void setAlignment(HorizontalAlignment align) { + _cellXf.setApplyAlignment(true); + getCellAlignment().setHorizontal(align); } @@ -1155,6 +1161,8 @@ public class XSSFCellStyle implements CellStyle, Duplicatable { * @param align - the type of alignment */ public void setVerticalAlignment(VerticalAlignment align) { + _cellXf.setApplyAlignment(true); + getCellAlignment().setVertical(align); } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java index 7f17019844..034cdf1613 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -3630,7 +3630,7 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { } @Test - public void test64986() throws IOException { + public void test64986() { XSSFWorkbook w = new XSSFWorkbook(); XSSFSheet s = w.createSheet(); XSSFRow r = s.createRow(0); @@ -3667,4 +3667,37 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { assertNotNull(wb); } } + + @Test + public void test64494() throws IOException { + try (Workbook wb = new XSSFWorkbook()) { + CellStyle styleRight = wb.createCellStyle(); + CellStyle styleLeft = wb.createCellStyle(); + styleRight.setAlignment(HorizontalAlignment.RIGHT); + //styleRight.setBorderBottom(BorderStyle.DASH_DOT); + styleLeft.setAlignment(HorizontalAlignment.LEFT); + //styleLeft.setBorderRight(BorderStyle.MEDIUM); + + assertEquals(HorizontalAlignment.RIGHT, styleRight.getAlignment()); + assertEquals(HorizontalAlignment.LEFT, styleLeft.getAlignment()); + + Sheet sheet = wb.createSheet("test"); + Row row = sheet.createRow(0); + + Cell cellRight = row.createCell(0); + cellRight.setCellValue("R"); + cellRight.setCellStyle(styleRight); + + Cell cellLeft = row.createCell(1); + cellLeft.setCellValue("L"); + cellLeft.setCellStyle(styleLeft); + + /*try (OutputStream out = new FileOutputStream("/tmp/64494.xlsx")) { + wb.write(out); + }*/ + + assertEquals(HorizontalAlignment.RIGHT, cellRight.getCellStyle().getAlignment()); + assertEquals(HorizontalAlignment.LEFT, cellLeft.getCellStyle().getAlignment()); + } + } } -- 2.39.5