<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6515659600705162167</id><updated>2011-10-12T13:57:47.337-07:00</updated><category term='excel charts to LaTeX'/><category term='How to get the best of free'/><category term='LaTeX'/><category term='XSSF'/><category term='&quot;writing large data to excel using java&quot;'/><category term='&quot;APACHE POI&quot;'/><title type='text'>Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vikramvkamath.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6515659600705162167/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://vikramvkamath.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>vikram kamath</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_RCY5kTFHIPg/SNsOIE9xD6I/AAAAAAAAA34/azKFZXamIMw/S220/vik.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6515659600705162167.post-8465111623628942795</id><published>2010-07-20T12:38:00.000-07:00</published><updated>2010-07-28T15:27:43.359-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XSSF'/><category scheme='http://www.blogger.com/atom/ns#' term='&quot;writing large data to excel using java&quot;'/><category scheme='http://www.blogger.com/atom/ns#' term='&quot;APACHE POI&quot;'/><title type='text'>Writing large excel files (Excel 2007)</title><content type='html'>I recently was working on an assignment of exporting data from database to excel-2007. This made me hunt for an API that would take care of low-level excel format handling. There are probably many Java API's available but I am aware of JExcel and Apache POI. I had chosen JExcel earlier to generate and download ".xls" documents on a portal. There was no particular reason I chose JExcel over Apache POI, but I was curious about Apache POI and this was my chance.&lt;br /&gt;&lt;br /&gt;Apache POI works very well and has a huge array of functionalities to write sophisticated xlsx documents. Apache POI permits writing xls documents as well using the HSSF Suite of packages. There is a prominent difference in the internal structure of xls(Excel-97 - 2003) documents. To demonstrate this: Create two documents and save one with ".xls" extension and the other with ".xlsx" extension. Some pre-requisite to doing this is: you must have Office 2007 to create xlsx documents and you must have some Zip/UnZip software like WinRar, Zip etc installed and working. Right Click each of the documents and try to open with Zip software you have. ".xlsx" opens up and shows directory structure of what looks like, whereas the ".xls" document refuses to open.:&lt;br /&gt;&lt;br /&gt;&lt;b&gt; Structure &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;/&lt;br /&gt;- ..&lt;br /&gt;- _rels&lt;br /&gt;- .rels&lt;br /&gt;- docProps&lt;br /&gt;- app.xml&lt;br /&gt;- core.xml&lt;br /&gt;- xl&lt;br /&gt;- _rels&lt;br /&gt;- worksheets&lt;br /&gt;- sheet1.xml&lt;br /&gt;- sheet2.xml&lt;br /&gt;- sharedStrings.xml&lt;br /&gt;- styles.xml&lt;br /&gt;- workbook.xml&lt;br /&gt;- [Content_Types].xml&lt;br /&gt;&lt;br /&gt;So much for the introduction to .xlsx document. Now getting back to the writing some code to generate excel'07 docs. Check out this link for getting started quickly: http://poi.apache.org/spreadsheet/quick-guide.html.&lt;br /&gt;&lt;br /&gt;Within some time I was able to generate excel reports by spitting the data fetched from database. However, for large reports having several thousands of rows and tens of columns I started facing fatal "OutOfMemory Error". Our server hosts 8 GB RAM and I was testing this on my 2 GB laptop. Probably if I'd run the same on server it would not have thrown up. But I did not want to take chances with multiple users trying to generate reports simultaneously which could exhaust our server&lt;br /&gt;&lt;br /&gt;I see Apache POI has API that is capable of opening streams from xlsx documents. So I tried this approach of writing a few rows...closing the stream and then reopening it and start re-writing it. I was hoping that all data would be flushed from physical memory....but it did not go as expected. Here is the output of my code:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="color:'red';"&gt;&lt;br /&gt;Please wait while data is being written...&lt;br /&gt;TOTAL COLS:13&lt;br /&gt;Rows updated = 2000&lt;br /&gt;WorkSheet name REPORT3_VIEW&lt;br /&gt;Rows updated = 4000&lt;br /&gt;Connection OFF&lt;br /&gt;Connection Count: 0&lt;br /&gt;Exception in thread "main" java.lang.OutOfMemoryError: Java heap space&lt;br /&gt;at org.apache.xmlbeans.impl.store.CharUtil.allocate(CharUtil.java:397)&lt;br /&gt;at org.apache.xmlbeans.impl.store.CharUtil.saveChars(CharUtil.java:441)...&lt;br /&gt;&lt;/init&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I would not suggest this approach for two reasons:&lt;br /&gt;* it is slow&lt;br /&gt;* it still causes java to retain document in the memory causing heap space to exhaust. I tried with smaller value for MAX_ROWS_UPDATED_AT_ONCE and it perhaps met the same fate...see below:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="color:'red';"&gt;&lt;br /&gt;Headers written..&lt;br /&gt;Please wait while data is being written...&lt;br /&gt;TOTAL COLS:13&lt;br /&gt;Rows updated = 200&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 400&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 600&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 800&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 1000&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 1200&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 1400&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 1600&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 1800&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 2000&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 2200&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 2400&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 2600&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 2800&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 3000&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 3200&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 3400&lt;br /&gt;WorkSheet nameAFP_REPORT3_VIEW&lt;br /&gt;Rows updated = 3600&lt;br /&gt;Connection OFF&lt;br /&gt;Connection Count: 0&lt;br /&gt;Exception in thread "main" java.lang.OutOfMemoryError: Java heap space&lt;br /&gt;&lt;br /&gt;&lt;/init&gt;&lt;/init&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Later I came across a solution from Yegor Koslov which mitigates the error above. In brief, his solution works like this: (1) A template xlsx doc is created which indicates the number of sheets to be written and the sheet names etc (2) All the data is dumped into an xml file (3) Build the zip file with the structured described above. This zip file is nothing but .xlsx doc. Details can be found here:&lt;a href="http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BigGridDemo.java"&gt;http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BigGridDemo.java&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Extending his logic to add more sheets in the xlsx document:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Disclaimer: Please use it at your own risk.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Yegor's solution worked very well for me and I chose to customize it a little bit. Any feedback would be helpful.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;div&gt;&lt;code&gt;&lt;div&gt;package ....common.util.excel;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;import java.io.File;&lt;/div&gt;&lt;div&gt;import java.io.FileInputStream;&lt;/div&gt;&lt;div&gt;import java.io.FileOutputStream;&lt;/div&gt;&lt;div&gt;import java.io.FileWriter;&lt;/div&gt;&lt;div&gt;import java.io.IOException;&lt;/div&gt;&lt;div&gt;import java.io.InputStream;&lt;/div&gt;&lt;div&gt;import java.io.OutputStream;&lt;/div&gt;&lt;div&gt;import java.io.Writer;&lt;/div&gt;&lt;div&gt;import java.sql.ResultSet;&lt;/div&gt;&lt;div&gt;import java.sql.SQLException;&lt;/div&gt;&lt;div&gt;import java.util.Enumeration;&lt;/div&gt;&lt;div&gt;import java.util.HashMap;&lt;/div&gt;&lt;div&gt;import java.util.Iterator;&lt;/div&gt;&lt;div&gt;import java.util.LinkedHashMap;&lt;/div&gt;&lt;div&gt;import java.util.Map;&lt;/div&gt;&lt;div&gt;import java.util.zip.ZipEntry;&lt;/div&gt;&lt;div&gt;import java.util.zip.ZipException;&lt;/div&gt;&lt;div&gt;import java.util.zip.ZipFile;&lt;/div&gt;&lt;div&gt;import java.util.zip.ZipOutputStream;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;import ....util.excel.BigGridDemo.SpreadsheetWriter;&lt;/div&gt;&lt;div&gt;import ....util.excel.SheetNotFoundException;&lt;/div&gt;&lt;div&gt;import org.apache.poi.ss.usermodel.BorderStyle;&lt;/div&gt;&lt;div&gt;import org.apache.poi.ss.usermodel.IndexedColors;&lt;/div&gt;&lt;div&gt;import org.apache.poi.xssf.usermodel.XSSFCellStyle;&lt;/div&gt;&lt;div&gt;import org.apache.poi.xssf.usermodel.XSSFSheet;&lt;/div&gt;&lt;div&gt;import org.apache.poi.xssf.usermodel.XSSFWorkbook;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;import ...common.util.db.ExportDBView;&lt;/div&gt;&lt;div&gt;import ...logging.Logger;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;public class Excel07WorkbookWriter {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;private XSSFWorkbook xwb;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;private String xlsxFileName;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;private Map&lt;string,&gt; styles;&lt;/string,&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;private LinkedHashMap&lt;string,xssfsheet&gt; sheets;&lt;/string,xssfsheet&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;private LinkedHashMap&lt;string,&gt; sheetData ;&lt;/string,&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;private HashMap&lt;string,string&gt; sheetSheetRefRelation;&lt;/string,string&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;private static Logger logg = Logger.getInstance(Excel07WorkbookWriter.class);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;/*&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; * @ Border selection will be same across all 4 cell borders&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; * @ alignment&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; */&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;private XSSFCellStyle createDataCellStyle(XSSFCellStyle style, BorderStyle borderStyle, short horAlign, short verAlign,&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;           &lt;/span&gt;boolean wrapText, boolean even){&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;style.setBorderBottom(borderStyle);&lt;/div&gt;&lt;div&gt;        style.setBorderLeft(borderStyle);&lt;/div&gt;&lt;div&gt;        style.setBorderRight(borderStyle);&lt;/div&gt;&lt;div&gt;        style.setBorderTop(borderStyle);&lt;/div&gt;&lt;div&gt;        style.setAlignment(horAlign);&lt;/div&gt;&lt;div&gt;        style.setVerticalAlignment(verAlign);&lt;/div&gt;&lt;div&gt;        style.setWrapText(wrapText);&lt;/div&gt;&lt;div&gt;        if (even){&lt;/div&gt;&lt;div&gt;        &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;//style.setFillForegroundColor(this.DATA_FOREGROUND_COLOR_EVEN);&lt;/div&gt;&lt;div&gt;        &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex());&lt;/div&gt;&lt;div&gt;        }else{&lt;/div&gt;&lt;div&gt;        &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;style.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());&lt;/div&gt;&lt;div&gt;        }&lt;/div&gt;&lt;div&gt;        style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);&lt;/div&gt;&lt;div&gt;        return style;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;/*&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; * @ Border selection will be same across all 4 cell borders&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; * @ alignment&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; */&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;private XSSFCellStyle createHeadingCellStyle(XSSFCellStyle style, BorderStyle borderStyle, short horAlign, short verAlign,&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;           &lt;/span&gt;boolean wrapText){&lt;/div&gt;&lt;div&gt;        style.setBorderBottom(borderStyle);&lt;/div&gt;&lt;div&gt;        style.setBorderLeft(borderStyle);&lt;/div&gt;&lt;div&gt;        style.setBorderRight(borderStyle);&lt;/div&gt;&lt;div&gt;        style.setBorderTop(borderStyle);&lt;/div&gt;&lt;div&gt;        style.setAlignment(horAlign);&lt;/div&gt;&lt;div&gt;        style.setVerticalAlignment(verAlign);&lt;/div&gt;&lt;div&gt;        style.setWrapText(wrapText);&lt;/div&gt;&lt;div&gt;        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());&lt;/div&gt;&lt;div&gt;        style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);&lt;/div&gt;&lt;div&gt;        return style;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;/*&lt;/div&gt;&lt;div&gt;     *  Create styles&lt;/div&gt;&lt;div&gt;     *&lt;/div&gt;&lt;div&gt;     */&lt;/div&gt;&lt;div&gt;    private Map&lt;string,&gt; getDefaultStyles(XSSFWorkbook wb){&lt;/string,&gt;&lt;/div&gt;&lt;div&gt;        Map&lt;string,&gt; styles = new HashMap&lt;string,&gt;();&lt;/string,&gt;&lt;/string,&gt;&lt;/div&gt;&lt;div&gt;        //XSSFDataFormat fmt = wb.createDataFormat();&lt;/div&gt;&lt;div&gt;        XSSFCellStyle headerCellStyle = wb.createCellStyle();&lt;/div&gt;&lt;div&gt;        headerCellStyle = createHeadingCellStyle(headerCellStyle,BorderStyle.THIN,&lt;/div&gt;&lt;div&gt;        &lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;XSSFCellStyle.ALIGN_GENERAL, XSSFCellStyle.VERTICAL_TOP, false);&lt;/div&gt;&lt;div&gt;        styles.put("headerRowStyle", headerCellStyle);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        XSSFCellStyle dataCellEvenRowStyle = wb.createCellStyle();&lt;/div&gt;&lt;div&gt;        dataCellEvenRowStyle = createDataCellStyle(dataCellEvenRowStyle,BorderStyle.THIN,&lt;/div&gt;&lt;div&gt;        &lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;XSSFCellStyle.ALIGN_GENERAL, XSSFCellStyle.VERTICAL_TOP, true,true);&lt;/div&gt;&lt;div&gt;        styles.put("dataRowEvenStyle", dataCellEvenRowStyle);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        XSSFCellStyle dataCellOddRowStyle = wb.createCellStyle();&lt;/div&gt;&lt;div&gt;        dataCellOddRowStyle = createDataCellStyle(dataCellOddRowStyle,BorderStyle.THIN,&lt;/div&gt;&lt;div&gt;        &lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;XSSFCellStyle.ALIGN_GENERAL, XSSFCellStyle.VERTICAL_TOP, true,false);&lt;/div&gt;&lt;div&gt;        styles.put("dataRowOddStyle", dataCellOddRowStyle);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        return styles;&lt;/div&gt;&lt;div&gt;    }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;/*&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;@xlsxfilename with or without ".xlsx"&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;@LinkedHashMap&lt;string,xssfsheet&gt; stores sheetnamea and sheet Obj&lt;/string,xssfsheet&gt;&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;@Map&lt;string,&gt; Map containing styles. Can be left NULL&lt;/string,&gt;&lt;/div&gt;&lt;div&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*/&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;public void init(String xlsxfilename, LinkedHashMap&lt;string,xssfsheet&gt; sheets, Map&lt;string,&gt; styles) throws NullPointerException, IOException{&lt;/string,&gt;&lt;/string,xssfsheet&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;logg.info("Start init() for "+xlsxfilename);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;this.xlsxFileName = xlsxfilename;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;xwb = new XSSFWorkbook();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if ((null == sheets) ||(sheets.isEmpty())) throw new NullPointerException("LinkedHashMap&lt;string,xssfsheet&gt; sheets NULL!");&lt;/string,xssfsheet&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Iterator&lt;string&gt; sheetIter = sheets.keySet().iterator();&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;while(sheetIter.hasNext()){&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;String sheetName = (String)sheetIter.next();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;XSSFSheet asheet = xwb.createSheet(sheetName);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;sheets.put(sheetName, asheet);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;logg.info("Adding sheet:"+sheetName);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;// create template xlsx&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;FileOutputStream os = new FileOutputStream("template.xlsx");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    xwb.write(os);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    os.close();&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if (null == styles) styles = getDefaultStyles(xwb);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;// holds mapping between sheetName and sheetref&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;sheetSheetRefRelation = new HashMap&lt;string,string&gt;();&lt;/string,string&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;// populate Sheet Data with sheet reference&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;LinkedHashMap&lt;string,&gt; sheetData = new LinkedHashMap&lt;string,&gt;();&lt;/string,&gt;&lt;/string,&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;sheetIter = sheets.keySet().iterator();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;while(sheetIter.hasNext()){&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;String _sheetName = sheetIter.next();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;String _sheetNameRef = sheets.get(_sheetName).getPackagePart().getPartName().getName();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;// substring to remove leading "/" from /xl/worksheets/sheet1.xml&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;sheetData.put(_sheetNameRef.substring(1), null);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;//substring to remove leading "/" from /xl/worksheets/sheet1.xml&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;sheetSheetRefRelation.put(_sheetName, _sheetNameRef.substring(1));&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;//logg.info("sheetSheetRefRelation:"+_sheetName +":"+_sheetNameRef.substring(1));&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;this.sheets = new LinkedHashMap&lt;string,xssfsheet&gt;();&lt;/string,xssfsheet&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;this.sheets = sheets;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;this.sheetData = new LinkedHashMap&lt;string,&gt;();&lt;/string,&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;this.sheetData = sheetData;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;logg.info("End init(): sheetSheetRefRelation{}:"+sheetSheetRefRelation);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;private String checkExceptions(String inpStr){&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;// if null then return ""&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if (null == inpStr) return "";&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;return inpStr.replace("&amp;amp;", "&amp;amp;");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;/*&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;This method does the actual hardwork of writing data as xml.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;I have used my styles (color and format).you can ignore this or replace what suits you.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;I have added a checkExceptions method which takes care of wrapping xml illegal characters that are not illegal in db.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;For instance: if you have "&amp;amp;" in your data and you remove checkExceptions() below...the xlsx document will be generate&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;....however...the sheet containing this "&amp;amp;" will not be shown up even if the data was present."&amp;amp;" is not acceptable in xml&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;and since we are dealing with xmls here (zipped into xlsx) we need to take care of wrapping it up...I may not have covered all&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;illegal patterns...but that can be added into checkExceptions() as required.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*/&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;private File writeSheet(short headerStartRow, short numOfColumns, LinkedHashMap&lt;string,integer&gt; columnNames, ResultSet data) throws IOException, SQLException{&lt;/string,integer&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;File tmp = File.createTempFile("sheet", ".xml");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Writer fw = new FileWriter(tmp);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;SpreadsheetWriter sw = new SpreadsheetWriter(fw);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;sw.beginSheet();&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;// insert header row&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;sw.insertRow(headerStartRow);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;int styleIndex = -1;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;if (null != styles)&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;styleIndex = styles.get("headerRowStyle").getIndex();&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Iterator&lt;string&gt; lhm_iter = columnNames.keySet().iterator();&lt;/string&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;code&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;for(int columnIndex = 0; columnIndex &lt;&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;String nxtval = (String)lhm_iter.next();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;System.out.println(""+columnIndex+":"+ nxtval);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;sw.createCell(columnIndex,nxtval, styleIndex);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;sw.endRow();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;// insert header row&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;// insert data rows&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;while(data.next()){&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;sw.insertRow(++headerStartRow);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;for(int columnIndex = 0; columnIndex &lt;&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;//String nwStr = (String)data.getString(columnIndex+1);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;//if (null == nwStr) nwStr = "";&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;String nwStr = checkExceptions((String)data.getString(columnIndex+1));&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;//System.out.println("nwStr: "+nwStr);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;if ((headerStartRow %2) == 0){// even # row&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;if (null != styles)&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;styleIndex = styles.get("dataRowEvenStyle").getIndex();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;sw.createCell(columnIndex, nwStr, styleIndex);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;}else{ // odd # row&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;if (null != styles)&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;styleIndex = styles.get("dataRowOddStyle").getIndex();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;sw.createCell(columnIndex, nwStr,styleIndex);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;sw.endRow();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;// end insert data rows&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;sw.endSheet();&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;fw.close();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;return tmp;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;/*&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Fetches&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*/&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;public void importViewData(String viewName, short startSheetRowNumber) throws NullPointerException, SQLException, SheetNotFoundException, IOException{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;logg.info("Start:importViewData(): "+viewName);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;/// This is my standalone class that returns resultset and does the connection maintenance work.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;ExportDBView eview = new ExportDBView(viewName);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;//@throws NullPointer and SQLException&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    ResultSet rs = eview.initExport();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    LinkedHashMap&lt;string,&gt; columnNames = eview.getResultSetMetaData();&lt;/string,&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    short col_sz = (short)columnNames.size();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    logg.info(viewName+": columnsize: "+col_sz);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    //@throws IOException&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    File tmp = writeSheet((short)startSheetRowNumber, col_sz, columnNames, rs);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    // fetch sheetref using viewName&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    String _sheetref = sheetSheetRefRelation.get(viewName);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    if (null == _sheetref) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;eview.cleanup();// cleanup anyway&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;throw new SheetNotFoundException("viewName does not exist as a Sheet in this workbook");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    }&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    // put the sheet data alongside _sheetref&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    logg.info("Adding sheetdata for sheetref:"+_sheetref);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    this.sheetData.put(_sheetref, tmp);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    eview.cleanup();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    logg.info("End:importViewData(): "+viewName);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; private static void copyStream(InputStream in, OutputStream out) throws IOException {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     byte[] chunk = new byte[1024];&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     int count;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     while ((count = in.read(chunk)) &gt;=0 ) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;       out.write(chunk,0,count);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     }&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;/*&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Adapted Yegor's substitute() method to add more than 1 sheets created dynamically into workbook&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*/&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;public void flushDataIntoWorkbook() throws ZipException, IOException{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;logg.info("Start:flushDataIntoWorkbook(): started writing into workbook...");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;OutputStream out = new FileOutputStream(this.xlsxFileName);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;ZipFile zip = new ZipFile(new File("template.xlsx"));&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     ZipOutputStream zos = new ZipOutputStream(out);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     @SuppressWarnings("unchecked")&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     Enumeration&lt;zipentry&gt; en = (Enumeration&lt;zipentry&gt;) zip.entries();&lt;/zipentry&gt;&lt;/zipentry&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     while (en.hasMoreElements()) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;         ZipEntry ze = en.nextElement();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;         Iterator&lt;string&gt; sheetIter = this.sheetData.keySet().iterator();&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;         boolean entryMatches = false;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;         while(sheetIter.hasNext()){&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;        &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; String entry = sheetIter.next();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;        &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; entryMatches = ze.getName().equals(entry);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;        &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; if (entryMatches == true) break;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;         }&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;         if(!entryMatches){&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;             zos.putNextEntry(new ZipEntry(ze.getName()));&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;             InputStream is = zip.getInputStream(ze);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;             copyStream(is, zos);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;             is.close();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;         }&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     // add all sheets&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     Iterator&lt;string&gt; sheetIter = this.sheetData.keySet().iterator();&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     //InputStream is = null;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     while(sheetIter.hasNext()){&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; String key = (String)sheetIter.next();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;    &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; logg.info("Writing sheet: "+key);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;     zos.putNextEntry(new ZipEntry(key));&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;     InputStream is = new FileInputStream(this.sheetData.get(key));&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;     copyStream(is, zos);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;     is.close();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;     zos.closeEntry();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     }&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     zos.close();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;     logg.info("End:flushDataIntoWorkbook(): Finished writing...cleaning up resources");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;/*&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*    Sample test:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*    In my set up I have Oracle 9i setup and 3 views as mentioned below. I extract data from these 3 views and&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*    and write it to excel sheet. Here is a simple stored procedure I use to export any view given the name:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*    ///////////////////////ORACLE STORED PROCEDURE/////////////////////////////////////&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;CREATE OR REPLACE PROCEDURE "MYSCHEMANAME"."EXPORT_VIEW"(in_table IN VARCHAR2,&lt;/div&gt;&lt;div&gt;                                                      p_cursor OUT SYS_REFCURSOR)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;is&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;begin&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;  open p_cursor FOR&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;  'select * from ' || in_table;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;end EXPORT_VIEW;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*    ///////////////////////////////////////////////////////////////////////////////////&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;* Note !!: MYSCHEMANAME is the default schema when you log in. EXPORT_VIEW is my procedure name.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*  ExportView (see imports above) is a standalone class I use to fetch data as resultset. I used ojdbc14.jar&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*  for JDBC support.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;*/&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;public static void main(String []args){&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Excel07WorkbookWriter eww = new Excel07WorkbookWriter();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;LinkedHashMap&lt;string,xssfsheet&gt; sheets = new LinkedHashMap&lt;string,&gt;();&lt;/string,&gt;&lt;/string,xssfsheet&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;sheets.put("REPORT1_VIEW", null);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;sheets.put("REPORT2_VIEW", null);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;sheets.put("REPORT3_VIEW", null);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;try {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;eww.init("myxls.xlsx", sheets, null);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;} catch (NullPointerException e) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;// TODO Auto-generated catch block&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;e.printStackTrace();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;} catch (IOException e) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;// TODO Auto-generated catch block&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;e.printStackTrace();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;try {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;eww.importViewData("REPORT1_VIEW",(short)0);// the view names should match the view names in sheet.put(...) above&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;eww.importViewData("REPORT2_VIEW",(short)0);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;eww.importViewData("REPORT3_VIEW",(short)0);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;} catch (NullPointerException e) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;// TODO Auto-generated catch block&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;e.printStackTrace();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;} catch (SQLException e) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;// TODO Auto-generated catch block&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;e.printStackTrace();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;} catch (SheetNotFoundException e) { // Custom Exception class written. It extends Exception&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;// TODO Auto-generated catch block&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;e.printStackTrace();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;} catch (IOException e) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;// TODO Auto-generated catch block&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;e.printStackTrace();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;try {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;eww.flushDataIntoWorkbook();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;} catch (ZipException e) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;// TODO Auto-generated catch block&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;e.printStackTrace();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;} catch (IOException e) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;// TODO Auto-generated catch block&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;e.printStackTrace();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6515659600705162167-8465111623628942795?l=vikramvkamath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vikramvkamath.blogspot.com/feeds/8465111623628942795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6515659600705162167&amp;postID=8465111623628942795' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6515659600705162167/posts/default/8465111623628942795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6515659600705162167/posts/default/8465111623628942795'/><link rel='alternate' type='text/html' href='http://vikramvkamath.blogspot.com/2010/07/writing-large-excel-files-excel-2007.html' title='Writing large excel files (Excel 2007)'/><author><name>vikram kamath</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_RCY5kTFHIPg/SNsOIE9xD6I/AAAAAAAAA34/azKFZXamIMw/S220/vik.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6515659600705162167.post-8067610373718240911</id><published>2008-11-19T11:30:00.000-08:00</published><updated>2009-01-16T12:36:09.734-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='How to get the best of free'/><category scheme='http://www.blogger.com/atom/ns#' term='excel charts to LaTeX'/><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>Tex.LaTeX..TeX..LaTeX...TeX...LaTeX....TeX....LaTeX.....TeX.....LaTeX</title><content type='html'>Hi ,&lt;br /&gt;I just finished writing my Masters Thesis report...great relief...some free time to watch the season change...Fall, to be specific. I have a lot &lt;layer id="google-toolbar-hilite-14" style="background-color: Chartreuse; color: black;"&gt;of&lt;/layer&gt; experience writing lifeless documents, but believe me, the last one I did was real piece &lt;layer id="google-toolbar-hilite-15" style="background-color: Chartreuse; color: black;"&gt;of&lt;/layer&gt; satisfaction, no grappling with any formatting mismatches. How did this happen??....OK this is the reason why I am putting together my lazy butt to write this Blog. I was not a great open-source enthusiast or anything...yeah but I love the concept &lt;layer id="google-toolbar-hilite-16" style="background-color: Chartreuse; color: black;"&gt;of&lt;/layer&gt; 'free software'...&lt;layer id="google-toolbar-hilite-17" style="background-color: Chartreuse; color: black;"&gt;(of&lt;/layer&gt; course, if It was not written by me ;o)) ....jokes apart..cheers to the community!!.&lt;br /&gt;I have an experience to share...which many &lt;layer id="google-toolbar-hilite-18" style="background-color: Chartreuse; color: black;"&gt;of&lt;/layer&gt; the document gurus would know since birth...but still just wanted to gather minimum details in simple words for someone impatient like me, unaware of LaTeX.... I am talking about &lt;layer id="google-toolbar-hilite-0" style="background-color: Yellow; color: black;"&gt;LaTeX&lt;/layer&gt;....as in Documentation using &lt;layer id="google-toolbar-hilite-1" style="background-color: Yellow; color: black;"&gt;LaTeX&lt;/layer&gt;.  In this blog I will show you how to setup &lt;layer id="google-toolbar-hilite-2" style="background-color: Yellow; color: black;"&gt;LaTeX&lt;/layer&gt;, without spending a cent&lt;american&gt;(पैसा&lt;indian&gt;). Without wasting any more time lets get started.&lt;br /&gt;&lt;br /&gt;Sitting on a MS Windows machine? does not matter...&lt;br /&gt;Installing &lt;layer id="google-toolbar-hilite-3" style="background-color: Yellow; color: black;"&gt;LaTeX&lt;/layer&gt;:&lt;br /&gt;1। First you need to install Miktex on your machine. Dont ask me why!&lt;br /&gt;http://miktex.org/&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tip: it takes some time to download....&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;2. Install a text-editor to edit your documents . I used Crimson Editor which supports formatting for &lt;layer id="google-toolbar-hilite-4" style="background-color: Yellow; color: black;"&gt;LaTeX&lt;/layer&gt; documents. Crimson Editor is a quality text editor, in my opinion, and is free!!!&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Available at: http://www.crimsoneditor.com/&lt;/li&gt;&lt;/ul&gt;3.  Customizing Crimson editor: Crimson provides customizable functions which can be modified as required....simply said, SHORTCUTS&lt;br /&gt;Go To Tools&gt; Preferences&gt;Tools&gt;User Tools&lt;br /&gt;Enter Menu Text, Command, Argument, Initial Directory etc.&lt;br /&gt;&lt;br /&gt;&lt;layer id="google-toolbar-hilite-5" style="background-color: Yellow; color: black;"&gt;LaTeX&lt;/layer&gt; documents need to be compiled! yeah u heard it right but this little effort is justified....why? you will realize soon!&lt;br /&gt;&lt;br /&gt;For example to compile my &lt;layer id="google-toolbar-hilite-6" style="background-color: Yellow; color: black;"&gt;LaTeX&lt;/layer&gt; doc and see the resulting PDF I did the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Compile TeX file: Produces DVI (device independent output) file. --&gt; abc.dvi&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;Menu text: Compile TeX&lt;/li&gt;&lt;li&gt;Command: Path\to\Miktex\bin\directory\&lt;layer id="google-toolbar-hilite-7" style="background-color: Yellow; color: black;"&gt;latex&lt;/layer&gt;.exe&lt;/li&gt;&lt;li&gt;Argument:$(FileName)&lt;/li&gt;&lt;li&gt;Initial dir: $(FileDir)&lt;/li&gt;&lt;/ul&gt;    2.   Configure Yap( Yet another Previewer)   &lt;optional&gt;to preview how ur document looks...&lt;optional&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Menu text: Open File using Yap&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Command: Path\to\Miktex\bin\directory\yap.exe&lt;/li&gt;&lt;li&gt;Argument:$(FileTitle).dvi&lt;/li&gt;&lt;li&gt;Initial dir: $(FileDir) &lt;if in="" same="" c="" u="" knew="" that=""&gt;&lt;/if&gt;&lt;/li&gt;&lt;/ul&gt;     3. Create quality pdf documents:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Menu text: Create PDF&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Command: Path\to\Miktex\bin\directory\dvipdfm.exe&lt;/li&gt;&lt;li&gt;Argument:$(FileTitle).dvi&lt;/li&gt;&lt;li&gt;Initial dir: $(FileDir) &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Apply &gt; OK&lt;br /&gt;&lt;br /&gt;4. Thats it....look up a sample &lt;layer id="google-toolbar-hilite-8" style="background-color: Yellow; color: black;"&gt;latex&lt;/layer&gt; doc in google is all u need to produce flawless documentation. By flawless I mean...auto-equation numbering, &lt;layer id="google-toolbar-hilite-13" style="background-color: Fuchsia; color: black;"&gt;Table&lt;/layer&gt; &lt;layer id="google-toolbar-hilite-19" style="background-color: Chartreuse; color: black;"&gt;of&lt;/layer&gt; &lt;layer id="google-toolbar-hilite-22" style="background-color: Dodgerblue; color: black;"&gt;COntents&lt;/layer&gt;, Sections, Appendix andBibliography taken care of in a fairly intuitive, organized and reusable way.&lt;br /&gt;&lt;br /&gt;5. Oh!! what about diagrams, graphs, charts?? Yes your &lt;layer id="google-toolbar-hilite-9" style="background-color: Yellow; color: black;"&gt;LaTeX&lt;/layer&gt; document requires all the images, diagrams charts be available in encapsulated post script (.eps) format....well...help is available on the next line:&lt;br /&gt;&lt;br /&gt;Check out ImageMagick: http://www.imagemagick.org/script/binary-releases.php&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For example: on a Windows machine&lt;br /&gt;Save Excel charts as .bmp or jpg images using MSPaint. I assume you have downloaded  and installed ImageMagick by now,&lt;br /&gt;just open a command prompt and type:&lt;br /&gt;convert abc.jpg -compress none eps2:abc.eps &lt;to&gt;&lt;br /&gt;&lt;br /&gt;Now include this figure in your document using this simple macro:&lt;br /&gt;\begin{figure}[htbp]&lt;br /&gt;\centering&lt;br /&gt;\includegraphics[width=12cm, height=9cm]{abc.eps}&lt;br /&gt;\caption{Figure Caption goes here}&lt;br /&gt;\label{fig:reference}&lt;br /&gt;\end{figure}&lt;br /&gt;&lt;br /&gt;you are smart enough to customize dimensions, caption and label for figure&lt;br /&gt;&lt;br /&gt;Voila! you have ur eps figure ready to be embedded in your document!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if you chose to write ur thesis using &lt;layer id="google-toolbar-hilite-11" style="background-color: Yellow; color: black;"&gt;LaTeX&lt;/layer&gt;, your school will probably have a template, besides a lot &lt;layer id="google-toolbar-hilite-20" style="background-color: Chartreuse; color: black;"&gt;of&lt;/layer&gt; useful online material available..just like this one[;-)]..&lt;br /&gt;&lt;br /&gt;So, if you have a comment or two ..would like to hear from you!!&lt;br /&gt;&lt;br /&gt;and as all &lt;layer id="google-toolbar-hilite-12" style="background-color: Yellow; color: black;"&gt;LaTeX&lt;/layer&gt; guides end with, "Happy LaTeXing!"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/to&gt;&lt;/optional&gt;&lt;/optional&gt;&lt;/indian&gt;&lt;/american&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6515659600705162167-8067610373718240911?l=vikramvkamath.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vikramvkamath.blogspot.com/feeds/8067610373718240911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6515659600705162167&amp;postID=8067610373718240911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6515659600705162167/posts/default/8067610373718240911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6515659600705162167/posts/default/8067610373718240911'/><link rel='alternate' type='text/html' href='http://vikramvkamath.blogspot.com/2008/11/hi-i-just-finished-writing-my-thesis.html' title='Tex.LaTeX..TeX..LaTeX...TeX...LaTeX....TeX....LaTeX.....TeX.....LaTeX'/><author><name>vikram kamath</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_RCY5kTFHIPg/SNsOIE9xD6I/AAAAAAAAA34/azKFZXamIMw/S220/vik.jpg'/></author><thr:total>0</thr:total></entry></feed>
