Skip to content Skip to sidebar Skip to footer

How To Create And Write To Excel File (.xlsx)?

There are libraries for Java developers that have tons of methods which do not work on Android. I started by working with libraries like OpenCSV, but unfortunately Excel has known

Solution 1:

First answer: do it server-side.

If that's not possible, just use JExecelAPI - pretty much everything that reads xlsx files reads xls files too.

Every other Excel library is going to be way too big.

Another thought - write csv files, either manually, or with one of the many csv libraries available. Again, most applications that read Excel files read csv files too.

Solution 2:

Since this question seems to be rather: "What is the most lightweight way creating Office Open XML files for Excel (*.xlsx)?", I will providing an example which does not need any libraries except the default java.lang, java.io and java.util.zip.

A *.xlsx file is nothing else than a ZIP archive containing XML files and other files in a directory structure. So all we need is a possibility for creating, reading and writing ZIP archives and creating, reading and writing XML files. For the ZIP part I am using java.util.zip and for the XML part I am using string manipulation. This, creating and manipulating XML via string manipulation, is not the most recommended way for manipulating XML but it is the most lightweight way since it does not needs any additional XML libraries.

Complete example:

import java.io.OutputStream;
import java.io.ByteArrayOutputStream;

import java.util.zip.*;

publicclassCreateXLSXFromScratch {

 //some static parts of the XLSX file:staticString content_types_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default ContentType=\"application/vnd.openxmlformats-package.relationships+xml\" Extension=\"rels\"/><Default ContentType=\"application/xml\" Extension=\"xml\"/><Override ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\" PartName=\"/docProps/app.xml\"/><Override ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\" PartName=\"/docProps/core.xml\"/><Override ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\" PartName=\"/xl/sharedStrings.xml\"/><Override ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\" PartName=\"/xl/styles.xml\"/><Override ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\" PartName=\"/xl/workbook.xml\"/><Override ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\" PartName=\"/xl/worksheets/sheet1.xml\"/></Types>";

 staticString docProps_app_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\"><Application>"+"Created Low level From Scratch"+"</Application></Properties>";

 staticString docProps_core_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><dcterms:created xsi:type=\"dcterms:W3CDTF\">"+ java.time.Instant.now().truncatedTo(java.time.temporal.ChronoUnit.SECONDS).toString() +"</dcterms:created><dc:creator>"+"Axel Richter from scratch"+"</dc:creator></cp:coreProperties>";

 staticString _rels_rels_xml  ="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Target=\"xl/workbook.xml\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\"/><Relationship Id=\"rId2\" Target=\"docProps/app.xml\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\"/><Relationship Id=\"rId3\" Target=\"docProps/core.xml\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\"/></Relationships>";

 staticString xl_rels_workbook_xml_rels_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Target=\"sharedStrings.xml\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\"/><Relationship Id=\"rId2\" Target=\"styles.xml\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\"/><Relationship Id=\"rId3\" Target=\"worksheets/sheet1.xml\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\"/></Relationships>";

 staticString xl_sharedstrings_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><sst count=\"0\" uniqueCount=\"0\" xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"/>"; 

 staticString xl_styles_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"><numFmts count=\"0\"/><fonts count=\"1\"><font><sz val=\"11.0\"/><color indexed=\"8\"/><name val=\"Calibri\"/><family val=\"2\"/><scheme val=\"minor\"/></font></fonts><fills count=\"2\"><fill><patternFill patternType=\"none\"/></fill><fill><patternFill patternType=\"darkGray\"/></fill></fills><borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs><cellXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/></cellXfs></styleSheet>";

 staticString xl_workbook_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"><workbookPr date1904=\"false\"/><bookViews><workbookView activeTab=\"0\"/></bookViews><sheets><sheet name=\""+"Sheet1"+"\" r:id=\"rId3\" sheetId=\"1\"/></sheets></workbook>";

 staticString xl_worksheets_sheet1_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"><dimension ref=\"A1\"/><sheetViews><sheetView workbookViewId=\"0\" tabSelected=\"true\"/></sheetViews><sheetFormatPr defaultRowHeight=\"15.0\"/><sheetData/><pageMargins bottom=\"0.75\" footer=\"0.3\" header=\"0.3\" left=\"0.7\" right=\"0.7\" top=\"0.75\"/></worksheet>";

 publicstatic void main(String[] args) throwsException {

  // result goes into a ByteArrayOutputStreamByteArrayOutputStream resultout = new ByteArrayOutputStream();

  // needed objectsZipEntry zipentry = null;
  byte[] data = null;

  // create ZipOutputStreamZipOutputStream zipout = new ZipOutputStream(resultout);

  // create the static parts of the XLSX ZIP file:

  zipentry = new ZipEntry("[Content_Types].xml");
  zipout.putNextEntry(zipentry);
  data = content_types_xml.getBytes();
  zipout.write(data, 0, data.length);
  zipout.closeEntry();

  zipentry = new ZipEntry("docProps/app.xml");
  zipout.putNextEntry(zipentry);
  data = docProps_app_xml.getBytes();
  zipout.write(data, 0, data.length);
  zipout.closeEntry();

  zipentry = new ZipEntry("docProps/core.xml");
  zipout.putNextEntry(zipentry);
  data = docProps_core_xml.getBytes();
  zipout.write(data, 0, data.length);
  zipout.closeEntry();

  zipentry = new ZipEntry("_rels/.rels");
  zipout.putNextEntry(zipentry);
  data = _rels_rels_xml.getBytes();
  zipout.write(data, 0, data.length);
  zipout.closeEntry();

  zipentry = new ZipEntry("xl/_rels/workbook.xml.rels");
  zipout.putNextEntry(zipentry);
  data = xl_rels_workbook_xml_rels_xml.getBytes();
  zipout.write(data, 0, data.length);
  zipout.closeEntry();

  zipentry = new ZipEntry("xl/sharedStrings.xml");
  zipout.putNextEntry(zipentry);
  data = xl_sharedstrings_xml.getBytes();
  zipout.write(data, 0, data.length);
  zipout.closeEntry();

  zipentry = new ZipEntry("xl/styles.xml");
  zipout.putNextEntry(zipentry);
  data = xl_styles_xml.getBytes();
  zipout.write(data, 0, data.length);
  zipout.closeEntry();

  zipentry = new ZipEntry("xl/workbook.xml");
  zipout.putNextEntry(zipentry);
  data = xl_workbook_xml.getBytes();
  zipout.write(data, 0, data.length);
  zipout.closeEntry();

  // preparing the sheet data:Object[][] sheetData = new Object[][] {
   {"Text", "Value", "Formula"},
   {"Text1", 1.23456, "=SIN(B2)"},
   {"Text2", 2.34567, "=SQRT(B3)"},
   {"Text3", 123.456, "=B4/10"}
  };
  String sheetdata ="<sheetData>";
  int r =0;
  char c = 'A'; --c;
  for (Object[] rowData : sheetData) {
   sheetdata +="<row r=\""+++r +"\">";
   c = 'A'; --c;
   for (Object cellData : rowData) {
    sheetdata +="<c r=\""+Character.toString(++c) + r +"\"";
    if (cellData instanceof String&& ((String)cellData).startsWith("=")) {
     sheetdata +="><f>"+ ((String)cellData).replace("=", "") +"</f></c>";
    } elseif (cellData instanceof String) {
     sheetdata +=" t=\"inlineStr\"><is><t>"+ ((String)cellData) +"</t></is></c>";
    } elseif (cellData instanceof Double) {
     sheetdata +="><v>"+ ((Double)cellData) +"</v></c>";
    }
   }
   sheetdata +="</row>";
  }
  sheetdata +="</sheetData>";

  // get the static sheet xml into a buffer for further processingStringBuffer xl_worksheets_sheet1_xml_buffer = new StringBuffer(xl_worksheets_sheet1_xml);

  // get position of the <dimension ref=\"A1\"/> in the static xl_worksheets_sheet1_xml
  int dimensionstart = xl_worksheets_sheet1_xml_buffer.indexOf("<dimension ref=\"A1\"/>");
  // replace the <dimension ref=\"A1\"/> with the new dimension
  xl_worksheets_sheet1_xml_buffer = xl_worksheets_sheet1_xml_buffer.replace(
   dimensionstart, 
   dimensionstart +"<dimension ref=\"A1\"/>".length(), 
   "<dimension ref=\"A1:"+Character.toString(c) + r +"\"/>");

  // get position of the <sheetData/> in the static xl_worksheets_sheet1_xml
  int sheetdatastart = xl_worksheets_sheet1_xml_buffer.indexOf("<sheetData/>");
  // replace the <sheetData/> with the prepared sheet date string
  xl_worksheets_sheet1_xml_buffer = xl_worksheets_sheet1_xml_buffer.replace(
   sheetdatastart, 
   sheetdatastart +"<sheetData/>".length(), 
   sheetdata);

  // create the xl/worksheets/sheet1.xml
  zipentry = new ZipEntry("xl/worksheets/sheet1.xml");
  zipout.putNextEntry(zipentry);
  data = xl_worksheets_sheet1_xml_buffer.toString().getBytes();
  zipout.write(data, 0, data.length);
  zipout.closeEntry();

  zipout.finish();

  // now ByteArrayOutputStream resultout contains the XLSX file data// writing this data into a filetry (java.io.FileOutputStream fileout = new java.io.FileOutputStream("test.xlsx")) {
   resultout.writeTo(fileout);
   resultout.close();
  }

 }
}

Solution 3:

It's 2018. Use Microsoft Graph API and create the Excel file in O365.

Microsoft has published a few examples in Angular and C#. It's not Java but it is a good starting point: https://developer.microsoft.com/en-us/graph/docs/concepts/excel-write-to-workbook.

The MS Graph Java SDK is Android compatible.

Limitation - there is no easy way to create an Excel file from scratch using the API. You may want to keep a blank workbook and clone it each time.

Solution 4:

update of Axel Richter's answer:

  • add cell dynamically
  • unlimited columns (not only 26)
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

publicclassCreatePlainXLSX {

    //some static parts of the XLSX file:staticString content_types_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default ContentType=\"application/vnd.openxmlformats-package.relationships+xml\" Extension=\"rels\"/><Default ContentType=\"application/xml\" Extension=\"xml\"/><Override ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\" PartName=\"/docProps/app.xml\"/><Override ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\" PartName=\"/docProps/core.xml\"/><Override ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\" PartName=\"/xl/sharedStrings.xml\"/><Override ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\" PartName=\"/xl/styles.xml\"/><Override ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\" PartName=\"/xl/workbook.xml\"/><Override ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\" PartName=\"/xl/worksheets/sheet1.xml\"/></Types>";

    staticString docProps_app_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\"><Application>"+"Created Low level From Scratch"+"</Application></Properties>";

    staticSimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

    staticString docProps_core_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><dcterms:created xsi:type=\"dcterms:W3CDTF\">"+ formatter.format(Calendar.getInstance().getTime()) /*java.time.Instant.now().truncatedTo(java.time.temporal.ChronoUnit.SECONDS).toString()*/+"</dcterms:created><dc:creator>"+"Axel Richter from scratch"+"</dc:creator></cp:coreProperties>";

    staticString _rels_rels_xml  ="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Target=\"xl/workbook.xml\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\"/><Relationship Id=\"rId2\" Target=\"docProps/app.xml\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\"/><Relationship Id=\"rId3\" Target=\"docProps/core.xml\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\"/></Relationships>";

    staticString xl_rels_workbook_xml_rels_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Target=\"sharedStrings.xml\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\"/><Relationship Id=\"rId2\" Target=\"styles.xml\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\"/><Relationship Id=\"rId3\" Target=\"worksheets/sheet1.xml\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\"/></Relationships>";

    staticString xl_sharedstrings_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><sst count=\"0\" uniqueCount=\"0\" xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"/>";

    staticString xl_styles_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"><numFmts count=\"0\"/><fonts count=\"1\"><font><sz val=\"11.0\"/><color indexed=\"8\"/><name val=\"Calibri\"/><family val=\"2\"/><scheme val=\"minor\"/></font></fonts><fills count=\"2\"><fill><patternFill patternType=\"none\"/></fill><fill><patternFill patternType=\"darkGray\"/></fill></fills><borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs><cellXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/></cellXfs></styleSheet>";

    staticString xl_workbook_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"><workbookPr date1904=\"false\"/><bookViews><workbookView activeTab=\"0\"/></bookViews><sheets><sheet name=\""+"Sheet1"+"\" r:id=\"rId3\" sheetId=\"1\"/></sheets></workbook>";

    staticString xl_worksheets_sheet1_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\"?><worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"><dimension ref=\"A1\"/><sheetViews><sheetView workbookViewId=\"0\" tabSelected=\"true\"/></sheetViews><sheetFormatPr defaultRowHeight=\"15.0\"/><sheetData/><pageMargins bottom=\"0.75\" footer=\"0.3\" header=\"0.3\" left=\"0.7\" right=\"0.7\" top=\"0.75\"/></worksheet>";


    ArrayList<ArrayList<Object>> sheetDat = new ArrayList<>();

    publicCreatePlainXLSX() {
        sheetDat.add(0, new ArrayList<>());
    }

    public void addCell(int rowNum, int cellNum, Object value) {

        if (sheetDat.size() <= rowNum){
            for (int a = sheetDat.size(); a <= rowNum; a++) {
                sheetDat.add(new ArrayList<>());
            }
        }

        if (sheetDat.get(rowNum).size() <= cellNum) {
            for (int a = sheetDat.get(rowNum).size(); a <= cellNum; a++) {
                sheetDat.get(rowNum).add("");
            }
        }
        sheetDat.get(rowNum).set(cellNum, value);
    }

    privatestatic int toNumber(String name) {
        int number =0;
        for (int i =0; i < name.length(); i++) {
            number = number *26+ (name.charAt(i) - ('A' -1));
        }
        return number;
    }

    privatestaticString toName(int number) {
        StringBuilder sb = new StringBuilder();
        while (number-->0) {
            sb.append((char)('A' + (number %26)));
            number /=26;
        }
        return sb.reverse().toString();
    }

    privateString incrementColumnR(String a){
        return toName(toNumber(a) +1);
    }

    public void exportToFile(FileOutputStream fileout) throwsException {

        // result goes into a ByteArrayOutputStreamByteArrayOutputStream resultout = new ByteArrayOutputStream();

        // needed objectsZipEntry zipentry;
        byte[] data;

        // create ZipOutputStreamZipOutputStream zipout = new ZipOutputStream(resultout);

        // create the static parts of the XLSX ZIP file:

        zipentry = new ZipEntry("[Content_Types].xml");
        zipout.putNextEntry(zipentry);
        data = content_types_xml.getBytes();
        zipout.write(data, 0, data.length);
        zipout.closeEntry();

        zipentry = new ZipEntry("docProps/app.xml");
        zipout.putNextEntry(zipentry);
        data = docProps_app_xml.getBytes();
        zipout.write(data, 0, data.length);
        zipout.closeEntry();

        zipentry = new ZipEntry("docProps/core.xml");
        zipout.putNextEntry(zipentry);
        data = docProps_core_xml.getBytes();
        zipout.write(data, 0, data.length);
        zipout.closeEntry();

        zipentry = new ZipEntry("_rels/.rels");
        zipout.putNextEntry(zipentry);
        data = _rels_rels_xml.getBytes();
        zipout.write(data, 0, data.length);
        zipout.closeEntry();

        zipentry = new ZipEntry("xl/_rels/workbook.xml.rels");
        zipout.putNextEntry(zipentry);
        data = xl_rels_workbook_xml_rels_xml.getBytes();
        zipout.write(data, 0, data.length);
        zipout.closeEntry();

        zipentry = new ZipEntry("xl/sharedStrings.xml");
        zipout.putNextEntry(zipentry);
        data = xl_sharedstrings_xml.getBytes();
        zipout.write(data, 0, data.length);
        zipout.closeEntry();

        zipentry = new ZipEntry("xl/styles.xml");
        zipout.putNextEntry(zipentry);
        data = xl_styles_xml.getBytes();
        zipout.write(data, 0, data.length);
        zipout.closeEntry();

        zipentry = new ZipEntry("xl/workbook.xml");
        zipout.putNextEntry(zipentry);
        data = xl_workbook_xml.getBytes();
        zipout.write(data, 0, data.length);
        zipout.closeEntry();

        // preparing the sheet data:String sheetdata ="<sheetData>";
        int r =0;
        String c = toName(0);
        ArrayList<ArrayList<Object>> sheet = sheetDat;
        for (ArrayList<Object> rowData : sheet) {
            sheetdata +="<row r=\""+++r +"\">";
            c = toName(0);
            for (Object cellData : rowData) {
                c = incrementColumnR(c);
                sheetdata +="<c r=\""+ c + r +"\"";
                if (cellData instanceof String&& ((String) cellData).startsWith("=")) {
                    sheetdata +="><f>"+ ((String) cellData).replace("=", "") +"</f></c>";
                } elseif (cellData instanceof String) {
                    sheetdata +=" t=\"inlineStr\"><is><t>"+ cellData +"</t></is></c>";
                } elseif (cellData instanceof Double|| cellData instanceof Integer) {
                    sheetdata +="><v>"+ cellData +"</v></c>";
                }
            }
            sheetdata +="</row>";
        }
        sheetdata +="</sheetData>";

        // get the static sheet xml into a buffer for further processingStringBuffer xl_worksheets_sheet1_xml_buffer = new StringBuffer(xl_worksheets_sheet1_xml);

        // get position of the <dimension ref=\"A1\"/> in the static xl_worksheets_sheet1_xml
        int dimensionstart = xl_worksheets_sheet1_xml_buffer.indexOf("<dimension ref=\"A1\"/>");
        // replace the <dimension ref=\"A1\"/> with the new dimension
        xl_worksheets_sheet1_xml_buffer = xl_worksheets_sheet1_xml_buffer.replace(
                dimensionstart,
                dimensionstart +"<dimension ref=\"A1\"/>".length(),
                "<dimension ref=\"A1:"+ c + r +"\"/>");

        // get position of the <sheetData/> in the static xl_worksheets_sheet1_xml
        int sheetdatastart = xl_worksheets_sheet1_xml_buffer.indexOf("<sheetData/>");
        // replace the <sheetData/> with the prepared sheet date string
        xl_worksheets_sheet1_xml_buffer = xl_worksheets_sheet1_xml_buffer.replace(
                sheetdatastart,
                sheetdatastart +"<sheetData/>".length(),
                sheetdata);

        // create the xl/worksheets/sheet1.xml
        zipentry = new ZipEntry("xl/worksheets/sheet1.xml");
        zipout.putNextEntry(zipentry);
        data = xl_worksheets_sheet1_xml_buffer.toString().getBytes();
        zipout.write(data, 0, data.length);
        zipout.closeEntry();

        zipout.finish();

        // now ByteArrayOutputStream resultout contains the XLSX file data// writing this data into a fileif(fileout != null) {
            resultout.writeTo(fileout);
            resultout.close();
        }
    }
}

Solution 5:

Use Apache POI and enable multi dex by simply adding compile "com.android.support:multidex:1.0.1" to your dependencies in build.gradle. You also need to set multiDexEnabled true. That should get rid of the 65k method limitation.

Post a Comment for "How To Create And Write To Excel File (.xlsx)?"