https://bz.apache.org/bugzilla/show_bug.cgi?id=69557

--- Comment #1 from Gonzalo Aguilar Delgado <gaguilardelg...@medallia.com> ---
Forgot to mention that it only happens with EXCEL2007

I wrote few test cases... 

        private static File getTempFile(String resourceName) throws IOException
{
                return File.createTempFile(resourceName, ".xlsx");
        }

        private static File setupTempExcelFileWithRecords(int records) throws
IOException {
                var customTempFile = getTempFile("TestExcel");
                TestDataGenerator.writeExcel(records, customTempFile);
                generatedFile = true;
                return customTempFile;
        }


This will create an excel file. And the class I use is this one:

import com.google.common.collect.ImmutableMap;
import com.google.gson.GsonBuilder;
import common.Common;
import common.propernames.ProperNames;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;
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.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.joda.time.DateTime;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import tiny.Clock;
import tiny.CollUtils;
import tiny.Crypto;
import tiny.Empty;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.List;
import java.util.Map;

import javax.annotation.Nonnull;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

/**
 * Simple utility class used to generate test data for uploading to Auto
Importer.
 */
public class TestDataGenerator {

        /** Generate the test data and write it to a JSON file in the current
directory */
        public static void writeJson(int records, String filePath) throws
IOException {
                List<Map<String, String>> values = generateValues(records);

                if (!values.isEmpty()) {
                        try (Writer w = Common.asPrintWriterUTF8(new
FileOutputStream(filePath))) {
                                w.write(new
GsonBuilder().setPrettyPrinting().create().toJson(values));
                        }
                }
        }

        public static List<Map<String, String>> generateValues(int records) {
                List<Map<String, String>> values = Empty.list();
                int names = (int) Math.sqrt(records);
                DateTime now = Clock.getDateTimeNow();

                List<String> firstnames = CollUtils.subList(names,
ProperNames.humanFirstNames);
                List<String> lastnames = CollUtils.subList(names,
ProperNames.humanLastNames);

                for (int i = 0; i < records; i++) {
                        String firstname = CollUtils.randomElement(firstnames);
                        String lastname = CollUtils.randomElement(lastnames);
                        values.add(createRow(firstname, lastname, now));
                }
                return values;
        }

        public static ImmutableMap<String, String> createRow(String firstname,
String lastname, DateTime now) {
                return ImmutableMap.of(
                                "firstname", firstname,
                                "lastname", lastname,
                                "email", firstname + "." + lastname +
"@example.com",
                                "property", "ABZPD" + Crypto.nextInt(10000000),
                                "checkout",
Common.ISO_DATE_FORMATTER.print(now.minusDays(Crypto.nextInt(30))));
        }

        public static void writeExcel(int records, File file) throws
IOException {
                Workbook workbook = new XSSFWorkbook();

                Sheet sheet = workbook.createSheet("TestSheet");
                sheet.setColumnWidth(0, 6000);
                sheet.setColumnWidth(1, 4000);

                Row header = sheet.createRow(sheet.getLastRowNum() + 1);

                CellStyle headerStyle = defaultHeaderCellStyle(workbook);

                XSSFFont font = defaultFontStyle((XSSFWorkbook) workbook);
                headerStyle.setFont(font);

                setHeaders(header, headerStyle);

                if (records > 0) {
                        for (Map<String, String> generatedRow :
TestDataGenerator.generateValues(records)) {
                                createRow(generatedRow, sheet);
                        }
                }

                FileOutputStream outputStream = new FileOutputStream(file);
                workbook.write(outputStream);
                workbook.close();
                outputStream.flush();
                outputStream.close();
        }

        private static void createRow(Map<String, String> generatedRow, Sheet
sheet) {
                Row row = sheet.createRow(sheet.getLastRowNum() + 1);
                int index = 0;
                for (Map.Entry<String, String> entry : generatedRow.entrySet())
{
                        Cell rowCell = row.createCell(index++);
                        rowCell.setCellValue(entry.getValue());
                }
        }

        private static void setHeaders(Row header, CellStyle headerStyle) {
                var row = TestDataGenerator.createRow("firstname", "lastname",
DateTime.now());
                int index = 0;
                for (String key : row.keySet()) {
                        Cell headerCell = header.createCell(index++);
                        headerCell.setCellValue(key);
                        headerCell.setCellStyle(headerStyle);
                }
        }

        private static @Nonnull XSSFFont defaultFontStyle(XSSFWorkbook
workbook) {
                XSSFFont font = workbook.createFont();
                font.setFontName("Arial");
                font.setFontHeightInPoints((short) 10);
                font.setBold(true);
                return font;
        }

        private static @Nonnull CellStyle defaultHeaderCellStyle(Workbook
workbook) {
                CellStyle headerStyle = workbook.createCellStyle();
               
headerStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());
                headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
                return headerStyle;
        }

        public static void writeCSV(int records, String filePath) throws
IOException {
                List<Map<String, String>> data = generateValues(records);

                if (!data.isEmpty()) {
                        try (FileWriter writer = new FileWriter(filePath)) {
                                // Write header
                                Map<String, String> headerMap = data.get(0);
                                writer.append(String.join(",",
headerMap.keySet()));
                                writer.append("\n");

                                // Write data rows
                                for (Map<String, String> row : data) {
                                        writer.append(String.join(",",
row.values()));
                                        writer.append("\n");
                                }
                        }
                }
        }

        public static void writeXml(int records, String filePath) throws
IOException {
                List<Map<String, String>> data = generateValues(records);
                try {
                        // Create XML document
                        DocumentBuilderFactory documentFactory =
DocumentBuilderFactory.newInstance();
                        DocumentBuilder documentBuilder =
documentFactory.newDocumentBuilder();
                        Document document = documentBuilder.newDocument();

                        // Create root element
                        Element root = document.createElement("root");
                        document.appendChild(root);

                        // Convert  data to XML elements
                        for (Map<String, String> record : data) {
                                Element recordElement =
document.createElement("record");
                                for (Map.Entry<String, String> entry :
record.entrySet()) {
                                        Element element =
document.createElement(entry.getKey());
                                       
element.appendChild(document.createTextNode(entry.getValue()));
                                        recordElement.appendChild(element);
                                }
                                root.appendChild(recordElement);
                        }

                        // Write XML document to file
                        TransformerFactory transformerFactory =
TransformerFactory.newInstance();
                        Transformer transformer =
transformerFactory.newTransformer();
                        transformer.setOutputProperty(OutputKeys.INDENT,
"yes");
                        DOMSource domSource = new DOMSource(document);
                        StreamResult streamResult = new StreamResult(new
File(filePath));
                        transformer.transform(domSource, streamResult);

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

}

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@poi.apache.org
For additional commands, e-mail: dev-h...@poi.apache.org

Reply via email to