From 9359535968cb9e2f26478904c9577cdb98c8629f Mon Sep 17 00:00:00 2001 From: ignacio elizondo Date: Fri, 20 May 2022 17:05:58 -0300 Subject: [PATCH 1/5] GXOfiice setDate applies default format (m/d/yy h:mm) only when the cell does not have a Date format defined issue:95850 --- .../msoffice/excel/poi/xssf/ExcelCells.java | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/gxoffice/src/main/java/com/genexus/msoffice/excel/poi/xssf/ExcelCells.java b/gxoffice/src/main/java/com/genexus/msoffice/excel/poi/xssf/ExcelCells.java index c9cb1edf6..d0746ffea 100644 --- a/gxoffice/src/main/java/com/genexus/msoffice/excel/poi/xssf/ExcelCells.java +++ b/gxoffice/src/main/java/com/genexus/msoffice/excel/poi/xssf/ExcelCells.java @@ -145,36 +145,39 @@ public BigDecimal getNumber() throws ExcelException { } - public boolean setDate(Date value) throws ExcelException { - CheckReadonlyDocument(); - try { - if (!CommonUtil.nullDate().equals(value)) { - String dformat = ""; //this.doc.getDateFormat().toLowerCase(); + public boolean setDate(Date value) throws ExcelException { + CheckReadonlyDocument(); + try { + if (!CommonUtil.nullDate().equals(value)) { + String dformat = "m/d/yy h:mm";//this.doc.getDateFormat().toLowerCase(); Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance calendar.setTime(value); if (calendar.get(Calendar.MINUTE) == 0 && calendar.get(Calendar.HOUR) == 0 - && calendar.get(Calendar.SECOND) == 0 && dformat.indexOf(' ') > 0) { + && calendar.get(Calendar.SECOND) == 0 && dformat.indexOf(' ') > 0) { dformat = dformat.substring(0, dformat.indexOf(' ')); } - DataFormat df = pWorkbook.createDataFormat(); - XSSFCellStyle newStyle = stylesCache.getCellStyle(df.getFormat(dformat)); for (int i = 1; i <= cellCount; i++) { XSSFCellStyle cellStyle = pCells[i].getCellStyle(); - copyPropertiesStyle(newStyle, cellStyle); - newStyle.setDataFormat(df.getFormat(dformat)); + if (! DateUtil.isCellDateFormatted(pCells[i])) { + XSSFCellStyle newStyle = pWorkbook.createCellStyle(); + copyPropertiesStyle(newStyle, cellStyle); + newStyle.setDataFormat(df.getFormat(dformat)); + pCells[i].setCellStyle(newStyle); + fitColumnWidth(i, dformat.length() + 4); + }else { + fitColumnWidth(i, cellStyle.getDataFormatString().length() + 4); + } pCells[i].setCellValue(value); - pCells[i].setCellStyle(newStyle); - fitColumnWidth(i, dformat.length() + 4); } - return true; - } - } catch (Exception e) { - throw new ExcelException(7, "Invalid cell value"); - } - return false; - } + return true; + } + } catch (Exception e) { + throw new ExcelException(7, "Invalid cell value"); + } + return false; + } public Date getDate() throws ExcelException { Date returnValue = null; From 3bc373197103286c76dd306087b7c79e92b15bf6 Mon Sep 17 00:00:00 2001 From: ignacio elizondo Date: Fri, 20 May 2022 17:09:14 -0300 Subject: [PATCH 2/5] Gxoffice autofit now checks all rows to get the total columns being used to set the width. issue:95577 --- .../excel/poi/xssf/ExcelSpreadsheet.java | 34 ++++++++++--------- .../msoffice/excel/ExcelSpreadsheetTest.java | 4 +-- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/gxoffice/src/main/java/com/genexus/msoffice/excel/poi/xssf/ExcelSpreadsheet.java b/gxoffice/src/main/java/com/genexus/msoffice/excel/poi/xssf/ExcelSpreadsheet.java index 0ad09c36b..13c3a89b8 100644 --- a/gxoffice/src/main/java/com/genexus/msoffice/excel/poi/xssf/ExcelSpreadsheet.java +++ b/gxoffice/src/main/java/com/genexus/msoffice/excel/poi/xssf/ExcelSpreadsheet.java @@ -233,22 +233,24 @@ private void recalculateFormulas() { } } - private void autoFitColumns() { - if (_autoFitColumnsOnSave) { - int sheetsCount = _workbook.getNumberOfSheets(); - for (int i = 0; i < sheetsCount; i++) { - org.apache.poi.ss.usermodel.Sheet sheet = _workbook.getSheetAt(i); - - Row row = sheet.getRow(0); - if (row != null) { - int columnCount = row.getPhysicalNumberOfCells(); - for (int j = 0; j < columnCount; j++) { - sheet.autoSizeColumn(j); - } - } - } - } - } + private void autoFitColumns() { + if (_autoFitColumnsOnSave) { + int sheetsCount = _workbook.getNumberOfSheets(); + for (int i = 0; i < sheetsCount; i++) { + org.apache.poi.ss.usermodel.Sheet sheet = _workbook.getSheetAt(i); + int columnCount = 0; + for (int j =0; j <= sheet.getLastRowNum(); j++){ + Row row = sheet.getRow(j); + if (row != null) { + columnCount = Math.max(columnCount, row.getLastCellNum()); + } + } + for (int j = 0; j < columnCount; j++) { + sheet.autoSizeColumn(j); + } + } + } + } @Override diff --git a/gxoffice/src/test/java/com/genexus/msoffice/excel/ExcelSpreadsheetTest.java b/gxoffice/src/test/java/com/genexus/msoffice/excel/ExcelSpreadsheetTest.java index 8c4334dbe..6428200e3 100644 --- a/gxoffice/src/test/java/com/genexus/msoffice/excel/ExcelSpreadsheetTest.java +++ b/gxoffice/src/test/java/com/genexus/msoffice/excel/ExcelSpreadsheetTest.java @@ -890,7 +890,7 @@ public void testHideRow2() { excel.save(); excel.close(); // Verify previous Excel Document - excel = open("testHideRow"); + excel = open("testHideRow2"); assertEquals(1, excel.getCell(1, 1).getNumericValue().intValue()); excel.save(); @@ -909,7 +909,7 @@ public void testHideRow3() { excel.save(); excel.close(); // Verify previous Excel Document - excel = open("testHideRow"); + excel = open("testHideRow3"); assertEquals(1, excel.getCell(1, 1).getNumericValue().intValue()); excel.save(); From 9c7433a2f10fcb82a3fad33695e9756a17f0ed20 Mon Sep 17 00:00:00 2001 From: ignacio elizondo Date: Tue, 24 May 2022 15:41:49 -0300 Subject: [PATCH 3/5] Unit test for GXoffice for testing Autofit and Formats of cells with Date values issue 95850 95577 --- .../msoffice/excel/ExcelSpreadsheetTest.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/gxoffice/src/test/java/com/genexus/msoffice/excel/ExcelSpreadsheetTest.java b/gxoffice/src/test/java/com/genexus/msoffice/excel/ExcelSpreadsheetTest.java index 6428200e3..220f49b2e 100644 --- a/gxoffice/src/test/java/com/genexus/msoffice/excel/ExcelSpreadsheetTest.java +++ b/gxoffice/src/test/java/com/genexus/msoffice/excel/ExcelSpreadsheetTest.java @@ -1018,6 +1018,67 @@ public void testSaveAs() { } + @Test + public void testAutoFit() { + ExcelSpreadsheetGXWrapper excel = create("testAutoFit"); + excel.setAutofit(true); + excel.getCells(1, 2, 1, 1).setText("LONGTEXTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT"); + excel.getCells(1, 3, 1, 1).setText("VERYLONGTEXTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT"); + excel.getCells(2, 4, 1, 1).setText("hola!"); + excel.getCells(6, 6, 1, 1).setText("VERYLONGTEXTINDIFFERENTROWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW"); + ExcelCells cells = excel.getCells(7, 7, 1, 1); + ExcelStyle style = new ExcelStyle(); + style.setDataFormat("#.##"); //change style, so it shows the full number not scientific notation + cells.setNumericValue(new BigDecimal("123456789123456789123456789")); + cells.setCellStyle(style); + excel.save(); + excel.close(); + } + + @Test + public void testDateFormat() { + ExcelSpreadsheetGXWrapper excel = create("testDateFormat"); + excel.setAutofit(true); + Date date = new Date(); + //sets date with default format + ExcelCells cells = excel.getCells(1, 1, 1, 1); + cells.setDateValue(date); + //sets date and apply format after + cells = excel.getCells(2, 1, 1, 1); + ExcelStyle style = new ExcelStyle(); + cells.setDateValue(date); + style.setDataFormat("YYYY/MM/DD hh:mm:ss"); + cells.setCellStyle(style); + //sets date and apply format before + cells = excel.getCells(3, 1, 1, 1); + style = new ExcelStyle(); + style.setDataFormat("YYYY/MM/DD hh:mm:ss"); + cells.setCellStyle(style); + cells.setDateValue(date); + + date.setHours(0); + date.setMinutes(0); + date.setSeconds(0); + //sets date with default format without hours + cells = excel.getCells(4, 1, 1, 1); + cells.setDateValue(date); + //sets date and apply format after + cells = excel.getCells(5, 1, 1, 1); + style = new ExcelStyle(); + cells.setDateValue(date); + style.setDataFormat("YYYY/MM/DD hh:mm:ss"); + cells.setCellStyle(style); + //sets date and apply format before + cells = excel.getCells(6, 1, 1, 1); + style = new ExcelStyle(); + style.setDataFormat("YYYY/MM/DD hh:mm:ss"); + cells.setCellStyle(style); + cells.setDateValue(date); + + excel.save(); + excel.close(); + } + private void logErrorCodes(ExcelSpreadsheetGXWrapper excel) { // System.out.println(String.format("%s - %s", excel.getErrCode(), excel.getErrDescription())); } From 4281ac9aec05e98d9f7802043ffa915f7364e24f Mon Sep 17 00:00:00 2001 From: elizondogenexus Date: Mon, 4 Jul 2022 12:37:39 -0300 Subject: [PATCH 4/5] issue72284 change the order user-agent is read because user-agent end in edge browsers includes chrome version --- .../src/main/java/com/genexus/webpanels/HttpContextWeb.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java b/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java index 0c0aaf342..781d3b0f2 100644 --- a/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java +++ b/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java @@ -661,12 +661,12 @@ public int getBrowserType() { String userAgent = request.getHeader("USER-AGENT"); if (userAgent != null) { - if (userAgent.toUpperCase().indexOf("CHROME") != -1) { + if ((userAgent.indexOf("Edge")) != -1) { + return BROWSER_EDGE; + } else if (userAgent.toUpperCase().indexOf("CHROME") != -1) { return BROWSER_CHROME; } else if (userAgent.toUpperCase().indexOf("FIREFOX") != -1) { return BROWSER_FIREFOX; - } else if ((userAgent.indexOf("Edge")) != -1) { - return BROWSER_EDGE; } else if ((userAgent.indexOf("MSIE")) != -1) { if ((userAgent.indexOf("Windows CE")) != -1) return BROWSER_POCKET_IE; From b51ceca82d5363ad87fa276e72003c973474ad4d Mon Sep 17 00:00:00 2001 From: elizondogenexus Date: Tue, 5 Jul 2022 10:44:43 -0300 Subject: [PATCH 5/5] change to recognize edg/edge/edgA/edgios as ID of edge browser in user agent depending on the enviroment where edge is run --- java/src/main/java/com/genexus/webpanels/HttpContextWeb.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java b/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java index 781d3b0f2..a22dc8076 100644 --- a/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java +++ b/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java @@ -71,7 +71,7 @@ public class HttpContextWeb extends HttpContext { private static final Pattern MULTIMEDIA_GXI_GRID_PATTERN = Pattern.compile("(\\w+)(_\\d{4})$"); - private static final Pattern EDGE_BROWSER_VERSION_REGEX = Pattern.compile(" Edge\\/([0-9]+)\\.", + private static final Pattern EDGE_BROWSER_VERSION_REGEX = Pattern.compile(" Edg[\\w]{0,3}\\/([0-9]+)\\.", Pattern.CASE_INSENSITIVE); private static final String GXEVENT_PARM = "gxevent"; @@ -661,7 +661,7 @@ public int getBrowserType() { String userAgent = request.getHeader("USER-AGENT"); if (userAgent != null) { - if ((userAgent.indexOf("Edge")) != -1) { + if ((userAgent.indexOf("Edg") ) != -1) { return BROWSER_EDGE; } else if (userAgent.toUpperCase().indexOf("CHROME") != -1) { return BROWSER_CHROME;