template Unit pixel 10 20 30 40 50 60 70 80 90 100 120 160 200 300 600 1000 Export XLS unit pixels 12 24 35 47 59 71 82 94 106 118 141 188 235 353 705 1176 My solution is ByteArrayOutputStream byteOutstream = new ByteArrayOutputStream(); JRXlsExporter exporter = new JRXlsExporter(); exporter.setParameter(JExcelApiExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE); exporter.setParameter(JExcelApiExporterParameter.FORMAT_PATTERNS_MAP, xlsFormats ); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, byteOutstream ); exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); exporter.exportReport(); byte retArr[]=byteOutstream .toByteArray(); byteOutstream .close(); ByteArrayInputStream inStream=new ByteArrayInputStream(retArr); HSSFWorkbook book = new HSSFWorkbook(inStream); HSSFSheet sheet=book.getSheetAt(0); for(int i=0;i<=TemplateAnalysisUtil.getSheetEndColumnIndex(sheet);i++){ int old=sheet.getColumnWidth(i); int real=(int)(old/1.175); sheet.setColumnWidth(i, real); } Code:public class TemplateAnalysisUtil { /** * get EndColumnIndexofSheet */ public static int getSheetEndColumnIndex(HSSFSheet sheet) { int index = 0; for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) { HSSFRow row = sheet.getRow(i); if (row != null) { if (row.getLastCellNum() - 1 > index) index = row.getLastCellNum() - 1; } } return index; }} Post Edited by yatasoft at 08/29/2011 11:27