2020import java .io .IOException ;
2121import java .io .OutputStream ;
2222import java .math .BigDecimal ;
23+ import java .sql .ResultSetMetaData ;
2324import java .sql .Timestamp ;
2425import java .text .ParseException ;
2526import java .text .SimpleDateFormat ;
27+ import java .util .ArrayList ;
2628import java .util .Date ;
29+ import java .util .List ;
30+ import java .util .Optional ;
2731
32+ import it .eng .spagobi .tools .dataset .common .metadata .IFieldMetaData ;
2833import org .apache .log4j .LogMF ;
2934import org .apache .log4j .Logger ;
3035import org .apache .poi .ss .SpreadsheetVersion ;
@@ -76,52 +81,29 @@ protected void export(JobExecutionContext context) throws JobExecutionException
7681
7782 // STYLE CELL
7883 CellStyle borderStyleHeader = wb .createCellStyle ();
79- // borderStyleHeader.setBorderBottom(BorderStyle.THIN);
80- // borderStyleHeader.setBorderLeft(BorderStyle.THIN);
81- // borderStyleHeader.setBorderRight(BorderStyle.THIN);
82- // borderStyleHeader.setBorderTop(BorderStyle.THIN);
8384 borderStyleHeader .setAlignment (HorizontalAlignment .CENTER );
8485
8586 CellStyle borderStyleRow = wb .createCellStyle ();
86- // borderStyleRow.setBorderBottom(BorderStyle.THIN);
87- // borderStyleRow.setBorderLeft(BorderStyle.THIN);
88- // borderStyleRow.setBorderRight(BorderStyle.THIN);
89- // borderStyleRow.setBorderTop(BorderStyle.THIN);
9087 borderStyleRow .setAlignment (HorizontalAlignment .RIGHT );
9188
9289 CellStyle tsCellStyle = wb .createCellStyle ();
9390 tsCellStyle .setDataFormat (createHelper .createDataFormat ().getFormat (TIMESTAMP_FORMAT ));
94- // tsCellStyle.setBorderBottom(BorderStyle.THIN);
95- // tsCellStyle.setBorderLeft(BorderStyle.THIN);
96- // tsCellStyle.setBorderRight(BorderStyle.THIN);
97- // tsCellStyle.setBorderTop(BorderStyle.THIN);
9891 tsCellStyle .setAlignment (HorizontalAlignment .RIGHT );
9992
10093 CellStyle dateCellStyle = wb .createCellStyle ();
10194 dateCellStyle .setDataFormat (createHelper .createDataFormat ().getFormat (DATE_FORMAT ));
102- // dateCellStyle.setBorderBottom(BorderStyle.THIN);
103- // dateCellStyle.setBorderLeft(BorderStyle.THIN);
104- // dateCellStyle.setBorderRight(BorderStyle.THIN);
105- // dateCellStyle.setBorderTop(BorderStyle.THIN);
10695 dateCellStyle .setAlignment (HorizontalAlignment .RIGHT );
10796
10897 CellStyle intCellStyle = wb .createCellStyle ();
10998 intCellStyle .setDataFormat (createHelper .createDataFormat ().getFormat ("0" ));
110- // intCellStyle.setBorderBottom(BorderStyle.THIN);
111- // intCellStyle.setBorderLeft(BorderStyle.THIN);
112- // intCellStyle.setBorderRight(BorderStyle.THIN);
113- // intCellStyle.setBorderTop(BorderStyle.THIN);
11499 intCellStyle .setAlignment (HorizontalAlignment .RIGHT );
115100
116101 CellStyle decimalCellStyle = wb .createCellStyle ();
117102 decimalCellStyle .setDataFormat (createHelper .createDataFormat ().getFormat ("#,##0.00" ));
118- // decimalCellStyle.setBorderBottom(BorderStyle.THIN);
119- // decimalCellStyle.setBorderLeft(BorderStyle.THIN);
120- // decimalCellStyle.setBorderRight(BorderStyle.THIN);
121- // decimalCellStyle.setBorderTop(BorderStyle.THIN);
122103 decimalCellStyle .setAlignment (HorizontalAlignment .RIGHT );
123104
124105 IMetaData dataSetMetadata = dataSet .getMetadata ();
106+ DataIterator iterator = dataSet .iterator ();
125107
126108 // CREATE BRANDED HEADER SHEET
127109 this .imageB64 = OrganizationImageManager .getOrganizationB64ImageWide (TenantManager .getTenant ().getName ());
@@ -149,12 +131,21 @@ protected void export(JobExecutionContext context) throws JobExecutionException
149131 dataspan ,
150132 this .documentName ,
151133 sheet .getSheetName ());
152-
134+ ResultSetMetaData resultSetMetaData = ((it .eng .spagobi .tools .dataset .common .iterator .ResultSetIterator ) iterator ).getRs ().getMetaData ();
135+
136+ List <IFieldMetaData > filteredMetadata = new ArrayList <>();
137+
138+ for (int i = 0 ; i < resultSetMetaData .getColumnCount (); i ++) {
139+ String columnName = resultSetMetaData .getColumnName (i + 1 );
140+ Optional <IFieldMetaData > fieldMetaData = dataSetMetadata .getFieldsMeta ().stream ().filter (f -> f .getName ().equals (columnName )).findFirst ();
141+ fieldMetaData .ifPresent (filteredMetadata ::add );
142+ }
143+
153144 header = sheet .createRow ((short ) headerIndex +1 ); // first row
154- if (dataSetMetadata != null && dataSetMetadata . getFieldCount () > 0 ) {
155- for (int i = 0 ; i <= dataSetMetadata . getFieldCount () - 1 ; i ++) {
145+ if (! filteredMetadata . isEmpty () ) {
146+ for (int i = 0 ; i <= filteredMetadata . size () - 1 ; i ++) {
156147 Cell cell = header .createCell (i );
157- cell .setCellValue (dataSetMetadata . getFieldAlias ( i ));
148+ cell .setCellValue (filteredMetadata . get ( i ). getAlias ( ));
158149 cell .setCellStyle (borderStyleHeader );
159150 // set cell style
160151 CellStyle headerCellStyle = buildCellStyle (sheet , true , HorizontalAlignment .LEFT , VerticalAlignment .CENTER , (short ) 11 );
@@ -166,8 +157,7 @@ protected void export(JobExecutionContext context) throws JobExecutionException
166157 adjustColumnWidth (sheet , this .imageB64 );
167158
168159 // FILL CELL RECORD
169- try (DataIterator iterator = dataSet .iterator ()) {
170-
160+ try {
171161 int i = headerIndex +1 ;
172162 final int recordLimit = SpreadsheetVersion .EXCEL2007 .getLastRowIndex ();
173163 while (iterator .hasNext () && i < recordLimit ) {
@@ -178,7 +168,7 @@ protected void export(JobExecutionContext context) throws JobExecutionException
178168 Row row = sheet .createRow (i + 1 ); // starting from 2nd row
179169
180170 for (int k = 0 ; k <= dataSetRecord .getFields ().size () - 1 ; k ++) {
181- Class <?> clazz = dataSetMetadata . getFieldType ( k );
171+ Class <?> clazz = filteredMetadata . get ( k ). getType ( );
182172 Object value = dataSetRecord .getFieldAt (k ).getValue ();
183173 Cell cell = row .createCell (k );
184174
@@ -231,8 +221,12 @@ protected void export(JobExecutionContext context) throws JobExecutionException
231221
232222 i ++;
233223 }
224+ } catch (RuntimeException rte ) {
225+ String msg = "Error generating Excel file" ;
226+ LOGGER .error (msg , rte );
227+ throw new IllegalStateException (msg , rte );
234228 }
235-
229+
236230 // adjusts the column width to fit the contents
237231 adjustColumnWidth (sheet , this .imageB64 );
238232
0 commit comments