From a37b07559a7948a168a6269bd0fe9362f1b24a6d Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Tue, 30 Jul 2019 18:45:28 +0200 Subject: [PATCH 01/16] Several enhancements to the Word Emitter (see bugs Bug 431616 and 433725): * Support for word "fields" (formulas) * avoid superfluos nested table All of this is controlled by the following user properties: PROP_NAME_LAYOUTMODE = "WordEmitter.LayoutMode" PROP_NAME_FIELDFUNCTION = "WordEmitter.FieldFunction" PROP_NAME_NESTED_TABLE = "WordEmitter.NestedTable" By adding WordEmitter.LayoutMode = "NONE" to a list, the emitter avoids creating word tables for the list. By adding WordEmitter.FieldFunction = "any non-empty string" to a label, the emitter uses the label's content as a field function. WordEmitter.NestedTable is a boolean property and usually works automatic: It avoids a nested 1x1 table for a "foreign" element (dynamic text) if this element is in a cell of a table or grid. Note that the border properties of the element are ignored then. By setting the value to true, it forces the old behaviour. Furthermore, the DOC emitter now supports "show header on first". --- .../engine/emitter/docx/writer/Document.java | 8 +- .../emitter/docx/writer/DocxWriter.java | 22 ++- .../emitter/wpml/AbstractEmitterImpl.java | 170 +++++++++++++----- .../engine/emitter/wpml/DocEmitterImpl.java | 32 ++++ .../engine/emitter/wpml/IWordWriter.java | 7 +- .../report/engine/emitter/wpml/WordUtil.java | 3 +- .../wpml/writer/AbstractWordXmlWriter.java | 87 ++++++++- .../engine/emitter/wpml/writer/DocWriter.java | 20 ++- 8 files changed, 286 insertions(+), 63 deletions(-) diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java index 64200f89cdb..436a6c71415 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java @@ -41,7 +41,7 @@ public class Document extends BasicComponent private int headerId = 1; private int footerId = 1; - + private int mhtId = 1; Document( IPart part, String backgroundColor, String backgroundImageUrl, @@ -346,4 +346,10 @@ void writePageBorders( IStyle style, int topMargin, int bottomMargin, rightMargin ); writer.closeTag( "w:pgBorders" ); } + + void writeEmptyElement( String tag ) + { + writer.openTag( tag ); + writer.closeTag( tag ); + } } diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java index 1f8505d756d..820f259dd8b 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java @@ -159,9 +159,10 @@ public void endHeader( ) currentComponent = document; } - public void startFooter( int footerHeight, int footerWidth ) + public void startFooter( String type, int footerHeight, int footerWidth ) throws IOException { + // FIXME argument type is unused - in the WPML emitter it is used to control visibility on the first page. currentComponent = document.createFooter( footerHeight, footerWidth ); currentComponent.start( ); } @@ -194,7 +195,7 @@ public void startTable( IStyle style, int tableWidth ) { currentComponent.startTable( style, tableWidth, false ); } - + public void startTable( IStyle style, int tableWidth, boolean inForeign ) { currentComponent.startTable( style, tableWidth, inForeign ); @@ -211,15 +212,15 @@ public void writeColumn( int[] cols ) } public void startTableRow( double height, boolean isHeader, - boolean repeatHeader, boolean fixedLayout ) + boolean repeatHeader, boolean fixedLayout, boolean cantSplit ) { currentComponent.startTableRow( height, isHeader, repeatHeader, - fixedLayout ); + fixedLayout, cantSplit ); } public void startTableRow( double height ) { - currentComponent.startTableRow( height, false, false, false ); + currentComponent.startTableRow( height, false, false, false, false ); } public void endTableRow( ) @@ -236,7 +237,7 @@ public void endTableCell( boolean needEmptyP ) { currentComponent.endTableCell( needEmptyP ); } - + public void endTableCell( boolean needEmptyp, boolean inForeign ) { currentComponent.endTableCell( needEmptyp, inForeign ); @@ -280,7 +281,7 @@ public void writeTOC( String toc, int tocLevel ) { currentComponent.writeTOC( toc, tocLevel ); } - + public void writeTOC( String toc, String color, int tocLevel, boolean middleInline ) { @@ -291,7 +292,7 @@ public void insertHiddenParagraph( ) { currentComponent.insertHiddenParagraph( ); } - + public void insertEmptyParagraph( ) { currentComponent.insertEmptyParagraph( ); @@ -347,4 +348,9 @@ public void drawDocumentBackgroundImage( String backgroundImageUrl, topMargin, leftMargin, pageHeight, pageWidth ); } + + public void writeEmptyElement(String tag) + { + document.writeEmptyElement(tag); + } } diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java index b844e1e1d76..5db2a219f4d 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java @@ -18,6 +18,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Set; import java.util.Stack; import java.util.logging.Level; @@ -90,6 +91,7 @@ public abstract class AbstractEmitterImpl { public final static int NORMAL = -1; + public final static int CUSTOM_FIELD = -2; public static enum InlineFlag { FIRST_INLINE, MIDDLE_INLINE, BLOCK @@ -101,6 +103,11 @@ public static enum TextFlag { private static Set nonInherityStyles = new HashSet( ); + private static final String LAYOUTMODE_NONE = "NONE"; //$NON-NLS-1$ + private static final String PROP_NAME_LAYOUTMODE = "WordEmitter.LayoutMode"; //$NON-NLS-1$ + private static final String PROP_NAME_FIELDFUNCTION = "WordEmitter.FieldFunction"; //$NON-NLS-1$ + protected static final String PROP_NAME_NESTED_TABLE = "WordEmitter.NestedTable"; //$NON-NLS-1$ + static { nonInherityStyles.add( IStyle.STYLE_BORDER_BOTTOM_COLOR ); @@ -145,6 +152,8 @@ public static enum TextFlag { protected Stack styles = new Stack( ); + protected Stack listLayouts = new Stack( ); + private int pageWidth = 0; private int pageHeight = 0; @@ -388,6 +397,36 @@ public void computePageProperties( IPageContent page ) orientation = page.getOrientation( ); } + /** + * @param elem a report element, e.g. a IListContent + * @param propName a property name. + * @return + */ + protected Object getUserProperty(IContent elem, String propName) { + Object val = null; + Map userprops = elem.getUserProperties(); + if (userprops != null) { + val = (String)userprops.get(propName); + } +// if (val == null) { +// // Necessary for BIRT 4.2.1: +// // This version does not promote automatically the user-properties +// // from the design Element to the runtime element (4.3 does!). +// ReportItemDesign designElem = (ReportItemDesign )elem.getGenerateBy(); +// if (designElem != null) { +// Map designUserprops = designElem.getUserProperties(); +// if (designUserprops != null) { +// Expression expression = designUserprops.get(propName); +// if( expression instanceof Expression.Constant ) { +// Expression.Constant constant = (Expression.Constant)expression; +// val = constant.getValue(); +// } +// } +// } +// } + return val; + } + public void startAutoText( IAutoTextContent autoText ) { writeContent( autoText.getType( ), autoText.getText( ), autoText ); @@ -403,7 +442,12 @@ public void startLabel( ILabelContent label ) String txt = label.getText( ) == null ? label.getLabelText( ) : label .getText( ); txt = txt == null ? "" : txt; - writeContent( AbstractEmitterImpl.NORMAL, txt, label ); + int type = AbstractEmitterImpl.NORMAL; + String fieldFunction = (String) getUserProperty(label, PROP_NAME_FIELDFUNCTION); + if (fieldFunction != null && !(fieldFunction.isEmpty())){ + type = AbstractEmitterImpl.CUSTOM_FIELD; + } + writeContent( type, txt, label ); } public void startText( ITextContent text ) @@ -414,35 +458,49 @@ public void startText( ITextContent text ) public void startList( IListContent list ) { adjustInline( ); - + String layoutMode = (String) getUserProperty(list, PROP_NAME_LAYOUTMODE); + listLayouts.push(layoutMode); styles.push( list.getComputedStyle( ) ); - writeBookmark( list ); - Object listToc = list.getTOC( ); - if ( listToc != null && !hasTocOutputed( list ) ) - { - tableTocs.add( new TocInfo( listToc.toString( ), tocLevel ) ); - } - increaseTOCLevel( list ); + if (LAYOUTMODE_NONE.equals(layoutMode)) { + ; + } else { + writeBookmark( list ); + Object listToc = list.getTOC( ); + if ( listToc != null && !hasTocOutputed( list ) ) + { + tableTocs.add( new TocInfo( listToc.toString( ), tocLevel ) ); + } + increaseTOCLevel( list ); + + if ( context.isAfterTable( ) ) + { + wordWriter.insertHiddenParagraph( ); + context.setIsAfterTable( false ); + } - if ( context.isAfterTable( ) ) - { - wordWriter.insertHiddenParagraph( ); - context.setIsAfterTable( false ); + int width = WordUtil.convertTo( list.getWidth( ), context + .getCurrentWidth( ), reportDpi ); + width = Math.min( width, context.getCurrentWidth( ) ); + if (LAYOUTMODE_NONE.equals(layoutMode)) { + ; + } else { + wordWriter.startTable( list.getComputedStyle( ), width ); + } } + } - int width = WordUtil.convertTo( list.getWidth( ), context - .getCurrentWidth( ), reportDpi ); - width = Math.min( width, context.getCurrentWidth( ) ); - wordWriter.startTable( list.getComputedStyle( ), width ); + public void startListBand( IListBandContent listBand ) + { + if (!listLayouts.empty() && LAYOUTMODE_NONE.equals(listLayouts.peek())) { + ; + } else { context.startCell( ); wordWriter.startTableRow( -1 ); - IStyle style = computeStyle( list.getComputedStyle( ) ); + + IStyle style = computeStyle( listBand.getComputedStyle( ) ); wordWriter.startTableCell( context.getCurrentWidth( ), style, null ); writeTableToc( ); } - - public void startListBand( IListBandContent listBand ) - { } public void startListGroup( IListGroupContent group ) @@ -457,7 +515,8 @@ public void startRow( IRowContent row ) writeBookmark( row ); rowFilledFlag = false; boolean isHeader = false; - styles.push( row.getComputedStyle( ) ); + IStyle style = row.getComputedStyle( ); + styles.push( style ); if ( row.getBand( ) != null && row.getBand( ).getBandType( ) == IBandContent.BAND_HEADER ) { @@ -466,8 +525,13 @@ public void startRow( IRowContent row ) double height = WordUtil.convertTo( row.getHeight( ), reportDpi ); + boolean cantSplit = false; + if ("avoid".equals(computeStyle(style).getPageBreakInside())) { // $NON-NLS-1$ + cantSplit = true; + } + wordWriter.startTableRow( height, isHeader, row.getTable( ) - .isHeaderRepeat( ), fixedLayout ); + .isHeaderRepeat( ), fixedLayout, cantSplit ); context.newRow( ); } } @@ -501,7 +565,6 @@ public void startCell( ICellContent cell ) int cellWidth = context.getCellWidth( columnId, columnSpan ); IStyle style = computeStyle( cell.getComputedStyle( ) ); -// style.get if ( rowSpan > 1 ) { @@ -524,11 +587,6 @@ public void startCell( ICellContent cell ) } } - private boolean hasBorder( String borderStyle ) - { - return !( borderStyle == null || "none".equalsIgnoreCase( borderStyle ) ); - } - private void drawDiagonalLine( ICellContent cell, double cellWidth ) { if ( cellWidth == 0 ) @@ -676,23 +734,36 @@ public void endGroup( IGroupContent group ) public void endList( IListContent list ) { - adjustInline( ); - wordWriter.endTableCell( context.needEmptyP( ) ); - context.endCell( ); - wordWriter.endTableRow( ); + String layoutMode = null; + if ( !listLayouts.isEmpty( ) ) + { + layoutMode = listLayouts.pop( ); + } if ( !styles.isEmpty( ) ) { styles.pop( ); } context.addContainer( true ); - wordWriter.endTable( ); - context.setIsAfterTable( true ); - decreaseTOCLevel( list ); + if (LAYOUTMODE_NONE.equals(layoutMode)) { + ; + } else { + wordWriter.endTable( ); + context.setIsAfterTable( true ); + decreaseTOCLevel( list ); + } } public void endListBand( IListBandContent listBand ) { + adjustInline( ); + if (!listLayouts.empty() && LAYOUTMODE_NONE.equals(listLayouts.peek())) { + ; + } else { + wordWriter.endTableCell( context.needEmptyP() ); + context.endCell( ); + wordWriter.endTableRow( ); + } } public void endListGroup( IListGroupContent group ) @@ -1255,11 +1326,13 @@ private void writeHeaderFooter( ) throws IOException, BirtException SimpleMasterPageDesign master = (SimpleMasterPageDesign) previousPage .getGenerateBy( ); + boolean showHeaderOnFirst = true; + if ( previousPage.getPageHeader( ) != null || backgroundHeight != null || backgroundWidth != null ) { - wordWriter.startHeader( !master.isShowHeaderOnFirst( ) && previousPage.getPageNumber( ) == 1, - headerHeight, contentWidth ); + showHeaderOnFirst = master.isShowHeaderOnFirst( ) || previousPage.getPageNumber( ) > 1; + wordWriter.startHeader( showHeaderOnFirst, headerHeight, contentWidth ); if ( backgroundHeight != null || backgroundWidth != null ) { @@ -1279,6 +1352,8 @@ private void writeHeaderFooter( ) throws IOException, BirtException } if ( previousPage.getPageFooter( ) != null ) { + // HVB: I don't think that MS word does support this. + // At least not with RunAndRenderTask if ( !master.isShowFooterOnLast( ) && previousPage.getPageNumber( ) == reportContent .getTotalPage( ) ) @@ -1287,18 +1362,33 @@ private void writeHeaderFooter( ) throws IOException, BirtException ILabelContent emptyContent = footer.getReportContent( ) .createLabelContent( ); emptyContent.setText( this.EMPTY_FOOTER ); - wordWriter.startFooter( footerHeight, contentWidth ); + wordWriter.startFooter( "odd", footerHeight, contentWidth ); contentVisitor.visit( emptyContent, null ); wordWriter.endFooter( ); } else { - wordWriter.startFooter( footerHeight, contentWidth ); + if (!showHeaderOnFirst) { + wordWriter.startFooter("first", footerHeight, contentWidth); + contentVisitor.visitChildren( previousPage.getPageFooter( ), + null ); + wordWriter.endFooter( ); + } + wordWriter.startFooter( "odd", footerHeight, contentWidth ); contentVisitor.visitChildren( previousPage.getPageFooter( ), null ); wordWriter.endFooter( ); } } + + if ( previousPage.getPageHeader( ) != null || backgroundHeight != null + || backgroundWidth != null ) + { + if (!showHeaderOnFirst) { + wordWriter.writeEmptyElement("w:titlePg"); + } + } + } /** diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/DocEmitterImpl.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/DocEmitterImpl.java index cc9ef1dfce2..b1b1e9df6a4 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/DocEmitterImpl.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/DocEmitterImpl.java @@ -20,6 +20,7 @@ import org.eclipse.birt.report.engine.content.IForeignContent; import org.eclipse.birt.report.engine.content.IStyle; import org.eclipse.birt.report.engine.content.ITableContent; +import org.eclipse.birt.report.engine.content.impl.CellContent; import org.eclipse.birt.report.engine.css.dom.CompositeStyle; import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; @@ -148,6 +149,9 @@ public void startForeign( IForeignContent foreign ) throws BirtException { if ( IForeignContent.HTML_TYPE.equalsIgnoreCase( foreign.getRawType( ) ) ) { + + Boolean userDecision = (Boolean)getUserProperty(foreign, PROP_NAME_NESTED_TABLE); + inForeign = true; // store the inline state before the HTML foreign. boolean inlineBrother = !context.isFirstInline( ); @@ -169,6 +173,25 @@ public void startForeign( IForeignContent foreign ) throws BirtException HTML2Content.html2Content( foreign ); + // Should we create a 1x1-sized nested table for the content? + + // Note that *without* the nested table, the HTML text item's + // border, padding and margin properties will be ignored. + // However, the resulting file is smaller and it is a lot easier + // to actually edit it later. + + boolean createNestedTable = true; // this is how BIRT 4.3.2 works + + // Allow the client to decide explicitly what's to do here, using a UserProperty + if (userDecision != null) { + createNestedTable = userDecision; + } else { + // Detect what's usually best automatically: + // Create a nested table unless the Foreign is directly located in a Cell. + createNestedTable = ! (foreign.getParent() instanceof CellContent); + } + + if (createNestedTable) { context.startCell( ); if ( context.isAfterTable( ) ) @@ -197,6 +220,15 @@ public void startForeign( IForeignContent foreign ) throws BirtException context.setIsAfterTable( true ); context.addContainer( true ); hasPInside = false; + } else { + writeBookmark(foreign); + writeToc( foreign ); + // Note that margin, padding, border, background of the dynamic text item + // will be ignored. + contentVisitor.visitChildren( foreign, null ); + adjustInline( ); + hasPInside = true; + } // restore the inline state after the HTML foreign. if ( inlineBrother ) { diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/IWordWriter.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/IWordWriter.java index 173f91fc6bd..22fc7ec691a 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/IWordWriter.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/IWordWriter.java @@ -60,7 +60,7 @@ void writePageBorders( IStyle style, int topMargin, int bottomMargin, void writeColumn( int[] cols ); void startTableRow( double height, boolean isHeader, boolean repeatHeader, - boolean fixedLayout ); + boolean fixedLayout, boolean cantSplit ); void startTableRow( double height ); @@ -101,7 +101,7 @@ void startHeader( boolean showHeaderOnFirst, int headerHeight, void endHeader( ); - void startFooter( int footerHeight, int footerWidth ) throws IOException; + void startFooter( String type, int footerHeight, int footerWidth ) throws IOException; void endFooter( ); @@ -115,4 +115,7 @@ void writeContent( int type, String txt, IStyle style, IStyle inlineStyle, void startPage( ); void endPage( ); + + void writeEmptyElement(String tag); + } diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/WordUtil.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/WordUtil.java index 756a37d9815..522bdedf0df 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/WordUtil.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/WordUtil.java @@ -326,7 +326,8 @@ private static String getPercentValue( String height, double pageHeight ) public static boolean isField( int autoTextType ) { return autoTextType == IAutoTextContent.PAGE_NUMBER - || autoTextType == IAutoTextContent.TOTAL_PAGE; + || autoTextType == IAutoTextContent.TOTAL_PAGE + || autoTextType == AbstractEmitterImpl.CUSTOM_FIELD; } public static boolean isField( IContent content ) diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/AbstractWordXmlWriter.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/AbstractWordXmlWriter.java index 1eb720c8f68..e21d29c0255 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/AbstractWordXmlWriter.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/AbstractWordXmlWriter.java @@ -20,6 +20,7 @@ import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; import org.eclipse.birt.report.engine.emitter.XMLWriter; +import org.eclipse.birt.report.engine.emitter.wpml.AbstractEmitterImpl; import org.eclipse.birt.report.engine.emitter.wpml.AbstractEmitterImpl.TextFlag; import org.eclipse.birt.report.engine.emitter.wpml.DiagonalLineInfo; import org.eclipse.birt.report.engine.emitter.wpml.DiagonalLineInfo.Line; @@ -599,6 +600,14 @@ else if ( type == IAutoTextContent.TOTAL_PAGE ) writer.closeTag( "w:instrText" ); } + protected void writeSimpleField( String fieldFunction){ + if (fieldFunction != null){ + writer.openTag( "w:instrText" ); + writer.text( fieldFunction ); + writer.closeTag( "w:instrText" ); + } + } + private void writeString( String txt, IStyle style ) { if ( txt == null ) @@ -746,6 +755,16 @@ protected void writeField( boolean isStart, IStyle style, String fontName ) writer.closeTag( "w:r" ); } + protected void writeFieldSeparator( IStyle style, String fontName ) + { + writer.openTag( "w:r" ); + writeFieldRunProperties( style, fontName ); + writer.openTag( "w:fldChar" ); + writer.attribute( "w:fldCharType", "separate" ); + writer.closeTag( "w:fldChar" ); + writer.closeTag( "w:r" ); + } + public void writeColumn( int[] cols ) { // unit: twips @@ -769,7 +788,7 @@ public void writeColumn( int[] cols ) */ public void startTableRow( double height, boolean isHeader, - boolean repeatHeader, boolean fixedLayout ) + boolean repeatHeader, boolean fixedLayout, boolean cantSplit ) { writer.openTag( "w:tr" ); @@ -793,6 +812,11 @@ public void startTableRow( double height, boolean isHeader, String headerOnOff = repeatHeader ? "on" : "off"; writeAttrTag( "w:tblHeader", headerOnOff ); } + + if (cantSplit) { + writer.openTag("w:cantSplit"); + writer.closeTag("w:cantSplit"); + } writer.closeTag( "w:trPr" ); } @@ -862,7 +886,13 @@ public void writeSpanCell( SpanInfo info ) public void endTableCell( boolean empty ) { - endTableCell( empty, false ); + // The resulting doc looks more sane than with the original code + // endTableCell( empty, false ); + // because an empty table cell now contains the "cell marker" (a bit like a small o). + // and enables the user to tab into the cell and enter text directly; + // whereas with the old code, the cell was completely empty and the text caret + // could only be placed into the cell using a mouse double-click. + endTableCell( empty, true ); } public void endTableCell( boolean empty, boolean inForeign ) @@ -1154,7 +1184,31 @@ public void writeTextInRun( int type, String txt, IStyle style, if ( isField ) { - writeAutoText( type ); + if (!(type == AbstractEmitterImpl.CUSTOM_FIELD)) + writeAutoText( type ); + else{ + writeSimpleField( txt ); + writer.closeTag( "w:r" ); + writeFieldSeparator(style, fontFamily); + writer.openTag( "w:r" ); + writer.openTag( "w:rPr" ); + writeRunProperties( style, fontFamily, info ); + if ( isInline ) + { + writeAlign( style.getTextAlign( ), direction ); + writeBackgroundColor( style.getBackgroundColor( ) ); + writePosition( style.getVerticalAlign( ), style + .getProperty( StyleConstants.STYLE_FONT_SIZE ) ); + writeRunBorders( style ); + } + if ( !isField && runIsRtl ) + { + writer.openTag( "w:rtl" ); + writer.closeTag( "w:rtl" ); + } + writer.closeTag( "w:rPr" ); + writeString( txt, style ); + } } else { @@ -1287,7 +1341,32 @@ public void writeTextInRun( int type, String txt, IStyle style, if ( isField ) { - writeAutoText( type ); + if (!(type == AbstractEmitterImpl.CUSTOM_FIELD)) + writeAutoText( type ); + else{ + writeSimpleField( txt ); + writer.closeTag( "w:r" ); + writeFieldSeparator(style, fontFamily); + writer.openTag( "w:r" ); + writer.openTag( "w:rPr" ); + writeRunProperties( style, fontFamily, info ); + if ( isInline ) + { + writeAlign( textAlign, direction ); + writeBackgroundColor( style.getBackgroundColor( ) ); + writePosition( style.getVerticalAlign( ), style + .getProperty( StyleConstants.STYLE_FONT_SIZE ) ); + writeRunBorders( style ); + } + if ( !isField && runIsRtl ) + { + writer.openTag( "w:rtl" ); + writer.closeTag( "w:rtl" ); + } + writer.closeTag( "w:rPr" ); + writeString( txt, style ); + } + } else { diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/DocWriter.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/DocWriter.java index 063d0add0d4..4743fd1dac1 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/DocWriter.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/DocWriter.java @@ -495,7 +495,7 @@ private void drawDocumentBackgroundColor( String data ) public void startTableRow( double height ) { - startTableRow( height, false, false, false ); + startTableRow( height, false, false, false, false ); } public void startPage( ) @@ -518,17 +518,18 @@ public void end( ) public void startHeader( boolean showHeaderOnFirst, int headerHeight, int headerWidth ) { - writer.openTag( "w:hdr" ); - if ( showHeaderOnFirst ) + if ( !showHeaderOnFirst ) { + writer.openTag( "w:hdr" ); writer.attribute( "w:type", "first" ); writer.openTag( "w:p" ); writer.openTag( "w:r" ); writer.closeTag( "w:r" ); writer.closeTag( "w:p" ); + writer.closeTag("w:hdr"); } - else - writer.attribute( "w:type", "odd" ); + writer.openTag( "w:hdr" ); + writer.attribute( "w:type", "odd" ); startHeaderFooterContainer( headerHeight, headerWidth ); } @@ -538,10 +539,10 @@ public void endHeader( ) writer.closeTag( "w:hdr" ); } - public void startFooter( int footerHeight, int footerWidth ) + public void startFooter( String type, int footerHeight, int footerWidth ) { writer.openTag( "w:ftr" ); - writer.attribute( "w:type", "odd" ); + writer.attribute( "w:type", type ); startHeaderFooterContainer( footerHeight, footerWidth ); } @@ -667,4 +668,9 @@ protected void writeIndent( int leftMargin, int rightMargin, int textIndent ) } writer.closeTag( "w:ind" ); } + + public void writeEmptyElement(String tag) { + writer.openTag(tag); + writer.closeTag(tag); + } } From cc8302352ca3e6d8ac09ee87866d58b3f5692fac Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Tue, 1 Oct 2019 11:04:25 +0200 Subject: [PATCH 02/16] Support kind of a "vertical tab" for the PDF emitter. This means you can force a layout element to start at a given y position on the page. This is done by supplying a UserProperty. See the code for details. --- .../nLayout/area/impl/BlockContainerArea.java | 28 +++++++++++ .../nLayout/area/impl/ContainerArea.java | 46 +++++++++++++++++++ .../engine/nLayout/area/impl/RowArea.java | 27 +++++++++++ 3 files changed, 101 insertions(+) diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/BlockContainerArea.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/BlockContainerArea.java index 839c0904ea2..d206aa7fd10 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/BlockContainerArea.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/BlockContainerArea.java @@ -16,6 +16,7 @@ import java.util.LinkedList; import java.util.List; import java.util.ListIterator; +import java.util.logging.Logger; import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.report.engine.content.IContent; @@ -57,6 +58,33 @@ public BlockContainerArea( ) public void add( AbstractArea area ) { + if (area instanceof ContainerArea) { + ContainerArea c = (ContainerArea)area; + if (c.getContent() != null && c.getContent().getUserProperties() != null) { + // Variant 1 (not suitable for MS Word). The property has to be set for a + // Label, a Dynamic Text Item or similar (not for a table row or cell). + // A possible structure: + // Table + // Header + // Details + // Footer Row with Dynamic Text Item with FixYPosition=20cm. + // Footer Row with data which should be displayed starting at y=20cm. + String fixYPosition = (String)c.getContent().getUserProperties().get("FixYPosition"); + if (fixYPosition != null) { + Logger log = Logger.getLogger(getClass().getName()); + log.info("FixYPosition(a)=" + fixYPosition); + int grenze = getDimensionValue(fixYPosition); + int absBP = getAbsoluteBP(); + log.info("Detected UserProperty FixYPosition=" + grenze + ", currentBP=" + currentBP + ", absBP=" + absBP); + if (absBP > grenze) { + log.fine("Page break required"); + } else if (absBP < grenze) { + log.info("Increment currentBP"); + currentBP += (grenze - absBP); + } + } + } + } children.add( area ); area.setAllocatedPosition( currentIP + getOffsetX( ), currentBP + getOffsetY( ) ); diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ContainerArea.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ContainerArea.java index 19a0ae74327..e1461c1e572 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ContainerArea.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ContainerArea.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.logging.Level; +import java.util.logging.Logger; import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.report.engine.content.IContent; @@ -25,6 +26,7 @@ import org.eclipse.birt.report.engine.executor.ExecutionContext; import org.eclipse.birt.report.engine.ir.DimensionType; import org.eclipse.birt.report.engine.ir.EngineIRConstants; +import org.eclipse.birt.report.engine.ir.ReportElementDesign; import org.eclipse.birt.report.engine.layout.PDFConstants; import org.eclipse.birt.report.engine.layout.pdf.util.PropertyUtil; import org.eclipse.birt.report.engine.nLayout.LayoutContext; @@ -348,6 +350,50 @@ public void relayout( ) // FIXME to implement } + // copied from AbstractLM + public int getDimensionValue( String d ) + { + + if ( d == null ) + { + return 0; + } + try + { + if ( d.endsWith( "in" ) || d.endsWith( "in" ) ) //$NON-NLS-1$ //$NON-NLS-2$ + { + return (int) ( ( Float.valueOf( d + .substring( 0, d.length( ) - 2 ) ).floatValue( ) ) * 72000.0f ); + } + else if ( d.endsWith( "cm" ) || d.endsWith( "CM" ) ) //$NON-NLS-1$//$NON-NLS-2$ + { + return (int) ( ( Float.valueOf( d + .substring( 0, d.length( ) - 2 ) ).floatValue( ) ) * 72000.0f / 2.54f ); + } + else if ( d.endsWith( "mm" ) || d.endsWith( "MM" ) ) //$NON-NLS-1$ //$NON-NLS-2$ + { + return (int) ( ( Float.valueOf( d + .substring( 0, d.length( ) - 2 ) ).floatValue( ) ) * 7200.0f / 2.54f ); + } + else if ( d.endsWith( "px" ) || d.endsWith( "PX" ) ) //$NON-NLS-1$//$NON-NLS-2$ + { + return (int) ( ( Float.valueOf( d + .substring( 0, d.length( ) - 2 ) ).floatValue( ) ) / 96.0f * 72000.0f );// set + // as + // 96dpi + } + else // angenommen werden pt + { + return (int) ( ( Float.valueOf( d ).floatValue( ) ) ); + } + } + catch ( NumberFormatException ex ) + { + logger.log( Level.WARNING, ex.getLocalizedMessage( ) ); + return 0; + } + } + protected void checkDisplayNone( ) { if ( context.isDisplayNone( ) ) diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/RowArea.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/RowArea.java index 52142f1714a..5a89500af5c 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/RowArea.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/RowArea.java @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.Iterator; +import java.util.logging.Logger; import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.report.engine.content.IContent; @@ -204,6 +205,32 @@ public void add( AbstractArea area ) { cArea.flipPositionForRtl( ); } + // Variante 2 . Die Property muss bei einer Cell gesetzt werden. + // Eine mögliche Struktur: + // Tabelle + // Header + // Details + // Footer-Row mit Cell mit VerticalTab=20cm. + // Footer-Row mit Daten die ab y=20cm ausgegeben werden sollen. + if (cArea.getContent()!=null && cArea.getContent().getUserProperties() != null) { + String verticalTab = (String)cArea.getContent().getUserProperties().get("VerticalTab"); + if (verticalTab != null) { + Logger log = Logger.getLogger(getClass().getName()); + log.info("VerticalTab=" + verticalTab); + int grenze = getDimensionValue(verticalTab); + log.info("Detected UserProperty VerticalTab=" + grenze + ", currentBP=" + currentBP); + int absBP = getAbsoluteBP(); + log.info("absBP=" + absBP); + if (absBP > grenze) { + log.warning("Page break required"); + } else if (absBP < grenze) { + log.info("Setting paddingTop and allocatedHeight..."); + cArea.localProperties.paddingTop += (grenze - absBP); + cArea.setAllocatedHeight(cArea.getAllocatedHeight() + (grenze - absBP)); + } + } + } + } public void addChild( IArea area ) From 403e3af83cf74d7d9ccc5362a1bca6f5bb6b4616 Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Tue, 1 Oct 2019 16:02:44 +0200 Subject: [PATCH 03/16] Fixed the handling of page header and footer for Word 2003 and 2007 output. Word 2003 = WPML emitter, Word 2007 = DOCX emitter. This did not work as it should for the case when showHeaderOnFirst=false was specified for the master page, causing problems with the page header and the page footer, too. --- .../engine/emitter/docx/DocxEmitterImpl.java | 4 +- .../engine/emitter/docx/writer/Document.java | 28 +++- .../emitter/docx/writer/DocxWriter.java | 38 +++-- .../emitter/wpml/AbstractEmitterImpl.java | 148 +++++++++--------- .../engine/emitter/wpml/DocEmitterImpl.java | 53 +++---- .../engine/emitter/wpml/IWordWriter.java | 14 +- .../wpml/writer/AbstractWordXmlWriter.java | 53 ++++--- .../engine/emitter/wpml/writer/DocWriter.java | 26 +-- 8 files changed, 197 insertions(+), 167 deletions(-) diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java index 53916399743..0795d35933b 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java @@ -34,7 +34,7 @@ public class DocxEmitterImpl extends AbstractEmitterImpl { private static final String OUTPUT_FORMAT = "docx"; - + private boolean embedHtml = true; public DocxEmitterImpl( ContentEmitterVisitor contentVisitor ) @@ -105,7 +105,7 @@ public void startForeign( IForeignContent foreign ) throws BirtException wordWriter.writeForeign( foreign ); if ( isInSpannedCell( foreign ) ) { - //insert empty line after embed html + //insert empty line after embed html wordWriter.endTableCell( true, true ); } else diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java index 436a6c71415..7812d538091 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java @@ -291,16 +291,29 @@ void writeHeaderReference( BasicComponent header, boolean showHeaderOnFirst ) writer.closeTag( "w:headerReference" ); } - void writeFooterReference( BasicComponent footer ) + void writeFooterReference( BasicComponent footer, boolean showHeaderOnFirst ) { + String type = showHeaderOnFirst ? "first" : "default"; writer.openTag( "w:footerReference" ); + writer.attribute( "w:type", type ); writer.attribute( "r:id", footer.getRelationshipId( ) ); writer.closeTag( "w:footerReference" ); } - Header createHeader( int headerHeight, int headerWidth ) throws IOException + Header createHeader( boolean showHeaderOnFirst, int headerHeight, int headerWidth ) throws IOException { - String uri = "header" + getHeaderID( ) + ".xml"; + if (showHeaderOnFirst) { + String uri = "header" + nextHeaderID( ) + ".xml"; + String type = ContentTypes.WORD_HEADER; + String relationshipType = RelationshipTypes.HEADER; + IPart headerPart = part.getPart( uri, type, relationshipType ); + Header firstPageHeader = new Header( headerPart, this, headerHeight, headerWidth ); + firstPageHeader.start(); + firstPageHeader.end(); + writeHeaderReference( firstPageHeader, true ); + + } + String uri = "header" + nextHeaderID( ) + ".xml"; String type = ContentTypes.WORD_HEADER; String relationshipType = RelationshipTypes.HEADER; IPart headerPart = part.getPart( uri, type, relationshipType ); @@ -309,19 +322,19 @@ Header createHeader( int headerHeight, int headerWidth ) throws IOException Footer createFooter( int footerHeight, int footerWidth ) throws IOException { - String uri = "footer" + getFooterID( ) + ".xml"; + String uri = "footer" + nextFooterID( ) + ".xml"; String type = ContentTypes.WORD_FOOTER; String relationshipType = RelationshipTypes.FOOTER; IPart footerPart = part.getPart( uri, type, relationshipType ); return new Footer( footerPart, this, footerHeight, footerWidth ); } - private int getHeaderID( ) + private int nextHeaderID( ) { return headerId++; } - private int getFooterID( ) + private int nextFooterID( ) { return footerId++; } @@ -347,7 +360,8 @@ void writePageBorders( IStyle style, int topMargin, int bottomMargin, writer.closeTag( "w:pgBorders" ); } - void writeEmptyElement( String tag ) + @Override + public void writeEmptyElement( String tag ) { writer.openTag( tag ); writer.closeTag( tag ); diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java index 820f259dd8b..7fac901d9c2 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java @@ -147,7 +147,7 @@ public void endSection( ) public void startHeader( boolean showHeaderOnFirst, int headerHeight, int headerWidth ) throws IOException { - currentComponent = document.createHeader( headerHeight, headerWidth ); + currentComponent = document.createHeader( showHeaderOnFirst, headerHeight, headerWidth ); currentComponent.start( ); this.showHeaderOnFirst = showHeaderOnFirst; } @@ -155,22 +155,36 @@ public void startHeader( boolean showHeaderOnFirst, int headerHeight, public void endHeader( ) { currentComponent.end( ); - document.writeHeaderReference( currentComponent, showHeaderOnFirst ); + document.writeHeaderReference( currentComponent, false ); currentComponent = document; } - public void startFooter( String type, int footerHeight, int footerWidth ) + public boolean mustCloneFooter( ) { + return false; + } + + public void startFooter( boolean isFirstPage, int footerHeight, int footerWidth ) throws IOException { - // FIXME argument type is unused - in the WPML emitter it is used to control visibility on the first page. - currentComponent = document.createFooter( footerHeight, footerWidth ); - currentComponent.start( ); + if ( !isFirstPage ) { + currentComponent = document.createFooter( footerHeight, footerWidth ); + currentComponent.start( ); + } else { + currentComponent = null; + } } public void endFooter( ) { - currentComponent.end( ); - document.writeFooterReference( currentComponent ); + if ( currentComponent == null ) { + ; // nothing to do. + } else { + currentComponent.end( ); + if (!this.showHeaderOnFirst) { + document.writeFooterReference( currentComponent, true ); + } + document.writeFooterReference( currentComponent, false ); + } currentComponent = document; } @@ -220,7 +234,7 @@ public void startTableRow( double height, boolean isHeader, public void startTableRow( double height ) { - currentComponent.startTableRow( height, false, false, false, false ); + currentComponent.startTableRow( height, false, false, false ); } public void endTableRow( ) @@ -349,8 +363,8 @@ public void drawDocumentBackgroundImage( String backgroundImageUrl, } - public void writeEmptyElement(String tag) - { - document.writeEmptyElement(tag); + public void writeEmptyElement(String tag) { + currentComponent.writeEmptyElement(tag); } + } diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java index 5db2a219f4d..88d11c7fa97 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java @@ -68,6 +68,8 @@ import org.eclipse.birt.report.engine.i18n.MessageConstants; import org.eclipse.birt.report.engine.ir.DimensionType; import org.eclipse.birt.report.engine.ir.EngineIRConstants; +import org.eclipse.birt.report.engine.ir.Expression; +import org.eclipse.birt.report.engine.ir.ReportItemDesign; import org.eclipse.birt.report.engine.ir.SimpleMasterPageDesign; import org.eclipse.birt.report.engine.layout.emitter.Image; import org.eclipse.birt.report.engine.layout.pdf.font.FontMappingManager; @@ -81,7 +83,6 @@ import org.eclipse.birt.report.engine.util.FlashFile; import org.eclipse.birt.report.model.api.ReportDesignHandle; import org.eclipse.birt.report.model.api.elements.DesignChoiceConstants; - import org.w3c.dom.css.CSSValue; import org.w3c.dom.css.CSSValueList; @@ -123,7 +124,7 @@ public static enum TextFlag { nonInherityStyles.add( IStyle.STYLE_BORDER_RIGHT_STYLE ); nonInherityStyles.add( IStyle.STYLE_BORDER_RIGHT_WIDTH ); } - + private static final HashMap genericFontMapping = new HashMap( ); static @@ -171,13 +172,13 @@ public static enum TextFlag { private int leftMargin = 0; private int rightMargin = 0; - + private int pageTopBorderWidth = 0; - + private int pageBottomBorderWidth = 0; - + private int pageLeftBorderWidth = 0; - + private int pageRightBorderWidth = 0; private String orientation = "portrait"; @@ -197,9 +198,9 @@ public static enum TextFlag { private IHTMLActionHandler actionHandler; private IReportContext reportContext; - + private String messageFlashObjectNotSupported; - + private String messageReportItemNotSupported; private String layoutPreference = null; @@ -374,23 +375,23 @@ public void computePageProperties( IPageContent page ) leftMargin = WordUtil.convertTo( page.getMarginLeft( ), 0, reportDpi ); rightMargin = WordUtil.convertTo( page.getMarginRight( ), 0, reportDpi ); - + pageTopBorderWidth = WordUtil.parseBorderSize( PropertyUtil .getDimensionValue( page.getComputedStyle( ).getProperty( - StyleConstants.STYLE_BORDER_TOP_WIDTH ) ) ); - + StyleConstants.STYLE_BORDER_TOP_WIDTH ) ) ); + pageBottomBorderWidth = WordUtil.parseBorderSize( PropertyUtil .getDimensionValue( page.getComputedStyle( ).getProperty( StyleConstants.STYLE_BORDER_BOTTOM_WIDTH ) ) ); - + pageLeftBorderWidth = WordUtil.parseBorderSize( PropertyUtil .getDimensionValue( page.getComputedStyle( ).getProperty( StyleConstants.STYLE_BORDER_LEFT_WIDTH ) ) ); - + pageRightBorderWidth = WordUtil.parseBorderSize( PropertyUtil .getDimensionValue( page.getComputedStyle( ).getProperty( StyleConstants.STYLE_BORDER_RIGHT_WIDTH ) ) ); - + contentWidth = pageWidth - leftMargin - rightMargin - pageLeftBorderWidth - pageRightBorderWidth; @@ -406,27 +407,27 @@ protected Object getUserProperty(IContent elem, String propName) { Object val = null; Map userprops = elem.getUserProperties(); if (userprops != null) { - val = (String)userprops.get(propName); - } -// if (val == null) { -// // Necessary for BIRT 4.2.1: -// // This version does not promote automatically the user-properties -// // from the design Element to the runtime element (4.3 does!). -// ReportItemDesign designElem = (ReportItemDesign )elem.getGenerateBy(); -// if (designElem != null) { -// Map designUserprops = designElem.getUserProperties(); -// if (designUserprops != null) { -// Expression expression = designUserprops.get(propName); -// if( expression instanceof Expression.Constant ) { -// Expression.Constant constant = (Expression.Constant)expression; -// val = constant.getValue(); -// } -// } -// } -// } + val = userprops.get(propName); + } + if (val == null) { + // Necessary for BIRT 4.2.1: + // This version does not promote automatically the user-properties + // from the design Element to the runtime element (4.3 does!). + ReportItemDesign designElem = (ReportItemDesign )elem.getGenerateBy(); + if (designElem != null) { + Map designUserprops = designElem.getUserProperties(); + if (designUserprops != null) { + Expression expression = designUserprops.get(propName); + if( expression instanceof Expression.Constant ) { + Expression.Constant constant = (Expression.Constant)expression; + val = constant.getValue(); + } + } + } + } return val; } - + public void startAutoText( IAutoTextContent autoText ) { writeContent( autoText.getType( ), autoText.getText( ), autoText ); @@ -446,6 +447,7 @@ public void startLabel( ILabelContent label ) String fieldFunction = (String) getUserProperty(label, PROP_NAME_FIELDFUNCTION); if (fieldFunction != null && !(fieldFunction.isEmpty())){ type = AbstractEmitterImpl.CUSTOM_FIELD; + // TODO It would be nice to use fieldFunction as the the Word field funtion and output the label text as a placeholder. } writeContent( type, txt, label ); } @@ -471,7 +473,7 @@ public void startList( IListContent list ) tableTocs.add( new TocInfo( listToc.toString( ), tocLevel ) ); } increaseTOCLevel( list ); - + if ( context.isAfterTable( ) ) { wordWriter.insertHiddenParagraph( ); @@ -484,7 +486,7 @@ public void startList( IListContent list ) if (LAYOUTMODE_NONE.equals(layoutMode)) { ; } else { - wordWriter.startTable( list.getComputedStyle( ), width ); + wordWriter.startTable( list.getComputedStyle( ), width ); } } } @@ -494,13 +496,13 @@ public void startListBand( IListBandContent listBand ) if (!listLayouts.empty() && LAYOUTMODE_NONE.equals(listLayouts.peek())) { ; } else { - context.startCell( ); - wordWriter.startTableRow( -1 ); + context.startCell( ); + wordWriter.startTableRow( -1 ); IStyle style = computeStyle( listBand.getComputedStyle( ) ); - wordWriter.startTableCell( context.getCurrentWidth( ), style, null ); - writeTableToc( ); - } + wordWriter.startTableCell( context.getCurrentWidth( ), style, null ); + writeTableToc( ); + } } public void startListGroup( IListGroupContent group ) @@ -565,7 +567,7 @@ public void startCell( ICellContent cell ) int cellWidth = context.getCellWidth( columnId, columnSpan ); IStyle style = computeStyle( cell.getComputedStyle( ) ); - + if ( rowSpan > 1 ) { context.addSpan( columnId, columnSpan, cellWidth, rowSpan, style ); @@ -743,12 +745,11 @@ public void endList( IListContent list ) { styles.pop( ); } - context.addContainer( true ); if (LAYOUTMODE_NONE.equals(layoutMode)) { ; } else { - wordWriter.endTable( ); + wordWriter.endTable( ); context.setIsAfterTable( true ); decreaseTOCLevel( list ); } @@ -980,7 +981,7 @@ protected void writeToc( IContent content ) { writeToc( content, false ); } - + protected void writeToc( IContent content, boolean middleInline ) { if ( content != null ) @@ -1242,7 +1243,7 @@ private boolean isHidden( IContent content ) /** * if the content is hidden - * + * * @return */ private boolean isHiddenByVisibility( IContent content ) @@ -1325,9 +1326,9 @@ private void writeHeaderFooter( ) throws IOException, BirtException SimpleMasterPageDesign master = (SimpleMasterPageDesign) previousPage .getGenerateBy( ); - + boolean showHeaderOnFirst = true; - + if ( previousPage.getPageHeader( ) != null || backgroundHeight != null || backgroundWidth != null ) { @@ -1352,56 +1353,47 @@ private void writeHeaderFooter( ) throws IOException, BirtException } if ( previousPage.getPageFooter( ) != null ) { - // HVB: I don't think that MS word does support this. - // At least not with RunAndRenderTask - if ( !master.isShowFooterOnLast( ) - && previousPage.getPageNumber( ) == reportContent - .getTotalPage( ) ) + // MS word does not support hiding the footer on the last page. + // The only option would be to create a different section just + // for the last page. + // This in turn could only work with separate RunTask and RenderTask + // and it would prevent the user from making page-breaking changes. + // Thus supporting showFooterOnLast is more dangerous than useful. + if ( !master.isShowFooterOnLast( ) ) { - IContent footer = previousPage.getPageFooter( ); - ILabelContent emptyContent = footer.getReportContent( ) - .createLabelContent( ); - emptyContent.setText( this.EMPTY_FOOTER ); - wordWriter.startFooter( "odd", footerHeight, contentWidth ); - contentVisitor.visit( emptyContent, null ); - wordWriter.endFooter( ); + logger.warning("Hiding the footer on the last page is not supported for MS Word output."); } - else - { - if (!showHeaderOnFirst) { - wordWriter.startFooter("first", footerHeight, contentWidth); + wordWriter.startFooter( false, footerHeight, contentWidth ); + contentVisitor.visitChildren( previousPage.getPageFooter( ), + null ); + wordWriter.endFooter( ); + if (!showHeaderOnFirst) { + wordWriter.startFooter( true, footerHeight, contentWidth); + if (wordWriter.mustCloneFooter()) { contentVisitor.visitChildren( previousPage.getPageFooter( ), null ); - wordWriter.endFooter( ); } - wordWriter.startFooter( "odd", footerHeight, contentWidth ); - contentVisitor.visitChildren( previousPage.getPageFooter( ), - null ); wordWriter.endFooter( ); } } - - if ( previousPage.getPageHeader( ) != null || backgroundHeight != null - || backgroundWidth != null ) - { - if (!showHeaderOnFirst) { - wordWriter.writeEmptyElement("w:titlePg"); - } + + if (!showHeaderOnFirst) { + wordWriter.writeEmptyElement("w:titlePg"); } - + } /** * Transfer background for current page to Doc format. Now, the exported * file will apply the first background properties, and followed background * will ignore. - * + * * In addition, Since the Word only support fill-in background, the * background attach, pos, posX, posY and repeat are not mapped to Word * easyly. At present, ignore those properties. - * + * * @throws IOException - * + * * @TODO support background properties. attach, pos, posx, posy and repeat. */ diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/DocEmitterImpl.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/DocEmitterImpl.java index b1b1e9df6a4..991504b90b2 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/DocEmitterImpl.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/DocEmitterImpl.java @@ -82,7 +82,7 @@ public void endContainer( IContainerContent container ) inlineStyles.pop( ); } } - + if ( !CSSConstants.CSS_INLINE_VALUE.equalsIgnoreCase( container .getComputedStyle( ).getDisplay( ) ) ) { @@ -156,7 +156,7 @@ public void startForeign( IForeignContent foreign ) throws BirtException // store the inline state before the HTML foreign. boolean inlineBrother = !context.isFirstInline( ); // the inline state needs be recalculated in the HTML foreign. - + // if the foreign itself is not inline if ( !"inline".equalsIgnoreCase( foreign.getComputedStyle( ) //$NON-NLS-1$ .getDisplay( ) ) ) @@ -192,34 +192,33 @@ public void startForeign( IForeignContent foreign ) throws BirtException } if (createNestedTable) { - context.startCell( ); - - if ( context.isAfterTable( ) ) - { - wordWriter.insertHiddenParagraph( ); - context.setIsAfterTable( false ); - } - int width = WordUtil.convertTo( foreign.getWidth( ), - context.getCurrentWidth( ), reportDpi ); - width = Math.min( width, context.getCurrentWidth( ) ); - wordWriter.startTable( foreign.getComputedStyle( ), width, inForeign ); - wordWriter.startTableRow( -1 ); - wordWriter - .startTableCell( width, foreign.getComputedStyle( ), null ); - writeBookmark(foreign); - writeToc( foreign ); - contentVisitor.visitChildren( foreign, null ); + context.startCell( ); + if ( context.isAfterTable( ) ) + { + wordWriter.insertHiddenParagraph( ); + context.setIsAfterTable( false ); + } + int width = WordUtil.convertTo( foreign.getWidth( ), + context.getCurrentWidth( ), reportDpi ); + width = Math.min( width, context.getCurrentWidth( ) ); + wordWriter.startTable( foreign.getComputedStyle( ), width, inForeign ); + wordWriter.startTableRow( -1 ); + wordWriter + .startTableCell( width, foreign.getComputedStyle( ), null ); + writeBookmark(foreign); + writeToc( foreign ); + contentVisitor.visitChildren( foreign, null ); - adjustInline( ); + adjustInline( ); - wordWriter.endTableCell( context.needEmptyP( ) ); + wordWriter.endTableCell( context.needEmptyP( ) ); - context.endCell( ); - wordWriter.endTableRow( ); - wordWriter.endTable( ); - context.setIsAfterTable( true ); - context.addContainer( true ); - hasPInside = false; + context.endCell( ); + wordWriter.endTableRow( ); + wordWriter.endTable( ); + context.setIsAfterTable( true ); + context.addContainer( true ); + hasPInside = false; } else { writeBookmark(foreign); writeToc( foreign ); diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/IWordWriter.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/IWordWriter.java index 22fc7ec691a..e721c3a993c 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/IWordWriter.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/IWordWriter.java @@ -52,7 +52,7 @@ void writePageBorders( IStyle style, int topMargin, int bottomMargin, int leftMargin, int rightMargin ); void startTable( IStyle style, int tableWidth ); - + void startTable( IStyle style, int tableWidth, boolean inForeign ); void endTable( ); @@ -69,7 +69,7 @@ void startTableRow( double height, boolean isHeader, boolean repeatHeader, void startTableCell( int width, IStyle style, SpanInfo info ); void endTableCell( boolean needEmptyP ); - + void endTableCell( boolean needEmptyP, boolean inForeign ); void writeSpanCell( SpanInfo info ); @@ -77,7 +77,7 @@ void startTableRow( double height, boolean isHeader, boolean repeatHeader, void writeEmptyCell( ); void writeTOC( String toc, int tocLevel ); - + void writeTOC( String toc, String color, int tocLevel, boolean middleInline ); void insertHiddenParagraph( ); @@ -101,7 +101,9 @@ void startHeader( boolean showHeaderOnFirst, int headerHeight, void endHeader( ); - void startFooter( String type, int footerHeight, int footerWidth ) throws IOException; + boolean mustCloneFooter( ); + + void startFooter( boolean isFirstPage, int footerHeight, int footerWidth ) throws IOException; void endFooter( ); @@ -115,7 +117,7 @@ void writeContent( int type, String txt, IStyle style, IStyle inlineStyle, void startPage( ); void endPage( ); - + void writeEmptyElement(String tag); - + } diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/AbstractWordXmlWriter.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/AbstractWordXmlWriter.java index e21d29c0255..c71b93d7f3a 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/AbstractWordXmlWriter.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/AbstractWordXmlWriter.java @@ -28,6 +28,7 @@ import org.eclipse.birt.report.engine.emitter.wpml.SpanInfo; import org.eclipse.birt.report.engine.emitter.wpml.WordUtil; import org.eclipse.birt.report.engine.layout.pdf.util.PropertyUtil; + import org.w3c.dom.css.CSSValue; public abstract class AbstractWordXmlWriter @@ -42,11 +43,11 @@ public abstract class AbstractWordXmlWriter protected final String TOP = "top"; protected final String BOTTOM = "bottom"; - + public static final char SPACE = ' '; - + public static final String EMPTY_STRING = ""; - + public static final int INDEX_NOTFOUND = -1; protected int imageId = 75; @@ -77,7 +78,7 @@ public abstract class AbstractWordXmlWriter protected abstract void writeIndent( int indent ); protected abstract void writeIndent( int leftMargin, int rightMargin, int textIndent ); - + public void startSectionInParagraph( ) { writer.openTag( "w:p" ); @@ -246,7 +247,7 @@ public void startTable( IStyle style, int tablewidth, boolean inForeign ) writeTableLayout( ); writeTableBorders( style ); writeBackgroundColor( style.getBackgroundColor( ) ); - + //"justify" is not an option for table alignment in word if ( "justify".equalsIgnoreCase( style.getTextAlign( ) ) ) { @@ -492,6 +493,7 @@ private boolean needNewParagraph( String txt ) .equals( txt ) ); } + @SuppressWarnings("deprecation") public void startParagraph( IStyle style, boolean isInline, int paragraphWidth ) { @@ -500,19 +502,20 @@ public void startParagraph( IStyle style, boolean isInline, writeSpacing( ( style.getProperty( StyleConstants.STYLE_MARGIN_TOP ) ), ( style.getProperty( StyleConstants.STYLE_MARGIN_BOTTOM ) ) ); writeAlign( style.getTextAlign( ), style.getDirection( ) ); + int indent = PropertyUtil.getDimensionValue( style .getProperty( StyleConstants.STYLE_TEXT_INDENT ), paragraphWidth ) / 1000 * 20; - + int leftMargin = PropertyUtil.getDimensionValue( style .getProperty( StyleConstants.STYLE_MARGIN_LEFT ), paragraphWidth ) / 1000 * 20; - + int rightMargin = PropertyUtil.getDimensionValue( style .getProperty( StyleConstants.STYLE_MARGIN_RIGHT ), paragraphWidth ) / 1000 * 20; writeIndent( leftMargin, rightMargin, indent ); - + if ( !isInline ) { writeBackgroundColor( style.getBackgroundColor( ) ); @@ -523,13 +526,14 @@ public void startParagraph( IStyle style, boolean isInline, } /** - * Used only in inline text .The text align style of inline text + * Used only in inline text .The text align style of inline text * is ignored,but its parent text align should be applied. * @param style * @param isInline * @param paragraphWidth - * @param textAlign parent text align of inline text + * @param textAlign parent text align of inline text */ + @SuppressWarnings("deprecation") public void startParagraph( IStyle style, boolean isInline, int paragraphWidth, String textAlign ) { @@ -541,16 +545,16 @@ public void startParagraph( IStyle style, boolean isInline, int indent = PropertyUtil.getDimensionValue( style .getProperty( StyleConstants.STYLE_TEXT_INDENT ), paragraphWidth ) / 1000 * 20; - + int leftMargin = PropertyUtil.getDimensionValue( style .getProperty( StyleConstants.STYLE_MARGIN_LEFT ), paragraphWidth ) / 1000 * 20; - + int rightMargin = PropertyUtil.getDimensionValue( style .getProperty( StyleConstants.STYLE_MARGIN_RIGHT ), paragraphWidth ) / 1000 * 20; writeIndent( leftMargin, rightMargin, indent ); - + if ( !isInline ) { writeBackgroundColor( style.getBackgroundColor( ) ); @@ -658,7 +662,7 @@ else if ( CSSConstants.CSS_LOWERCASE_VALUE writer.closeTag("w:t"); } - + /** * Word have extra limitation on text in run: * a. it must following xml format. @@ -812,7 +816,7 @@ public void startTableRow( double height, boolean isHeader, String headerOnOff = repeatHeader ? "on" : "off"; writeAttrTag( "w:tblHeader", headerOnOff ); } - + if (cantSplit) { writer.openTag("w:cantSplit"); writer.closeTag("w:cantSplit"); @@ -894,7 +898,7 @@ public void endTableCell( boolean empty ) // could only be placed into the cell using a mouse double-click. endTableCell( empty, true ); } - + public void endTableCell( boolean empty, boolean inForeign ) { @@ -942,7 +946,7 @@ public void insertEmptyParagraphInForeign( ) writer.openTag("w:p"); writer.closeTag("w:p"); } - + public void insertHiddenParagraph( ) { writer.openTag( "w:p" ); @@ -1072,6 +1076,7 @@ protected int getImageID( ) return imageId++; } + @SuppressWarnings("deprecation") private void writeTextInParagraph( int type, String txt, IStyle style, String fontFamily, HyperlinkInfo info, int paragraphWidth, boolean runIsRtl ) @@ -1229,10 +1234,9 @@ public void writeTextInRun( int type, String txt, IStyle style, } closeHyperlink( info ); } - /** * function emulate the overflow hidden behavior on table cell - * + * * @param text * String to check * @param style @@ -1272,10 +1276,10 @@ public String cropOverflowString( String text, IStyle style, sb.append( cropOverflowWord( text, fm, cellWidthInPointAdv ) ); return sb.toString( ); } - + /** * crop words according to the given container point advance - * + * * @param text * it is a given word * @param fm @@ -1366,7 +1370,7 @@ public void writeTextInRun( int type, String txt, IStyle style, writer.closeTag( "w:rPr" ); writeString( txt, style ); } - + } else { @@ -1536,4 +1540,9 @@ private int getLineId( ) { return lineId++; } + + public void writeEmptyElement(String tag) { + writer.openTag(tag); + writer.closeTag(tag); + } } diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/DocWriter.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/DocWriter.java index 4743fd1dac1..47b528ac7b9 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/DocWriter.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/writer/DocWriter.java @@ -195,7 +195,7 @@ private void writeCoreProperties( String creator, String title, } /** - * + * * @param data * image data * @param height @@ -371,7 +371,7 @@ protected void writeFont( String fontFamily ) writer.attribute( "w:cs", fontFamily ); writer.closeTag( "w:rFonts" ); } - + protected void writeFontStyle( IStyle style ) { String val = WordUtil.removeQuote( style.getFontStyle( ) ); @@ -539,10 +539,14 @@ public void endHeader( ) writer.closeTag( "w:hdr" ); } - public void startFooter( String type, int footerHeight, int footerWidth ) + public boolean mustCloneFooter( ) { + return true; + } + + public void startFooter( boolean isFirstPage, int footerHeight, int footerWidth ) { writer.openTag( "w:ftr" ); - writer.attribute( "w:type", type ); + writer.attribute( "w:type", (isFirstPage ? "first" : "odd") ); startHeaderFooterContainer( footerHeight, footerWidth ); } @@ -556,7 +560,7 @@ public void writeTOC( String tocText, int level ) { writeTOC( tocText, null, level, false ); } - + public void writeTOC( String tocText, String color, int level, boolean middleInline ) { @@ -644,7 +648,7 @@ protected void writeIndent( int textIndent ) writer.attribute( "w:first-line", textIndent ); writer.closeTag( "w:ind" ); } - + protected void writeIndent( int leftMargin, int rightMargin, int textIndent ) { if ( leftMargin == 0 && rightMargin == 0 && textIndent == 0 ) @@ -656,21 +660,17 @@ protected void writeIndent( int leftMargin, int rightMargin, int textIndent ) { writer.attribute( "w:left", leftMargin ); } - + if ( rightMargin != 0 ) { writer.attribute( "w:right", rightMargin ); } - + if ( textIndent != 0 ) { writer.attribute( "w:first-line", textIndent ); } writer.closeTag( "w:ind" ); } - - public void writeEmptyElement(String tag) { - writer.openTag(tag); - writer.closeTag(tag); - } + } From b8de75709543c26ddcf6fae01e840df9e9f8b68c Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Fri, 25 Oct 2019 15:53:17 +0200 Subject: [PATCH 04/16] Revert commit f84d0f812a72ba8e54f6caf641e16442d480594c because it causes wrong output (empty table rows height was ignored). --- .../engine/nLayout/area/impl/TableLayout.java | 99 +++++++++---------- 1 file changed, 49 insertions(+), 50 deletions(-) diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TableLayout.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TableLayout.java index e437bd62e2b..4687fb1e906 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TableLayout.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TableLayout.java @@ -44,13 +44,13 @@ public class TableLayout protected int startCol; protected int endCol; - + protected RowArea unresolvedRow; - + private RowArea currentRow; - + private boolean isRTL = false; - + public TableLayout( ITableContent tableContent, TableLayoutInfo layoutInfo, int startCol, int endCol ) { @@ -72,7 +72,7 @@ public void setUnresolvedRow( RowArea row ) unresolvedRow = row; } } - + public RowArea getNextRow(RowArea row) { int index = rows.indexOf( row ); @@ -82,7 +82,7 @@ public RowArea getNextRow(RowArea row) } return null; } - + protected int resolveBottomBorder( CellArea cell ) { IStyle tableStyle = tableContent.getComputedStyle( ); @@ -141,7 +141,7 @@ public void remove( TableArea table ) } rows.resetCursor( ); } - + public void clear() { rows.clear( ); @@ -151,7 +151,7 @@ public void clear() protected IStyle getLeftCellContentStyle( RowArea lastRow, CellArea currentCell ) { RowArea currentRow = (RowArea) currentCell.getParent( ); - int columnID = currentCell.getColumnID( ); + int columnID = currentCell.getColumnID( ); CellArea cell = null; // if ( isRTL ) // { @@ -188,7 +188,7 @@ protected IStyle getLeftCellContentStyle( RowArea lastRow, CellArea currentCell /** * resolve cell border conflict - * + * * @param cellArea */ public void resolveBorderConflict( CellArea cellArea, boolean isFirst ) @@ -242,7 +242,7 @@ public void resolveBorderConflict( CellArea cellArea, boolean isFirst ) rowStyle, columnStyle, cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -258,7 +258,7 @@ public void resolveBorderConflict( CellArea cellArea, boolean isFirst ) null, columnStyle, null ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -278,7 +278,7 @@ public void resolveBorderConflict( CellArea cellArea, boolean isFirst ) rowStyle, columnStyle, cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -295,7 +295,7 @@ else if ( !isRTL ) cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -316,7 +316,7 @@ else if ( !isRTL ) columnStyle, cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -334,7 +334,7 @@ else if ( isRTL preColumnStyle, cellContentStyle, leftCellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -354,7 +354,7 @@ else if ( isRTL rowStyle, topCellStyle, cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -370,7 +370,7 @@ else if ( isRTL null, topCellStyle, null ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -390,7 +390,7 @@ else if ( isRTL rowStyle, columnStyle, cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -408,7 +408,7 @@ else if ( !isRTL ) cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -428,7 +428,7 @@ else if ( !isRTL ) columnStyle, cellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -446,7 +446,7 @@ else if ( isRTL preColumnStyle, cellContentStyle, leftCellContentStyle ); if ( border != null ) { - if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) + if ( cellArea.getBoxStyle( ) == BoxStyle.DEFAULT ) { cellArea.setBoxStyle( new BoxStyle( BoxStyle.DEFAULT )); } @@ -459,7 +459,7 @@ else if ( isRTL /** * get column style - * + * * @param columnID * @return */ @@ -586,7 +586,7 @@ public void reset( TableArea table ) /** * When pagination happens, if drop cells should be finished by force, we * need to end these cells and vertical align for them. - * + * */ public int resolveAll( RowArea row ) { @@ -610,7 +610,7 @@ public int resolveAll( RowArea row ) { DummyCell dummyCell = (DummyCell) cell; int delta = dummyCell.getDelta( ); - //FIXME + //FIXME //height = Math.max( height, dummyCell.getCell( ).getHeight( ) - delta ); } else @@ -738,7 +738,7 @@ public void addRow( RowArea rowArea, boolean isFixedLayout ) updateRow( rowArea, isFixedLayout ); rows.add( rowArea ); } - + protected boolean isUnresolved(RowArea row) { if ( !row.finished ) @@ -755,8 +755,8 @@ protected boolean isUnresolved(RowArea row) } return false; } - - + + public void setMergeUnresolvedRowHint( ) { @@ -786,7 +786,7 @@ public void setMergeUnresolvedRowHint( ) } } } - + protected boolean isSpecifiedHeight( RowArea area ) { IContent content = area.getContent( ); @@ -802,7 +802,7 @@ protected boolean isSpecifiedHeight( RowArea area ) } return false; } - + private boolean isEmptyRow( RowArea rowArea ) { for ( int i = startCol; i <= endCol; i++ ) @@ -820,7 +820,7 @@ private boolean isEmptyRow( RowArea rowArea ) * 1) Creates row wrapper. 2) For the null cell in the row wrapper, fills * the relevant position with dummy cell or empty cell. 3) Updates the * height of the row and the cells in the row. - * + * * @param rowArea * current rowArea. */ @@ -847,8 +847,7 @@ private void updateRow( RowArea rowArea, boolean isFixedLayout ) lastRow = (RowArea) rows.getCurrent( ); } currentRow = rowArea; - // Do not use specified height if row is empty to avoid endless page break - int sheight = isEmptyRow( rowArea ) ? 0 : rowArea.getSpecifiedHeight( ); + int sheight = rowArea.getSpecifiedHeight( ); int height = sheight; /* * In this case, the row should be the first row of new page. 1. this @@ -926,7 +925,7 @@ private void updateRow( RowArea rowArea, boolean isFixedLayout ) { cell = createEmptyCell( null, i, rowArea ); } - + } if ( cell != null ) { @@ -949,7 +948,7 @@ private void updateRow( RowArea rowArea, boolean isFixedLayout ) } updateRowHeight( rowArea, height, isFixedLayout ); } - + private CellArea createEmptyCell( CellArea upperCell, int columnId, RowArea row ) { @@ -961,7 +960,7 @@ private CellArea createEmptyCell( CellArea upperCell, cellContent = (ICellContent) upperCell.getContent( ); rowSpan = upperCell.getRowSpan( ) - 1; } - + if ( cellContent == null ) { cellContent = tableContent.getReportContent( ) @@ -983,7 +982,7 @@ private CellArea createEmptyCell( CellArea upperCell, emptyCell = new CellArea( ); emptyCell.content = cellContent; } - + //clear border BoxStyle bs = emptyCell.getBoxStyle( ); if ( bs != BoxStyle.DEFAULT ) @@ -991,16 +990,16 @@ private CellArea createEmptyCell( CellArea upperCell, bs.setRightBorder( null ); bs.setBottomBorder( null ); } - + emptyCell.setHeight( 0 ); emptyCell.setRowSpan( rowSpan ); - + CellArea originalCell = upperCell; if ( upperCell instanceof DummyCell ) { originalCell = ( (DummyCell) upperCell ).getCell( ); } - + CellArea leftSideCellArea = null; if ( emptyCellColID > startCol ) { @@ -1039,10 +1038,10 @@ private CellArea createEmptyCell( CellArea upperCell, emptyCell.isDummy = true; return emptyCell; } - + /** * Creates dummy cell and updates its delta value. - * + * * @param upperCell * the upper cell. * @return the created dummy cell. @@ -1081,7 +1080,7 @@ private DummyCell createDummyCell( CellArea upperCell, RowArea lastRow ) /** * Updates the row height and the height of the cells in the row. - * + * * @param rowArea * @param height */ @@ -1136,13 +1135,13 @@ public CursorableList getRows( ) { return rows; } - + /* //---------debug - - + + // a method for debugging. - + public static void getInfo( IArea area, int offsetX, int offsetY ) { if( area instanceof CellArea ) @@ -1190,9 +1189,9 @@ private static void traverse( IArea area, int offsetX, int offsetY ) offsetX = offsetX - area.getX( ); offsetY = offsetY - area.getY( ); } - -*/ - - + +*/ + + } From e09556398936fbc02e07ccd27fd3a96bee23044f Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Fri, 25 Oct 2019 16:44:13 +0200 Subject: [PATCH 05/16] Updated the Spudsoft Excel Emitter to the latest release 0.8.0.201310230652 from Jim Talbut --- .../birt/emitters/excel/AreaBorders.java | 25 +- .../birt/emitters/excel/BirtStyle.java | 232 ++++++++---------- .../birt/emitters/excel/ExcelEmitter.java | 57 ++++- .../birt/emitters/excel/FontManager.java | 37 ++- .../birt/emitters/excel/HandlerState.java | 9 +- .../birt/emitters/excel/StyleManager.java | 120 +++++---- .../emitters/excel/StyleManagerHUtils.java | 31 +-- .../emitters/excel/StyleManagerUtils.java | 223 ++++++++++++----- .../emitters/excel/StyleManagerXUtils.java | 31 +-- .../emitters/excel/StylePropertyIndexes.java | 79 ++++++ .../birt/emitters/excel/XlsxEmitter.java | 7 +- .../excel/handlers/AbstractHandler.java | 8 +- .../handlers/AbstractRealListHandler.java | 22 +- .../AbstractRealTableCellHandler.java | 26 +- .../handlers/AbstractRealTableHandler.java | 62 ++++- .../handlers/AbstractRealTableRowHandler.java | 5 +- .../excel/handlers/CellContentHandler.java | 179 ++++++++------ .../excel/handlers/FlattenedListHandler.java | 9 + .../excel/handlers/FlattenedTableHandler.java | 17 +- .../handlers/NestedListContentHandler.java | 10 +- .../excel/handlers/NestedListHandler.java | 14 ++ .../excel/handlers/NestedTableHandler.java | 9 +- .../emitters/excel/handlers/PageHandler.java | 191 ++++++++++---- .../excel/handlers/StringCellHandler.java | 12 +- .../handlers/TopLevelContentHandler.java | 16 +- .../excel/handlers/TopLevelListHandler.java | 5 - .../excel/handlers/TopLevelTableHandler.java | 8 +- 27 files changed, 912 insertions(+), 532 deletions(-) create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StylePropertyIndexes.java diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/AreaBorders.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/AreaBorders.java index 3e27ab17ec0..0dfa14bea65 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/AreaBorders.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/AreaBorders.java @@ -13,7 +13,6 @@ package uk.co.spudsoft.birt.emitters.excel; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; import org.w3c.dom.css.CSSValue; @@ -51,18 +50,18 @@ public static AreaBorders createForMergedCells(int bottom, int left, int right, public static AreaBorders create(boolean isMergedCells, int bottom, int left, int right, int top, BirtStyle borderStyle) { - CSSValue borderStyleBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_STYLE ); - CSSValue borderWidthBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_WIDTH ); - CSSValue borderColourBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_COLOR ); - CSSValue borderStyleLeft = borderStyle.getProperty( StyleConstants.STYLE_BORDER_LEFT_STYLE ); - CSSValue borderWidthLeft = borderStyle.getProperty( StyleConstants.STYLE_BORDER_LEFT_WIDTH ); - CSSValue borderColourLeft = borderStyle.getProperty( StyleConstants.STYLE_BORDER_LEFT_COLOR ); - CSSValue borderStyleRight = borderStyle.getProperty( StyleConstants.STYLE_BORDER_RIGHT_STYLE ); - CSSValue borderWidthRight = borderStyle.getProperty( StyleConstants.STYLE_BORDER_RIGHT_WIDTH ); - CSSValue borderColourRight = borderStyle.getProperty( StyleConstants.STYLE_BORDER_RIGHT_COLOR ); - CSSValue borderStyleTop = borderStyle.getProperty( StyleConstants.STYLE_BORDER_TOP_STYLE ); - CSSValue borderWidthTop = borderStyle.getProperty( StyleConstants.STYLE_BORDER_TOP_WIDTH ); - CSSValue borderColourTop = borderStyle.getProperty( StyleConstants.STYLE_BORDER_TOP_COLOR ); + CSSValue borderStyleBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE ); + CSSValue borderWidthBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH ); + CSSValue borderColourBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR ); + CSSValue borderStyleLeft = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE ); + CSSValue borderWidthLeft = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH ); + CSSValue borderColourLeft = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR ); + CSSValue borderStyleRight = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE ); + CSSValue borderWidthRight = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH ); + CSSValue borderColourRight = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR ); + CSSValue borderStyleTop = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_TOP_STYLE ); + CSSValue borderWidthTop = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH ); + CSSValue borderColourTop = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_TOP_COLOR ); /* borderMsg.append( ", Bottom:" ).append( borderStyleBottom ).append( "/" ).append( borderWidthBottom ).append( "/" + borderColourBottom ); borderMsg.append( ", Left:" ).append( borderStyleLeft ).append( "/" ).append( borderWidthLeft ).append( "/" + borderColourLeft ); diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/BirtStyle.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/BirtStyle.java index 819b52d3432..eabfb9cc775 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/BirtStyle.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/BirtStyle.java @@ -14,14 +14,12 @@ package uk.co.spudsoft.birt.emitters.excel; -import java.util.BitSet; import java.util.Map; import org.eclipse.birt.report.engine.content.IContent; import org.eclipse.birt.report.engine.content.IStyle; import org.eclipse.birt.report.engine.css.dom.AbstractStyle; import org.eclipse.birt.report.engine.css.engine.CSSEngine; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.DataFormatValue; import org.eclipse.birt.report.engine.css.engine.value.FloatValue; import org.eclipse.birt.report.engine.css.engine.value.StringValue; @@ -33,75 +31,9 @@ public class BirtStyle { - public static final int NUMBER_OF_STYLES = StyleConstants.NUMBER_OF_STYLE + 1; - public static final int TEXT_ROTATION = StyleConstants.NUMBER_OF_STYLE; - - protected static final String cssProperties[] = { - "margin-left" - , "margin-right" - , "margin-top" - , "DATA_FORMAT" - , "border-right-color" - , "direction" - , "border-top-width" - , "padding-left" - , "border-right-width" - , "padding-bottom" - , "padding-top" - , "NUMBER_ALIGN" - , "padding-right" - , "CAN_SHRINK" - , "border-top-color" - , "background-repeat" - , "margin-bottom" - , "background-width" - , "background-height" - , "border-right-style" - , "border-bottom-color" - , "text-indent" - , "line-height" - , "border-bottom-width" - , "text-align" - , "background-color" - , "color" - , "overflow" - , "TEXT_LINETHROUGH" - , "border-left-color" - , "widows" - , "border-left-width" - , "border-bottom-style" - , "font-weight" - , "font-variant" - , "text-transform" - , "white-space" - , "TEXT_OVERLINE" - , "vertical-align" - , "BACKGROUND_POSITION_X" - , "border-left-style" - , "VISIBLE_FORMAT" - , "MASTER_PAGE" - , "orphans" - , "font-size" - , "font-style" - , "border-top-style" - , "page-break-before" - , "SHOW_IF_BLANK" - , "background-image" - , "BACKGROUND_POSITION_Y" - , "word-spacing" - , "background-attachment" - , "TEXT_UNDERLINE" - , "display" - , "font-family" - , "letter-spacing" - , "page-break-inside" - , "page-break-after" - - , "Rotation" - }; - + public static final int NUMBER_OF_STYLES = StylePropertyIndexes.NUMBER_OF_BIRT_PROPERTIES + 1; + public static final int TEXT_ROTATION = StylePropertyIndexes.NUMBER_OF_BIRT_PROPERTIES; - private IStyle elemStyle; private CSSValue[] propertyOverride = new CSSValue[ BirtStyle.NUMBER_OF_STYLES ]; private CSSEngine cssEngine; @@ -110,7 +42,7 @@ public BirtStyle( CSSEngine cssEngine ) { } public BirtStyle(IContent element) { - elemStyle = element.getComputedStyle(); + IStyle elemStyle = element.getComputedStyle(); if( elemStyle instanceof AbstractStyle ) { cssEngine = ((AbstractStyle)elemStyle).getCSSEngine(); @@ -128,14 +60,75 @@ public BirtStyle(IContent element) { int prop = StyleManager.COMPARE_CSS_PROPERTIES[ i ]; propertyOverride[ prop ] = elemStyle.getProperty( prop ); } - propertyOverride[ StyleConstants.STYLE_DATA_FORMAT ] = elemStyle.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + propertyOverride[ StylePropertyIndexes.STYLE_DATA_FORMAT ] = elemStyle.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); for( int i = 0; i < FontManager.COMPARE_CSS_PROPERTIES.length; ++i ) { int prop = FontManager.COMPARE_CSS_PROPERTIES[ i ]; propertyOverride[ prop ] = elemStyle.getProperty( prop ); } - } + + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + for( int i = 0; i < propertyOverride.length; ++i ) { + CSSValue value = propertyOverride[ i ]; + if( value != null ) { + if( value instanceof DataFormatValue ) { + result = prime * result + StyleManagerUtils.dataFormatHash( (DataFormatValue)value ); + } else { + String cssText = value.getCssText(); + if ( cssText != null ) { + result = prime * result + cssText.hashCode(); + } + } + } + } + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + BirtStyle other = (BirtStyle) obj; + + for( int i = 0; i < StyleManager.COMPARE_CSS_PROPERTIES.length; ++i ) { + int prop = StyleManager.COMPARE_CSS_PROPERTIES[ i ]; + CSSValue value1 = getProperty( prop ); + CSSValue value2 = other.getProperty( prop ); + if( ! StyleManagerUtils.objectsEqual( value1, value2 ) ) { + // System.out.println( "Differ on " + i + " because " + value1 + " != " + value2 ); + return false; + } + } + if( ! StyleManagerUtils.objectsEqual( getProperty( BirtStyle.TEXT_ROTATION ), other.getProperty( BirtStyle.TEXT_ROTATION ) ) ) { + // System.out.println( "Differ on BirtStyle.TEXT_ROTATION because " + getProperty( BirtStyle.TEXT_ROTATION ) + " != " + other.getProperty( BirtStyle.TEXT_ROTATION ) ); + return false; + } + + + // Number format + if( ! StyleManagerUtils.dataFormatsEquivalent( (DataFormatValue)getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ) + , (DataFormatValue)other.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ) ) ) { + // System.out.println( "Differ on DataFormat" ); + return false; + } + + // Font + if( ! FontManager.fontsEquivalent( this, other ) ) { + // System.out.println( "Differ on font" ); + return false; + } + return true; + } + private static Float extractRotation(IContent element) { Object generatorObject = element.getGenerateBy(); if( generatorObject instanceof ReportElementDesign ) { @@ -155,10 +148,7 @@ private static Float extractRotation(IContent element) { } public void setProperty( int propIndex, CSSValue newValue ) { - if( propertyOverride == null ) { - propertyOverride = new CSSValue[ BirtStyle.NUMBER_OF_STYLES ]; - } - propertyOverride[ propIndex ] = newValue; + propertyOverride[ propIndex ] = newValue; } public CSSValue getProperty( int propIndex ) { @@ -168,7 +158,7 @@ public CSSValue getProperty( int propIndex ) { && ( propertyOverride[ propIndex ] != null ) ) { return propertyOverride[ propIndex ]; } - if( ( elemStyle != null ) && ( propIndex < StyleConstants.NUMBER_OF_STYLE ) ) { + if( ( elemStyle != null ) && ( propIndex < StylePropertyIndexes.NUMBER_OF_STYLE ) ) { return elemStyle.getProperty( propIndex ); } else { return null; @@ -177,18 +167,11 @@ public CSSValue getProperty( int propIndex ) { } public void setFloat( int propIndex, short units, float newValue ) { - if( propertyOverride == null ) { - propertyOverride = new CSSValue[ BirtStyle.NUMBER_OF_STYLES ]; - } propertyOverride[ propIndex ] = new FloatValue( units, newValue ); } public void parseString( int propIndex, String newValue ) { - if( propertyOverride == null ) { - propertyOverride = new CSSValue[ BirtStyle.NUMBER_OF_STYLES ]; - } - - if( propIndex < StyleConstants.NUMBER_OF_STYLE ) { + if( propIndex < StylePropertyIndexes.NUMBER_OF_BIRT_PROPERTIES ) { propertyOverride[ propIndex ] = cssEngine.parsePropertyValue( propIndex , newValue ); } else { propertyOverride[ propIndex ] = new StringValue( StringValue.CSS_STRING, newValue); @@ -224,25 +207,25 @@ protected BirtStyle clone() { return result; } - private static final BitSet SPECIAL_OVERLAY_PROPERTIES = PrepareSpecialOverlayProperties(); + private static final boolean[] SPECIAL_OVERLAY_PROPERTIES = PrepareSpecialOverlayProperties(); - private static BitSet PrepareSpecialOverlayProperties() { - BitSet result = new BitSet( BirtStyle.NUMBER_OF_STYLES ); - result.set( StyleConstants.STYLE_BACKGROUND_COLOR ); - result.set( StyleConstants.STYLE_BORDER_BOTTOM_STYLE ); - result.set( StyleConstants.STYLE_BORDER_BOTTOM_WIDTH ); - result.set( StyleConstants.STYLE_BORDER_BOTTOM_COLOR ); - result.set( StyleConstants.STYLE_BORDER_LEFT_STYLE ); - result.set( StyleConstants.STYLE_BORDER_LEFT_WIDTH ); - result.set( StyleConstants.STYLE_BORDER_LEFT_COLOR ); - result.set( StyleConstants.STYLE_BORDER_RIGHT_STYLE ); - result.set( StyleConstants.STYLE_BORDER_RIGHT_WIDTH ); - result.set( StyleConstants.STYLE_BORDER_RIGHT_COLOR ); - result.set( StyleConstants.STYLE_BORDER_TOP_STYLE ); - result.set( StyleConstants.STYLE_BORDER_TOP_WIDTH ); - result.set( StyleConstants.STYLE_BORDER_TOP_COLOR ); - result.set( StyleConstants.STYLE_VERTICAL_ALIGN ); - result.set( StyleConstants.STYLE_DATA_FORMAT ); + private static boolean[] PrepareSpecialOverlayProperties() { + boolean[] result = new boolean[ BirtStyle.NUMBER_OF_STYLES ]; + result[ StylePropertyIndexes.STYLE_BACKGROUND_COLOR ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_TOP_STYLE ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH ] = true; + result[ StylePropertyIndexes.STYLE_BORDER_TOP_COLOR ] = true; + result[ StylePropertyIndexes.STYLE_VERTICAL_ALIGN ] = true; + result[ StylePropertyIndexes.STYLE_DATA_FORMAT ] = true; return result; } @@ -265,45 +248,40 @@ public void overlay( IContent element ) { // System.out.println( "overlay: Before - " + this.toString() ); IStyle style = element.getComputedStyle(); - for(int propIndex = 0; propIndex < StyleConstants.NUMBER_OF_STYLE; ++propIndex ) { - if( ! SPECIAL_OVERLAY_PROPERTIES.get(propIndex) ) { + for(int propIndex = 0; propIndex < StylePropertyIndexes.NUMBER_OF_BIRT_PROPERTIES; ++propIndex ) { + if( ! SPECIAL_OVERLAY_PROPERTIES[ propIndex ] ) { CSSValue overlayValue = style.getProperty( propIndex ); - CSSValue localValue = getProperty( propIndex ); - if( ( overlayValue != null ) && ! overlayValue.equals( localValue ) ) { + if( overlayValue != null ) { setProperty( propIndex, overlayValue ); } } } // Background colour, only overlay if not null and not transparent - CSSValue overlayBgColour = style.getProperty( StyleConstants.STYLE_BACKGROUND_COLOR ); - CSSValue localBgColour = getProperty( StyleConstants.STYLE_BACKGROUND_COLOR ); + CSSValue overlayBgColour = style.getProperty( StylePropertyIndexes.STYLE_BACKGROUND_COLOR ); if( ( overlayBgColour != null ) && ( ! CSSConstants.CSS_TRANSPARENT_VALUE.equals( overlayBgColour.getCssText() ) ) - && ( ! overlayBgColour.equals( localBgColour ) ) ) { - setProperty( StyleConstants.STYLE_BACKGROUND_COLOR, overlayBgColour ); + ) { + setProperty( StylePropertyIndexes.STYLE_BACKGROUND_COLOR, overlayBgColour ); } // Borders, only overlay if all three components are not null - and then overlay all three - overlayBorder( style, StyleConstants.STYLE_BORDER_BOTTOM_STYLE, StyleConstants.STYLE_BORDER_BOTTOM_WIDTH, StyleConstants.STYLE_BORDER_BOTTOM_COLOR ); - overlayBorder( style, StyleConstants.STYLE_BORDER_LEFT_STYLE, StyleConstants.STYLE_BORDER_LEFT_WIDTH, StyleConstants.STYLE_BORDER_LEFT_COLOR ); - overlayBorder( style, StyleConstants.STYLE_BORDER_RIGHT_STYLE, StyleConstants.STYLE_BORDER_RIGHT_WIDTH, StyleConstants.STYLE_BORDER_RIGHT_COLOR ); - overlayBorder( style, StyleConstants.STYLE_BORDER_TOP_STYLE, StyleConstants.STYLE_BORDER_TOP_WIDTH, StyleConstants.STYLE_BORDER_TOP_COLOR ); + overlayBorder( style, StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE, StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH, StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR ); + overlayBorder( style, StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE, StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH, StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR ); + overlayBorder( style, StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE, StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH, StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR ); + overlayBorder( style, StylePropertyIndexes.STYLE_BORDER_TOP_STYLE, StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH, StylePropertyIndexes.STYLE_BORDER_TOP_COLOR ); // Vertical align, not computed safely, so only check immediate style - CSSValue verticalAlign = element.getStyle().getProperty( StyleConstants.STYLE_VERTICAL_ALIGN ); + CSSValue verticalAlign = element.getStyle().getProperty( StylePropertyIndexes.STYLE_VERTICAL_ALIGN ); if( verticalAlign != null ) { - CSSValue localValue = getProperty( StyleConstants.STYLE_VERTICAL_ALIGN ); - if( ! verticalAlign.equals( localValue ) ) { - setProperty( StyleConstants.STYLE_VERTICAL_ALIGN, verticalAlign ); - } + setProperty( StylePropertyIndexes.STYLE_VERTICAL_ALIGN, verticalAlign ); } // Data format - CSSValue overlayDataFormat = style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); - CSSValue localDataFormat = getProperty( StyleConstants.STYLE_DATA_FORMAT ); + CSSValue overlayDataFormat = style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); + CSSValue localDataFormat = getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( ! StyleManagerUtils.dataFormatsEquivalent((DataFormatValue)overlayDataFormat, (DataFormatValue)localDataFormat) ) { - setProperty( StyleConstants.STYLE_DATA_FORMAT, StyleManagerUtils.cloneDataFormatValue((DataFormatValue)overlayDataFormat) ); + setProperty( StylePropertyIndexes.STYLE_DATA_FORMAT, StyleManagerUtils.cloneDataFormatValue((DataFormatValue)overlayDataFormat) ); } // Rotation @@ -311,7 +289,7 @@ public void overlay( IContent element ) { if( rotation != null ) { setFloat(TEXT_ROTATION, CSSPrimitiveValue.CSS_DEG, rotation); } - + // System.out.println( "overlay: After - " + this.toString() ); } @@ -322,9 +300,9 @@ public String toString() { CSSValue val = getProperty( i ); if( val != null ) { try { - result.append(cssProperties[i]).append(':').append(val.getCssText()).append("; "); + result.append(StylePropertyIndexes.getPropertyName(i)).append(':').append(val.getCssText()).append("; "); } catch(Exception ex) { - result.append(cssProperties[i]).append(":{").append(ex.getMessage()).append("}; "); + result.append(StylePropertyIndexes.getPropertyName(i)).append(":{").append(ex.getMessage()).append("}; "); } } } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/ExcelEmitter.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/ExcelEmitter.java index c8642502c55..5b5bb9f47ef 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/ExcelEmitter.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/ExcelEmitter.java @@ -22,6 +22,7 @@ import java.net.URL; import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.report.engine.api.IRenderOption; import org.eclipse.birt.report.engine.content.IAutoTextContent; @@ -57,6 +58,8 @@ public abstract class ExcelEmitter implements IContentEmitter { public static final String REMOVE_BLANK_ROWS = "ExcelEmitter.RemoveBlankRows"; public static final String ROTATION_PROP = "ExcelEmitter.Rotation"; public static final String FORCEAUTOCOLWIDTHS_PROP = "ExcelEmitter.ForceAutoColWidths"; + public static final String AUTO_COL_WIDTHS_HEADER = "ExcelEmitter.AutoColWidthsIncludeTableHeader"; + public static final String AUTO_COL_WIDTHS_FOOTER = "ExcelEmitter.AutoColWidthsIncludeTableFooter"; public static final String SINGLE_SHEET = "ExcelEmitter.SingleSheet"; public static final String SINGLE_SHEET_PAGE_BREAKS = "ExcelEmitter.SingleSheetWithPageBreaks"; public static final String PRINT_BREAK_AFTER = "ExcelEmitter.InsertPrintBreakAfter"; @@ -70,6 +73,7 @@ public abstract class ExcelEmitter implements IContentEmitter { public static final String BLANK_ROW_AFTER_TOP_LEVEL_TABLE = "ExcelEmitter.BlankRowAfterTopLevelTable"; public static final String SPANNED_ROW_HEIGHT = "ExcelEmitter.SpannedRowHeight"; public static final String NEST_TABLE_IN_LAST_CELL = "ExcelEmitter.NestedTableInLastCell"; + public static final String NO_STYLES = "ExcelEmitter.NoStyles"; public static final int SPANNED_ROW_HEIGHT_SPREAD = 0; public static final int SPANNED_ROW_HEIGHT_FIRST = 1; public static final int SPANNED_ROW_HEIGHT_IGNORED = 2; @@ -83,7 +87,13 @@ public abstract class ExcelEmitter implements IContentEmitter { public static final String DISPLAYROWCOLHEADINGS_PROP = "ExcelEmitter.DisplayRowColHeadings"; public static final String DISPLAYZEROS_PROP = "ExcelEmitter.DisplayZeros"; + public static final String VALUE_AS_FORMULA = "ExcelEmitter.ValueAsFormula"; + public static final String FORMULA = "ExcelEmitter.Formula"; + public static final String TEMPLATE_FILE = "ExcelEmitter.TemplateFile"; + public static final String FORCE_RECALCULATION = "ExcelEmitter.ForceRecalculation"; + + public static final String EXTRACT_MODE = "ExcelEmitter.ExtractMode"; /** * Logger. @@ -128,6 +138,11 @@ public abstract class ExcelEmitter implements IContentEmitter { */ private StyleManagerUtils.Factory utilsFactory; + /** + * Extract mode is enabled + */ + protected boolean extractMode; + protected ExcelEmitter(StyleManagerUtils.Factory utilsFactory) { this.utilsFactory = utilsFactory; try { @@ -163,6 +178,12 @@ protected ExcelEmitter(StyleManagerUtils.Factory utilsFactory) { */ protected abstract Workbook openWorkbook( File templateFile ) throws IOException; + /** + * Return true if the emitter is in ExtractMode + */ + public boolean isExtractMode() { + return extractMode; + } public void initialize( IEmitterServices service ) throws BirtException { renderOptions = service.getRenderOption(); @@ -183,18 +204,25 @@ public void initialize( IEmitterServices service ) throws BirtException { public void start( IReportContent report ) throws BirtException { log.addPrefix('>'); - log.info( 0, "start:" + report.toString(), null); + log.info( 0, "start:" + report.getTitle(), null); - String templatePath = EmitterServices.stringOption( renderOptions, report, TEMPLATE_FILE, null ); + extractMode = EmitterServices.booleanOption( renderOptions, report, EXTRACT_MODE, false ); + String templatePath = extractMode ? null : EmitterServices.stringOption( renderOptions, report, TEMPLATE_FILE, null ); Workbook wb; if( templatePath != null ) { URL templateURL = report.getReportContext().getResource( templatePath ); + if( templateURL == null ) { + throw new BirtException( EmitterServices.getPluginName() + , "Unable locate template resource for " + templatePath + , null + ); + } File templateFile; try { templateFile = new File( templateURL.toURI() ); } catch( URISyntaxException ex ) { throw new BirtException( EmitterServices.getPluginName() - , "Unable locate template resource for " + templatePath + , "Unable locate template file for " + templatePath , ex ); } @@ -210,6 +238,10 @@ public void start( IReportContent report ) throws BirtException { wb = createWorkbook(); } + if( EmitterServices.booleanOption( renderOptions, report, ExcelEmitter.FORCE_RECALCULATION, false ) ) { + wb.setForceFormulaRecalculation(true); + } + CSSEngine cssEngine = report.getRoot().getCSSEngine(); StyleManagerUtils smu = utilsFactory.create(log); @@ -262,9 +294,9 @@ public void end( IReportContent report ) throws BirtException { ex.printStackTrace(); throw new BirtException( EmitterServices.getPluginName() - , "Unable to save file (\"{}\")" - , new Object[] { reportOutputFilename } - , null + , reportOutputStream == null ? + "Unable to save file (\"" + reportOutputFilename + "\")" + : "Unable to save file to stream" , ex ); } finally { @@ -275,6 +307,15 @@ public void end( IReportContent report ) throws BirtException { log.debug("ex:", ex.toString()); } } + + if (handlerState.getWb() instanceof SXSSFWorkbook) { + // dispose SXSSFWorkbook to let it removing temporary files + SXSSFWorkbook wb = (SXSSFWorkbook) handlerState.getWb(); + if (!wb.dispose()) { + log.error(0, "Failed to dispose SXSSFWorkbook.", new Exception("SXSSFWorkbook.dispose() has returned false.")); + } + } + handlerState = null; reportOutputFilename = null; reportOutputStream = null; @@ -398,7 +439,9 @@ public void startForeign( IForeignContent foreign ) throws BirtException { public void startImage( IImageContent image ) throws BirtException { log.debug( handlerState, "startImage: " ); - handlerState.getHandler().emitImage(handlerState,image); + if( ! extractMode ) { + handlerState.getHandler().emitImage(handlerState,image); + } } public void startContent( IContent content ) throws BirtException { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/FontManager.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/FontManager.java index dc56773b71a..4e41e848b80 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/FontManager.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/FontManager.java @@ -22,7 +22,6 @@ import org.apache.poi.ss.usermodel.Workbook; import org.eclipse.birt.report.engine.content.IStyle; import org.eclipse.birt.report.engine.css.engine.CSSEngine; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.ListValue; import org.eclipse.birt.report.engine.css.engine.value.StringValue; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; @@ -106,12 +105,12 @@ private static String cleanupQuotes( CSSValue value ) { } static int COMPARE_CSS_PROPERTIES[] = { - StyleConstants.STYLE_FONT_FAMILY, - StyleConstants.STYLE_FONT_SIZE, - StyleConstants.STYLE_FONT_WEIGHT, - StyleConstants.STYLE_FONT_STYLE, - StyleConstants.STYLE_TEXT_UNDERLINE, - StyleConstants.STYLE_COLOR, + StylePropertyIndexes.STYLE_FONT_FAMILY, + StylePropertyIndexes.STYLE_FONT_SIZE, + StylePropertyIndexes.STYLE_FONT_WEIGHT, + StylePropertyIndexes.STYLE_FONT_STYLE, + StylePropertyIndexes.STYLE_TEXT_UNDERLINE, + StylePropertyIndexes.STYLE_COLOR, }; /** @@ -149,33 +148,33 @@ private Font createFont(BirtStyle birtStyle) { Font font = workbook.createFont(); // Family - String fontName = smu.poiFontNameFromBirt(cleanupQuotes(birtStyle.getProperty( StyleConstants.STYLE_FONT_FAMILY ))); + String fontName = smu.poiFontNameFromBirt(cleanupQuotes(birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_FAMILY ))); if( fontName == null ) { fontName = "Calibri"; } font.setFontName(fontName); // Size - short fontSize = smu.fontSizeInPoints(cleanupQuotes(birtStyle.getProperty( StyleConstants.STYLE_FONT_SIZE ))); + short fontSize = smu.fontSizeInPoints(cleanupQuotes(birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_SIZE ))); if(fontSize > 0) { font.setFontHeightInPoints(fontSize); } // Weight - short fontWeight = smu.poiFontWeightFromBirt(cleanupQuotes(birtStyle.getProperty( StyleConstants.STYLE_FONT_WEIGHT ))); + short fontWeight = smu.poiFontWeightFromBirt(cleanupQuotes(birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_WEIGHT ))); if(fontWeight > 0) { font.setBoldweight(fontWeight); } // Style - String fontStyle = cleanupQuotes(birtStyle.getProperty( StyleConstants.STYLE_FONT_STYLE ) ); + String fontStyle = cleanupQuotes(birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_STYLE ) ); if( CSSConstants.CSS_ITALIC_VALUE.equals(fontStyle) || CSSConstants.CSS_OBLIQUE_VALUE.equals(fontStyle)) { font.setItalic(true); } // Underline - String fontUnderline = cleanupQuotes(birtStyle.getProperty( StyleConstants.STYLE_TEXT_UNDERLINE ) ); + String fontUnderline = cleanupQuotes(birtStyle.getProperty( StylePropertyIndexes.STYLE_TEXT_UNDERLINE ) ); if( CSSConstants.CSS_UNDERLINE_VALUE.equals(fontUnderline) ) { font.setUnderline(FontUnderline.SINGLE.getByteValue()); } // Colour - smu.addColourToFont( workbook, font, cleanupQuotes( birtStyle.getProperty( StyleConstants.STYLE_COLOR ) ) ); + smu.addColourToFont( workbook, font, cleanupQuotes( birtStyle.getProperty( StylePropertyIndexes.STYLE_COLOR ) ) ); fonts.add(new FontPair(birtStyle, font)); return font; @@ -211,12 +210,12 @@ public Font getFont( BirtStyle birtStyle ) { return getDefaultFont(); } - if( ( birtStyle.getProperty( StyleConstants.STYLE_FONT_FAMILY ) == null ) - && ( birtStyle.getProperty( StyleConstants.STYLE_FONT_SIZE ) == null ) - && ( birtStyle.getProperty( StyleConstants.STYLE_FONT_WEIGHT ) == null ) - && ( birtStyle.getProperty( StyleConstants.STYLE_FONT_STYLE ) == null ) - && ( birtStyle.getProperty( StyleConstants.STYLE_TEXT_UNDERLINE ) == null ) - && ( birtStyle.getProperty( StyleConstants.STYLE_COLOR ) == null ) + if( ( birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_FAMILY ) == null ) + && ( birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_SIZE ) == null ) + && ( birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_WEIGHT ) == null ) + && ( birtStyle.getProperty( StylePropertyIndexes.STYLE_FONT_STYLE ) == null ) + && ( birtStyle.getProperty( StylePropertyIndexes.STYLE_TEXT_UNDERLINE ) == null ) + && ( birtStyle.getProperty( StylePropertyIndexes.STYLE_COLOR ) == null ) ) { return getDefaultFont(); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/HandlerState.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/HandlerState.java index 59f262d3d38..f667c4c8f98 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/HandlerState.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/HandlerState.java @@ -22,7 +22,6 @@ import org.apache.poi.ss.usermodel.Workbook; import org.eclipse.birt.report.engine.api.IRenderOption; import org.eclipse.birt.report.engine.api.ReportEngine; -import org.eclipse.birt.report.engine.emitter.IContentEmitter; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; import uk.co.spudsoft.birt.emitters.excel.handlers.IHandler; @@ -32,7 +31,7 @@ public class HandlerState { /** * The emitter itself */ - private IContentEmitter emitter; + private ExcelEmitter emitter; /** * Logger. */ @@ -74,7 +73,7 @@ public class HandlerState { */ public List images = new ArrayList(); /** - * Possible name for the current sheet + * Possible rename for the current sheet */ public String sheetName; /** @@ -128,7 +127,7 @@ public class HandlerState { * @param wb * @param sm */ - public HandlerState(IContentEmitter emitter, Logger log, StyleManagerUtils smu, Workbook wb, StyleManager sm, IRenderOption renderOptions) { + public HandlerState(ExcelEmitter emitter, Logger log, StyleManagerUtils smu, Workbook wb, StyleManager sm, IRenderOption renderOptions) { super(); this.emitter = emitter; this.log = log; @@ -138,7 +137,7 @@ public HandlerState(IContentEmitter emitter, Logger log, StyleManagerUtils smu, this.renderOptions = renderOptions; } - public IContentEmitter getEmitter() { + public ExcelEmitter getEmitter() { return emitter; } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManager.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManager.java index 54003a52892..c26e58f21c9 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManager.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManager.java @@ -13,9 +13,10 @@ package uk.co.spudsoft.birt.emitters.excel; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; @@ -23,8 +24,6 @@ import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder.BorderSide; import org.eclipse.birt.report.engine.content.IStyle; import org.eclipse.birt.report.engine.css.engine.CSSEngine; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; -import org.eclipse.birt.report.engine.css.engine.value.DataFormatValue; import org.eclipse.birt.report.engine.css.engine.value.FloatValue; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; import org.w3c.dom.css.CSSValue; @@ -42,7 +41,7 @@ public class StyleManager { * StylePair maintains the relationship between a BIRT style and a POI style. * @author Jim Talbut * - */ + * private class StylePair { public BirtStyle birtStyle; public CellStyle poiStyle; @@ -51,13 +50,15 @@ public StylePair(BirtStyle birtStyle, CellStyle poiStyle) { this.birtStyle = birtStyle; this.poiStyle = poiStyle; } - } + }*/ private Workbook workbook; private FontManager fm; - private List styles = new ArrayList(); + // private List styles = new ArrayList(); + private Map< BirtStyle, CellStyle > styleMap = new HashMap< BirtStyle, CellStyle >(); private StyleManagerUtils smu; private CSSEngine cssEngine; + @SuppressWarnings("unused") private Logger log; private Locale locale; @@ -92,22 +93,22 @@ public CSSEngine getCssEngine() { static int COMPARE_CSS_PROPERTIES[] = { - StyleConstants.STYLE_TEXT_ALIGN, - StyleConstants.STYLE_BACKGROUND_COLOR, - StyleConstants.STYLE_BORDER_TOP_STYLE, - StyleConstants.STYLE_BORDER_TOP_WIDTH, - StyleConstants.STYLE_BORDER_TOP_COLOR, - StyleConstants.STYLE_BORDER_LEFT_STYLE, - StyleConstants.STYLE_BORDER_LEFT_WIDTH, - StyleConstants.STYLE_BORDER_LEFT_COLOR, - StyleConstants.STYLE_BORDER_RIGHT_STYLE, - StyleConstants.STYLE_BORDER_RIGHT_WIDTH, - StyleConstants.STYLE_BORDER_RIGHT_COLOR, - StyleConstants.STYLE_BORDER_BOTTOM_STYLE, - StyleConstants.STYLE_BORDER_BOTTOM_WIDTH, - StyleConstants.STYLE_BORDER_BOTTOM_COLOR, - StyleConstants.STYLE_WHITE_SPACE, - StyleConstants.STYLE_VERTICAL_ALIGN, + StylePropertyIndexes.STYLE_TEXT_ALIGN, + StylePropertyIndexes.STYLE_BACKGROUND_COLOR, + StylePropertyIndexes.STYLE_BORDER_TOP_STYLE, + StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH, + StylePropertyIndexes.STYLE_BORDER_TOP_COLOR, + StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE, + StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH, + StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR, + StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE, + StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH, + StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR, + StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE, + StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH, + StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR, + StylePropertyIndexes.STYLE_WHITE_SPACE, + StylePropertyIndexes.STYLE_VERTICAL_ALIGN, }; /** @@ -120,12 +121,12 @@ public CSSEngine getCssEngine() { * The second BIRT style to be compared. * @return * true if style1 and style2 would produce identical CellStyles if passed to createStyle. - */ + * private boolean stylesEquivalent( BirtStyle style1, BirtStyle style2) { // System.out.println( "style1: " + style1 ); // System.out.println( "style2: " + style2 ); - + for( int i = 0; i < COMPARE_CSS_PROPERTIES.length; ++i ) { int prop = COMPARE_CSS_PROPERTIES[ i ]; CSSValue value1 = style1.getProperty( prop ); @@ -142,8 +143,8 @@ private boolean stylesEquivalent( BirtStyle style1, BirtStyle style2) { // Number format - if( ! StyleManagerUtils.dataFormatsEquivalent( (DataFormatValue)style1.getProperty( StyleConstants.STYLE_DATA_FORMAT ) - , (DataFormatValue)style2.getProperty( StyleConstants.STYLE_DATA_FORMAT ) ) ) { + if( ! StyleManagerUtils.dataFormatsEquivalent( (DataFormatValue)style1.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ) + , (DataFormatValue)style2.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ) ) ) { // System.out.println( "Differ on DataFormat" ); return false; } @@ -154,7 +155,7 @@ private boolean stylesEquivalent( BirtStyle style1, BirtStyle style2) { return false; } return true; - } + }*/ /** * Create a new POI CellStyle based upon a BIRT style. @@ -171,29 +172,29 @@ private CellStyle createStyle( BirtStyle birtStyle ) { poiStyle.setFont(font); } // Alignment - poiStyle.setAlignment(smu.poiAlignmentFromBirtAlignment(birtStyle.getString( StyleConstants.STYLE_TEXT_ALIGN ))); + poiStyle.setAlignment(smu.poiAlignmentFromBirtAlignment(birtStyle.getString( StylePropertyIndexes.STYLE_TEXT_ALIGN ))); // Background colour - smu.addBackgroundColourToStyle(workbook, poiStyle, birtStyle.getString( StyleConstants.STYLE_BACKGROUND_COLOR )); + smu.addBackgroundColourToStyle(workbook, poiStyle, birtStyle.getString( StylePropertyIndexes.STYLE_BACKGROUND_COLOR )); // Top border - smu.applyBorderStyle(workbook, poiStyle, BorderSide.TOP, birtStyle.getProperty(StyleConstants.STYLE_BORDER_TOP_COLOR), birtStyle.getProperty(StyleConstants.STYLE_BORDER_TOP_STYLE), birtStyle.getProperty(StyleConstants.STYLE_BORDER_TOP_WIDTH)); + smu.applyBorderStyle(workbook, poiStyle, BorderSide.TOP, birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_TOP_COLOR), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_TOP_STYLE), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH)); // Left border - smu.applyBorderStyle(workbook, poiStyle, BorderSide.LEFT, birtStyle.getProperty(StyleConstants.STYLE_BORDER_LEFT_COLOR), birtStyle.getProperty(StyleConstants.STYLE_BORDER_LEFT_STYLE), birtStyle.getProperty(StyleConstants.STYLE_BORDER_LEFT_WIDTH)); + smu.applyBorderStyle(workbook, poiStyle, BorderSide.LEFT, birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH)); // Right border - smu.applyBorderStyle(workbook, poiStyle, BorderSide.RIGHT, birtStyle.getProperty(StyleConstants.STYLE_BORDER_RIGHT_COLOR), birtStyle.getProperty(StyleConstants.STYLE_BORDER_RIGHT_STYLE), birtStyle.getProperty(StyleConstants.STYLE_BORDER_RIGHT_WIDTH)); + smu.applyBorderStyle(workbook, poiStyle, BorderSide.RIGHT, birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH)); // Bottom border - smu.applyBorderStyle(workbook, poiStyle, BorderSide.BOTTOM, birtStyle.getProperty(StyleConstants.STYLE_BORDER_BOTTOM_COLOR), birtStyle.getProperty(StyleConstants.STYLE_BORDER_BOTTOM_STYLE), birtStyle.getProperty(StyleConstants.STYLE_BORDER_BOTTOM_WIDTH)); + smu.applyBorderStyle(workbook, poiStyle, BorderSide.BOTTOM, birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE), birtStyle.getProperty(StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH)); // Number format smu.applyNumberFormat(workbook, birtStyle, poiStyle, locale); // Whitespace/wrap - if( CSSConstants.CSS_PRE_VALUE.equals( birtStyle.getString( StyleConstants.STYLE_WHITE_SPACE ) ) ) { + if( CSSConstants.CSS_PRE_VALUE.equals( birtStyle.getString( StylePropertyIndexes.STYLE_WHITE_SPACE ) ) ) { poiStyle.setWrapText( true ); } // Vertical alignment - if( CSSConstants.CSS_TOP_VALUE.equals( birtStyle.getString( StyleConstants.STYLE_VERTICAL_ALIGN ) ) ) { + if( CSSConstants.CSS_TOP_VALUE.equals( birtStyle.getString( StylePropertyIndexes.STYLE_VERTICAL_ALIGN ) ) ) { poiStyle.setVerticalAlignment( CellStyle.VERTICAL_TOP ); - } else if ( CSSConstants.CSS_MIDDLE_VALUE.equals( birtStyle.getString( StyleConstants.STYLE_VERTICAL_ALIGN ) ) ) { + } else if ( CSSConstants.CSS_MIDDLE_VALUE.equals( birtStyle.getString( StylePropertyIndexes.STYLE_VERTICAL_ALIGN ) ) ) { poiStyle.setVerticalAlignment( CellStyle.VERTICAL_CENTER ); - } else if ( CSSConstants.CSS_BOTTOM_VALUE.equals( birtStyle.getString( StyleConstants.STYLE_VERTICAL_ALIGN ) ) ) { + } else if ( CSSConstants.CSS_BOTTOM_VALUE.equals( birtStyle.getString( StylePropertyIndexes.STYLE_VERTICAL_ALIGN ) ) ) { poiStyle.setVerticalAlignment( CellStyle.VERTICAL_BOTTOM ); } // Rotation @@ -202,25 +203,22 @@ private CellStyle createStyle( BirtStyle birtStyle ) { poiStyle.setRotation( (short) ((FloatValue)rotation).getFloatValue() ); } - styles.add(new StylePair( birtStyle.clone(), poiStyle ) ); + styleMap.put( birtStyle, poiStyle ); return poiStyle; } public CellStyle getStyle( BirtStyle birtStyle ) { - for(StylePair stylePair : styles) { - if(stylesEquivalent(birtStyle, stylePair.birtStyle)) { - // System.err.println( "Equivalent :\n\t" + birtStyle + "\n\t" + stylePair.birtStyle ); - return stylePair.poiStyle; - } + CellStyle poiStyle = styleMap.get(birtStyle); + if( poiStyle == null ) { + poiStyle = createStyle( birtStyle ); } - - return createStyle(birtStyle); + return poiStyle; } private BirtStyle birtStyleFromCellStyle( CellStyle source ) { - for(StylePair stylePair : styles) { - if( source.equals(stylePair.poiStyle) ) { - return stylePair.birtStyle.clone(); + for( Entry< BirtStyle, CellStyle > stylePair : styleMap.entrySet() ) { + if( source.equals(stylePair.getValue()) ) { + return stylePair.getKey().clone(); } } @@ -267,24 +265,24 @@ public CellStyle getStyleWithBorders( CellStyle source BirtStyle birtStyle = birtStyleFromCellStyle( source ); if( ( borderStyleBottom != null ) && ( borderWidthBottom != null ) && ( borderColourBottom != null ) ){ - birtStyle.setProperty( StyleConstants.STYLE_BORDER_BOTTOM_STYLE, borderStyleBottom ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_BOTTOM_WIDTH, borderWidthBottom ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_BOTTOM_COLOR, borderColourBottom ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE, borderStyleBottom ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH, borderWidthBottom ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR, borderColourBottom ); } if( ( borderStyleLeft != null ) && ( borderWidthLeft != null ) && ( borderColourLeft != null ) ){ - birtStyle.setProperty( StyleConstants.STYLE_BORDER_LEFT_STYLE, borderStyleLeft ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_LEFT_WIDTH, borderWidthLeft ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_LEFT_COLOR, borderColourLeft ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE, borderStyleLeft ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH, borderWidthLeft ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR, borderColourLeft ); } if( ( borderStyleRight != null ) && ( borderWidthRight != null ) && ( borderColourRight != null ) ){ - birtStyle.setProperty( StyleConstants.STYLE_BORDER_RIGHT_STYLE, borderStyleRight ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_RIGHT_WIDTH, borderWidthRight ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_RIGHT_COLOR, borderColourRight ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE, borderStyleRight ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH, borderWidthRight ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR, borderColourRight ); } if( ( borderStyleTop != null ) && ( borderWidthTop != null ) && ( borderColourTop != null ) ){ - birtStyle.setProperty( StyleConstants.STYLE_BORDER_TOP_STYLE, borderStyleTop ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_TOP_WIDTH, borderWidthTop ); - birtStyle.setProperty( StyleConstants.STYLE_BORDER_TOP_COLOR, borderColourTop ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_TOP_STYLE, borderStyleTop ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH, borderWidthTop ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_TOP_COLOR, borderColourTop ); } CellStyle newStyle = getStyle( birtStyle ); diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerHUtils.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerHUtils.java index 3734eef682d..85a0b20386f 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerHUtils.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerHUtils.java @@ -22,13 +22,10 @@ import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.RichTextString; -import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder.BorderSide; -import org.eclipse.birt.report.engine.content.IPageContent; import org.eclipse.birt.report.engine.content.IStyle; import org.eclipse.birt.report.engine.css.dom.AreaStyle; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.ir.DimensionType; import org.eclipse.birt.report.model.api.util.ColorUtil; import org.w3c.dom.css.CSSValue; @@ -224,7 +221,7 @@ public void addBackgroundColourToStyle(Workbook workbook, CellStyle style, Strin public Font correctFontColorIfBackground(FontManager fm, Workbook wb, BirtStyle birtStyle, Font font) { HSSFPalette palette = ((HSSFWorkbook)wb).getCustomPalette(); - CSSValue bgColour = birtStyle.getProperty( StyleConstants.STYLE_BACKGROUND_COLOR ); + CSSValue bgColour = birtStyle.getProperty( StylePropertyIndexes.STYLE_BACKGROUND_COLOR ); int bgRgb[] = parseColour( bgColour == null ? null : bgColour.getCssText(), "white" ); short fgRgb[] = HSSFColor.BLACK.triplet; @@ -258,30 +255,4 @@ public int anchorDyFromPoints( float height, float rowHeight ) { return (int)( 255.0 * height / rowHeight ); } - @Override - public void prepareMarginDimensions(Sheet sheet, IPageContent page) { - double headerHeight = 0.5; - double footerHeight = 0.5; - if( ( page.getHeaderHeight() != null ) && isAbsolute( page.getHeaderHeight() ) ) { - headerHeight = page.getHeaderHeight().convertTo(DimensionType.UNITS_IN); - sheet.getPrintSetup().setHeaderMargin(headerHeight); - } - if( ( page.getFooterHeight() != null ) && isAbsolute( page.getFooterHeight() ) ) { - footerHeight = page.getFooterHeight().convertTo(DimensionType.UNITS_IN); - sheet.getPrintSetup().setFooterMargin(footerHeight); - } - if( ( page.getMarginBottom() != null ) && isAbsolute( page.getMarginBottom() ) ) { - sheet.setMargin(Sheet.BottomMargin, footerHeight + page.getMarginBottom().convertTo(DimensionType.UNITS_IN)); - } - if( ( page.getMarginLeft() != null ) && isAbsolute( page.getMarginLeft() ) ) { - sheet.setMargin(Sheet.LeftMargin, page.getMarginLeft().convertTo(DimensionType.UNITS_IN)); - } - if( ( page.getMarginRight() != null ) && isAbsolute( page.getMarginRight() ) ) { - sheet.setMargin(Sheet.RightMargin, page.getMarginRight().convertTo(DimensionType.UNITS_IN)); - } - if( ( page.getMarginTop() != null ) && isAbsolute( page.getMarginTop() ) ) { - sheet.setMargin(Sheet.TopMargin, headerHeight + page.getMarginTop().convertTo(DimensionType.UNITS_IN)); - } - } - } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerUtils.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerUtils.java index 886c558117d..1c60a63c19a 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerUtils.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerUtils.java @@ -17,6 +17,7 @@ import java.awt.font.LineBreakMeasurer; import java.awt.font.TextAttribute; import java.awt.font.TextLayout; +import java.awt.font.TextMeasurer; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; @@ -40,11 +41,11 @@ import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder.BorderSide; import org.eclipse.birt.report.engine.content.IPageContent; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.DataFormatValue; import org.eclipse.birt.report.engine.css.engine.value.StringValue; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; import org.eclipse.birt.report.engine.ir.DimensionType; +import org.eclipse.birt.report.model.api.elements.DesignChoiceConstants; import org.eclipse.birt.report.model.api.util.ColorUtil; import org.w3c.dom.css.CSSValue; @@ -100,6 +101,29 @@ public static boolean objectsEqual(Object lhs, Object rhs) { return (lhs == null) ? (rhs == null) : lhs.equals(rhs); } + + + public static int dataFormatHash( DataFormatValue dataFormat ) { + final int prime = 31; + int result = 1; + + result = prime * result + ((dataFormat.getStringLocale() == null) ? 0 : dataFormat.getStringLocale().hashCode()); + result = prime * result + ((dataFormat.getStringPattern() == null) ? 0 : dataFormat.getStringPattern().hashCode()); + + result = prime * result + ((dataFormat.getDateLocale() == null) ? 0 : dataFormat.getDateLocale().hashCode()); + result = prime * result + ((dataFormat.getDatePattern() == null) ? 0 : dataFormat.getDatePattern().hashCode()); + + result = prime * result + ((dataFormat.getDateTimeLocale() == null) ? 0 : dataFormat.getDateTimeLocale().hashCode()); + result = prime * result + ((dataFormat.getDateTimePattern() == null) ? 0 : dataFormat.getDateTimePattern().hashCode()); + + result = prime * result + ((dataFormat.getTimeLocale() == null) ? 0 : dataFormat.getTimeLocale().hashCode()); + result = prime * result + ((dataFormat.getTimePattern() == null) ? 0 : dataFormat.getTimePattern().hashCode()); + + result = prime * result + ((dataFormat.getNumberLocale() == null) ? 0 : dataFormat.getNumberLocale().hashCode()); + result = prime * result + ((dataFormat.getNumberPattern() == null) ? 0 : dataFormat.getNumberPattern().hashCode()); + return result; + } + public static boolean dataFormatsEquivalent( DataFormatValue dataFormat1, DataFormatValue dataFormat2 ) { if( dataFormat1 == null ) { return ( dataFormat2 == null ); @@ -335,8 +359,6 @@ public int poiImageTypeFromMimeType( String mimeType, byte[] data ) { return Workbook.PICTURE_TYPE_JPEG; } else if( "image/png".equals(mimeType) ) { return Workbook.PICTURE_TYPE_PNG; - } else if ( "image/bmp".equals( mimeType ) ) { - return Workbook.PICTURE_TYPE_DIB; } else { if( null != data ) { log.debug( "Data bytes: " @@ -485,7 +507,23 @@ public boolean isPixels( DimensionType dim ) { * A string representing a data format in Excel. */ private String poiNumberFormatFromBirt(String birtFormat) { - if( "General Number".equalsIgnoreCase(birtFormat)) { + // The following formats are hard-coded copies of the non-localised values stored in + // org.eclipse.birt.report.designer.util.FormatNumberPattern. + // Accessing the subclasses directly, or using getPatternForCategory from FormatNumberPattern would + // introduce unacceptable dependencies. + if( birtFormat.equalsIgnoreCase( DesignChoiceConstants.NUMBER_FORMAT_TYPE_CURRENCY ) ) { + birtFormat = "#,##0.00"; + } else if( birtFormat.equalsIgnoreCase( DesignChoiceConstants.NUMBER_FORMAT_TYPE_FIXED ) ) { + birtFormat = "###0.00"; + } else if( birtFormat.equalsIgnoreCase( DesignChoiceConstants.NUMBER_FORMAT_TYPE_GENERAL_NUMBER ) ) { + return null; + } else if( birtFormat.equalsIgnoreCase( DesignChoiceConstants.NUMBER_FORMAT_TYPE_PERCENT ) ) { + birtFormat = "###0.00%"; + } else if( birtFormat.equalsIgnoreCase( DesignChoiceConstants.NUMBER_FORMAT_TYPE_SCIENTIFIC ) ) { + birtFormat = "0.00E00"; + } else if( birtFormat.equalsIgnoreCase( DesignChoiceConstants.NUMBER_FORMAT_TYPE_STANDARD ) ) { + return null; + } else if( birtFormat.equalsIgnoreCase( DesignChoiceConstants.NUMBER_FORMAT_TYPE_UNFORMATTED ) ) { return null; } if( birtFormat.startsWith( ExcelEmitter.CUSTOM_NUMBER_FORMAT ) ) { @@ -539,7 +577,7 @@ private String poiDateTimeFormatFromBirt(String birtFormat, Locale locale) { } public static String getNumberFormat( BirtStyle style ) { - CSSValue dataFormat = style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + CSSValue dataFormat = style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dataFormat instanceof DataFormatValue ) { DataFormatValue dataFormatValue = (DataFormatValue)dataFormat; return dataFormatValue.getNumberPattern(); @@ -548,7 +586,7 @@ public static String getNumberFormat( BirtStyle style ) { } public static String getDateFormat( BirtStyle style ) { - CSSValue dataFormat = style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + CSSValue dataFormat = style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dataFormat instanceof DataFormatValue ) { DataFormatValue dataFormatValue = (DataFormatValue)dataFormat; return dataFormatValue.getDatePattern(); @@ -557,7 +595,7 @@ public static String getDateFormat( BirtStyle style ) { } public static String getDateTimeFormat( BirtStyle style ) { - CSSValue dataFormat = style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + CSSValue dataFormat = style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dataFormat instanceof DataFormatValue ) { DataFormatValue dataFormatValue = (DataFormatValue)dataFormat; return dataFormatValue.getDateTimePattern(); @@ -566,7 +604,7 @@ public static String getDateTimeFormat( BirtStyle style ) { } public static String getTimeFormat( BirtStyle style ) { - CSSValue dataFormat = style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + CSSValue dataFormat = style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dataFormat instanceof DataFormatValue ) { DataFormatValue dataFormatValue = (DataFormatValue)dataFormat; return dataFormatValue.getTimePattern(); @@ -585,47 +623,47 @@ public static DataFormatValue cloneDataFormatValue(DataFormatValue dataValue) { } public static void setNumberFormat( BirtStyle style, String pattern, String locale ) { - DataFormatValue dfv = (DataFormatValue)style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + DataFormatValue dfv = (DataFormatValue)style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dfv == null ) { dfv = new DataFormatValue(); } else { dfv = cloneDataFormatValue( dfv ); } dfv.setNumberFormat( pattern, locale ); - style.setProperty( StyleConstants.STYLE_DATA_FORMAT, dfv); + style.setProperty( StylePropertyIndexes.STYLE_DATA_FORMAT, dfv); } public static void setDateFormat( BirtStyle style, String pattern, String locale ) { - DataFormatValue dfv = (DataFormatValue)style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + DataFormatValue dfv = (DataFormatValue)style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dfv == null ) { dfv = new DataFormatValue(); } else { dfv = cloneDataFormatValue( dfv ); } dfv.setDateFormat( pattern, locale ); - style.setProperty( StyleConstants.STYLE_DATA_FORMAT, dfv); + style.setProperty( StylePropertyIndexes.STYLE_DATA_FORMAT, dfv); } public static void setDateTimeFormat( BirtStyle style, String pattern, String locale ) { - DataFormatValue dfv = (DataFormatValue)style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + DataFormatValue dfv = (DataFormatValue)style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dfv == null ) { dfv = new DataFormatValue(); } else { dfv = cloneDataFormatValue( dfv ); } dfv.setDateTimeFormat( pattern, locale ); - style.setProperty( StyleConstants.STYLE_DATA_FORMAT, dfv); + style.setProperty( StylePropertyIndexes.STYLE_DATA_FORMAT, dfv); } public static void setTimeFormat( BirtStyle style, String pattern, String locale ) { - DataFormatValue dfv = (DataFormatValue)style.getProperty( StyleConstants.STYLE_DATA_FORMAT ); + DataFormatValue dfv = (DataFormatValue)style.getProperty( StylePropertyIndexes.STYLE_DATA_FORMAT ); if( dfv == null ) { dfv = new DataFormatValue(); } else { dfv = cloneDataFormatValue( dfv ); } dfv.setTimeFormat( pattern, locale ); - style.setProperty( StyleConstants.STYLE_DATA_FORMAT, dfv); + style.setProperty( StylePropertyIndexes.STYLE_DATA_FORMAT, dfv); } /** @@ -722,7 +760,7 @@ protected int getRichTextRunIndexForStart( List< RichTextRun> richTextRuns, int * @return * The heigh, in points, of a box big enough to contain the formatted sourceText. */ - public float calculateTextHeightPoints( String sourceText, Font defaultFont, double widthMM, List< RichTextRun> richTextRuns ) { + public float calculateTextHeightPoints( String sourceText, Font defaultFont, double widthMM, List< RichTextRun> richTextRuns, boolean wrap ) { log.debug( "Calculating height for ", sourceText); final float widthPt = (float)(72 * Math.max( 0, widthMM - 6 ) / 25.4); @@ -768,20 +806,34 @@ public float calculateTextHeightPoints( String sourceText, Font defaultFont, dou } } - LineBreakMeasurer measurer = new LineBreakMeasurer( attrString.getIterator(), frc); - - float heightAdjustment = 0.0F; - int lineLength = textLine.isEmpty() ? 1 : textLine.length(); - while (measurer.getPosition() < lineLength) { - TextLayout layout = measurer.nextLayout( widthPt ); - float lineHeight = layout.getAscent() + layout.getDescent() + layout.getLeading(); - if( layout.getDescent() + layout.getLeading() > heightAdjustment ) { - heightAdjustment = layout.getDescent() + layout.getLeading(); - } - log.debug ( "Line: ", textLine, " gives height ", lineHeight, "(", layout.getAscent(), "/", layout.getDescent(), "/", layout.getLeading(), ")"); - totalHeight += lineHeight; + try { + if( wrap ) { + LineBreakMeasurer measurer = new LineBreakMeasurer( attrString.getIterator(), frc); + + float heightAdjustment = 0.0F; + int lineLength = textLine.isEmpty() ? 1 : textLine.length(); + while (measurer.getPosition() < lineLength) { + TextLayout layout = measurer.nextLayout( widthPt ); + float lineHeight = layout.getAscent() + layout.getDescent() + layout.getLeading(); + if( layout.getDescent() + layout.getLeading() > heightAdjustment ) { + heightAdjustment = layout.getDescent() + layout.getLeading(); + } + log.debug ( "Line: ", textLine, " gives height ", lineHeight, "(", layout.getAscent(), "/", layout.getDescent(), "/", layout.getLeading(), ")"); + totalHeight += lineHeight; + } + totalHeight += heightAdjustment; + } else { + if( textLine.length() > 0 ) { + TextMeasurer measurer = new TextMeasurer( attrString.getIterator(), frc ); + TextLayout layout = measurer.getLayout(0, textLine.length()); + float lineHeight = layout.getAscent() + 2 * ( layout.getDescent() + layout.getLeading() ); + log.debug ( "Line: ", textLine, " gives height ", lineHeight, "(", layout.getAscent(), "/", layout.getDescent(), "/", layout.getLeading(), ")"); + totalHeight += lineHeight; + } + } + } catch( Throwable ex ) { + log.error( 0, "Calculating height of line \"" + textLine + "\" threw: ", ex ); } - totalHeight += heightAdjustment; } log.debug( "Height calculated as ", totalHeight ); @@ -840,15 +892,17 @@ int[] parseColour( String colour, String defaultColour ) { public abstract Font correctFontColorIfBackground( FontManager fm, Workbook wb, BirtStyle birtStyle, Font font ); public void correctFontColorIfBackground( BirtStyle birtStyle ) { - CSSValue bgColour = birtStyle.getProperty( StyleConstants.STYLE_BACKGROUND_COLOR ); - CSSValue fgColour = birtStyle.getProperty( StyleConstants.STYLE_COLOR ); - - int bgRgb[] = parseColour( bgColour == null ? null : bgColour.getCssText(), "white" ); - int fgRgb[] = parseColour( fgColour == null ? null : fgColour.getCssText(), "black" ); - - if( ( bgRgb[ 0 ] == fgRgb[ 0 ] ) && ( bgRgb[ 1 ] == fgRgb[ 1 ] ) && ( bgRgb[ 2 ] == fgRgb[ 2 ] ) ) { - CSSValue newColour = new StringValue( StringValue.CSS_STRING, contrastColour(bgRgb) ); - birtStyle.setProperty( StyleConstants.STYLE_COLOR, newColour); + if( birtStyle != null ) { + CSSValue bgColour = birtStyle.getProperty( StylePropertyIndexes.STYLE_BACKGROUND_COLOR ); + CSSValue fgColour = birtStyle.getProperty( StylePropertyIndexes.STYLE_COLOR ); + + int bgRgb[] = parseColour( bgColour == null ? null : bgColour.getCssText(), "white" ); + int fgRgb[] = parseColour( fgColour == null ? null : fgColour.getCssText(), "black" ); + + if( ( bgRgb[ 0 ] == fgRgb[ 0 ] ) && ( bgRgb[ 1 ] == fgRgb[ 1 ] ) && ( bgRgb[ 2 ] == fgRgb[ 2 ] ) ) { + CSSValue newColour = new StringValue( StringValue.CSS_STRING, contrastColour(bgRgb) ); + birtStyle.setProperty( StylePropertyIndexes.STYLE_COLOR, newColour); + } } } @@ -878,7 +932,42 @@ public void correctFontColorIfBackground( BirtStyle birtStyle ) { * @param page * The BIRT page. */ - public abstract void prepareMarginDimensions(Sheet sheet, IPageContent page); + public void prepareMarginDimensions(Sheet sheet, IPageContent page, boolean includeHeaderAndFooter) { + + if( ( page.getMarginLeft() != null ) && isAbsolute( page.getMarginLeft() ) ) { + sheet.setMargin(Sheet.LeftMargin, page.getMarginLeft().convertTo(DimensionType.UNITS_IN)); + } + + if( ( page.getMarginRight() != null ) && isAbsolute( page.getMarginRight() ) ) { + sheet.setMargin(Sheet.RightMargin, page.getMarginRight().convertTo(DimensionType.UNITS_IN)); + } + + double headerHeight = 0; + if( includeHeaderAndFooter && ( page.getHeaderHeight() != null ) && isAbsolute( page.getHeaderHeight() ) ) { + headerHeight = page.getHeaderHeight().convertTo(DimensionType.UNITS_IN); + } + double topMargin = 0; + if( ( page.getMarginTop() != null ) && isAbsolute( page.getMarginTop() ) ) { + topMargin = page.getMarginTop().convertTo(DimensionType.UNITS_IN); + } + if( ( topMargin > 0 ) || ( headerHeight > 0 ) ) { + sheet.setMargin(Sheet.TopMargin, headerHeight + topMargin); + sheet.setMargin(Sheet.HeaderMargin, topMargin); + } + + double footerHeight = 0; + if( includeHeaderAndFooter && ( page.getFooterHeight() != null ) && isAbsolute( page.getFooterHeight() ) ) { + footerHeight = page.getFooterHeight().convertTo(DimensionType.UNITS_IN); + } + double bottomMargin = 0; + if( ( page.getMarginBottom() != null ) && isAbsolute( page.getMarginBottom() ) ) { + bottomMargin = page.getMarginBottom().convertTo(DimensionType.UNITS_IN); + } + if( ( bottomMargin > 0 ) || ( footerHeight > 0 ) ) { + sheet.setMargin(Sheet.BottomMargin, footerHeight + bottomMargin ); + sheet.setMargin(Sheet.FooterMargin, bottomMargin); + } + } /** @@ -899,18 +988,18 @@ public void applyBordersToArea( StyleManager sm, Sheet sheet, int colStart, int StringBuilder borderMsg = new StringBuilder(); borderMsg.append( "applyBordersToArea [" ).append( colStart ).append( "," ).append( rowStart ).append( "]-[" ).append( colEnd ).append( "," ).append( rowEnd ).append( "]"); - CSSValue borderStyleBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_STYLE ); - CSSValue borderWidthBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_WIDTH ); - CSSValue borderColourBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_COLOR ); - CSSValue borderStyleLeft = borderStyle.getProperty( StyleConstants.STYLE_BORDER_LEFT_STYLE ); - CSSValue borderWidthLeft = borderStyle.getProperty( StyleConstants.STYLE_BORDER_LEFT_WIDTH ); - CSSValue borderColourLeft = borderStyle.getProperty( StyleConstants.STYLE_BORDER_LEFT_COLOR ); - CSSValue borderStyleRight = borderStyle.getProperty( StyleConstants.STYLE_BORDER_RIGHT_STYLE ); - CSSValue borderWidthRight = borderStyle.getProperty( StyleConstants.STYLE_BORDER_RIGHT_WIDTH ); - CSSValue borderColourRight = borderStyle.getProperty( StyleConstants.STYLE_BORDER_RIGHT_COLOR ); - CSSValue borderStyleTop = borderStyle.getProperty( StyleConstants.STYLE_BORDER_TOP_STYLE ); - CSSValue borderWidthTop = borderStyle.getProperty( StyleConstants.STYLE_BORDER_TOP_WIDTH ); - CSSValue borderColourTop = borderStyle.getProperty( StyleConstants.STYLE_BORDER_TOP_COLOR ); + CSSValue borderStyleBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE ); + CSSValue borderWidthBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH ); + CSSValue borderColourBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR ); + CSSValue borderStyleLeft = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE ); + CSSValue borderWidthLeft = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH ); + CSSValue borderColourLeft = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR ); + CSSValue borderStyleRight = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE ); + CSSValue borderWidthRight = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH ); + CSSValue borderColourRight = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR ); + CSSValue borderStyleTop = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_TOP_STYLE ); + CSSValue borderWidthTop = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH ); + CSSValue borderColourTop = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_TOP_COLOR ); /* borderMsg.append( ", Bottom:" ).append( borderStyleBottom ).append( "/" ).append( borderWidthBottom ).append( "/" + borderColourBottom ); borderMsg.append( ", Left:" ).append( borderStyleLeft ).append( "/" ).append( borderWidthLeft ).append( "/" + borderColourLeft ); @@ -996,9 +1085,9 @@ public void applyBordersToArea( StyleManager sm, Sheet sheet, int colStart, int * The BIRT border style to apply to the region. */ public void applyBottomBorderToRow( StyleManager sm, Sheet sheet, int colStart, int colEnd, int row, BirtStyle borderStyle ) { - CSSValue borderStyleBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_STYLE ); - CSSValue borderWidthBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_WIDTH ); - CSSValue borderColourBottom = borderStyle.getProperty( StyleConstants.STYLE_BORDER_BOTTOM_COLOR ); + CSSValue borderStyleBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE ); + CSSValue borderWidthBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH ); + CSSValue borderColourBottom = borderStyle.getProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR ); if( ( borderStyleBottom == null ) || ( CSSConstants.CSS_NONE_VALUE.equals( borderStyleBottom.getCssText() ) ) || ( borderWidthBottom == null ) || ( "0".equals(borderWidthBottom) ) @@ -1035,30 +1124,30 @@ public int applyAreaBordersToCell(Collection knownAreaBorders, Cell for( AreaBorders areaBorders : knownAreaBorders ) { if( ( areaBorders.bottom == rowIndex ) && ( ( areaBorders.left <= colIndex ) && ( areaBorders.right >= colIndex ) ) ) { if( ( areaBorders.cssStyle[ 0 ] != null ) && ( areaBorders.cssWidth[ 0 ] != null ) && ( areaBorders.cssColour[ 0 ] != null ) ) { - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_BOTTOM_STYLE, areaBorders.cssStyle[0] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_BOTTOM_WIDTH, areaBorders.cssWidth[0] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_BOTTOM_COLOR, areaBorders.cssColour[0] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_STYLE, areaBorders.cssStyle[0] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_WIDTH, areaBorders.cssWidth[0] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_BOTTOM_COLOR, areaBorders.cssColour[0] ); } } if( ( areaBorders.left == colIndex ) && ( ( areaBorders.top <= rowIndex ) && ( ( areaBorders.bottom < 0 ) || ( areaBorders.bottom >= rowIndex ) ) ) ) { if( ( areaBorders.cssStyle[ 1 ] != null ) && ( areaBorders.cssWidth[ 1 ] != null ) && ( areaBorders.cssColour[ 1 ] != null ) ) { - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_LEFT_STYLE, areaBorders.cssStyle[1] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_LEFT_WIDTH, areaBorders.cssWidth[1] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_LEFT_COLOR, areaBorders.cssColour[1] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_STYLE, areaBorders.cssStyle[1] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_WIDTH, areaBorders.cssWidth[1] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_LEFT_COLOR, areaBorders.cssColour[1] ); } } if( ( areaBorders.right == colIndex ) && ( ( areaBorders.top <= rowIndex ) && ( ( areaBorders.bottom < 0 ) || ( areaBorders.bottom >= rowIndex ) ) ) ) { if( ( areaBorders.cssStyle[ 2 ] != null ) && ( areaBorders.cssWidth[ 2 ] != null ) && ( areaBorders.cssColour[ 2 ] != null ) ) { - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_RIGHT_STYLE, areaBorders.cssStyle[2] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_RIGHT_WIDTH, areaBorders.cssWidth[2] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_RIGHT_COLOR, areaBorders.cssColour[2] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_STYLE, areaBorders.cssStyle[2] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_WIDTH, areaBorders.cssWidth[2] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_RIGHT_COLOR, areaBorders.cssColour[2] ); } } if( ( areaBorders.top == rowIndex ) && ( ( areaBorders.left <= colIndex ) && ( areaBorders.right >= colIndex ) ) ) { if( ( areaBorders.cssStyle[ 3 ] != null ) && ( areaBorders.cssWidth[ 3 ] != null ) && ( areaBorders.cssColour[ 3 ] != null ) ) { - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_TOP_STYLE, areaBorders.cssStyle[3] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_TOP_WIDTH, areaBorders.cssWidth[3] ); - birtCellStyle.setProperty( StyleConstants.STYLE_BORDER_TOP_COLOR, areaBorders.cssColour[3] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_TOP_STYLE, areaBorders.cssStyle[3] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_TOP_WIDTH, areaBorders.cssWidth[3] ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BORDER_TOP_COLOR, areaBorders.cssColour[3] ); } } } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerXUtils.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerXUtils.java index 56b70efd975..26066a6b8e2 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerXUtils.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StyleManagerXUtils.java @@ -18,7 +18,6 @@ import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.RichTextString; -import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFColor; @@ -26,10 +25,8 @@ import org.apache.poi.xssf.usermodel.XSSFRichTextString; import org.apache.poi.xssf.usermodel.XSSFShape; import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder.BorderSide; -import org.eclipse.birt.report.engine.content.IPageContent; import org.eclipse.birt.report.engine.content.IStyle; import org.eclipse.birt.report.engine.css.dom.AreaStyle; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; import org.eclipse.birt.report.engine.ir.DimensionType; import org.eclipse.birt.report.model.api.util.ColorUtil; @@ -209,7 +206,7 @@ public void addBackgroundColourToStyle(Workbook workbook, CellStyle style, Strin @Override public Font correctFontColorIfBackground( FontManager fm, Workbook wb, BirtStyle birtStyle, Font font ) { - CSSValue bgColour = birtStyle.getProperty( StyleConstants.STYLE_BACKGROUND_COLOR ); + CSSValue bgColour = birtStyle.getProperty( StylePropertyIndexes.STYLE_BACKGROUND_COLOR ); int bgRgb[] = parseColour( bgColour == null ? null : bgColour.getCssText(), "white" ); XSSFColor colour = ((XSSFFont)font).getXSSFColor(); @@ -240,31 +237,5 @@ public int anchorDxFromMM( double widthMM, double colWidthMM ) { public int anchorDyFromPoints( float height, float rowHeight ) { return (int)( height * XSSFShape.EMU_PER_POINT ); } - - @Override - public void prepareMarginDimensions(Sheet sheet, IPageContent page) { - double headerHeight = 0.5; - double footerHeight = 0.5; - if( ( page.getHeaderHeight() != null ) && isAbsolute( page.getHeaderHeight() ) ) { - headerHeight = page.getHeaderHeight().convertTo(DimensionType.UNITS_IN); - sheet.setMargin(Sheet.HeaderMargin, headerHeight); - } - if( ( page.getFooterHeight() != null ) && isAbsolute( page.getFooterHeight() ) ) { - footerHeight = page.getFooterHeight().convertTo(DimensionType.UNITS_IN); - sheet.setMargin(Sheet.FooterMargin, footerHeight); - } - if( ( page.getMarginBottom() != null ) && isAbsolute( page.getMarginBottom() ) ) { - sheet.setMargin(Sheet.BottomMargin, footerHeight + page.getMarginBottom().convertTo(DimensionType.UNITS_IN)); - } - if( ( page.getMarginLeft() != null ) && isAbsolute( page.getMarginLeft() ) ) { - sheet.setMargin(Sheet.LeftMargin, page.getMarginLeft().convertTo(DimensionType.UNITS_IN)); - } - if( ( page.getMarginRight() != null ) && isAbsolute( page.getMarginRight() ) ) { - sheet.setMargin(Sheet.RightMargin, page.getMarginRight().convertTo(DimensionType.UNITS_IN)); - } - if( ( page.getMarginTop() != null ) && isAbsolute( page.getMarginTop() ) ) { - sheet.setMargin(Sheet.TopMargin, headerHeight + page.getMarginTop().convertTo(DimensionType.UNITS_IN)); - } - } } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StylePropertyIndexes.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StylePropertyIndexes.java new file mode 100644 index 00000000000..c9b79853814 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/StylePropertyIndexes.java @@ -0,0 +1,79 @@ +package uk.co.spudsoft.birt.emitters.excel; + +import org.eclipse.birt.report.engine.css.engine.BIRTPropertyManagerFactory; +import org.eclipse.birt.report.engine.css.engine.value.birt.BIRTConstants; +import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; + +public class StylePropertyIndexes { + + private static final BIRTPropertyManagerFactory propMgr = new BIRTPropertyManagerFactory(); + + public static final int NUMBER_OF_BIRT_PROPERTIES = propMgr.getNumberOfProperties(); + + public static String getPropertyName(int index) { + return propMgr.getPropertyName(index); + } + + public static final int STYLE_COLOR = propMgr.getPropertyIndex(CSSConstants.CSS_COLOR_PROPERTY); + public static final int STYLE_DATA_FORMAT = propMgr.getPropertyIndex(BIRTConstants.BIRT_STYLE_DATA_FORMAT); + public static final int STYLE_LINE_HEIGHT = propMgr.getPropertyIndex(CSSConstants.CSS_LINE_HEIGHT_PROPERTY); + public static final int STYLE_PADDING_LEFT = propMgr.getPropertyIndex(CSSConstants.CSS_PADDING_LEFT_PROPERTY); + public static final int STYLE_PADDING_RIGHT = propMgr.getPropertyIndex(CSSConstants.CSS_PADDING_RIGHT_PROPERTY); + public static final int STYLE_DIRECTION = propMgr.getPropertyIndex(CSSConstants.CSS_DIRECTION_PROPERTY); + public static final int STYLE_PADDING_TOP = propMgr.getPropertyIndex(CSSConstants.CSS_PADDING_TOP_PROPERTY); + public static final int STYLE_BACKGROUND_HEIGHT = propMgr.getPropertyIndex(CSSConstants.CSS_BACKGROUND_HEIGHT_PROPERTY); + public static final int STYLE_BACKGROUND_COLOR = propMgr.getPropertyIndex(CSSConstants.CSS_BACKGROUND_COLOR_PROPERTY); + public static final int STYLE_BACKGROUND_REPEAT = propMgr.getPropertyIndex(CSSConstants.CSS_BACKGROUND_REPEAT_PROPERTY); + public static final int STYLE_BORDER_RIGHT_WIDTH = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_RIGHT_WIDTH_PROPERTY); + public static final int STYLE_BORDER_BOTTOM_WIDTH = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_BOTTOM_WIDTH_PROPERTY); + public static final int STYLE_CAN_SHRINK = propMgr.getPropertyIndex(BIRTConstants.BIRT_CAN_SHRINK_PROPERTY); + public static final int STYLE_BORDER_TOP_COLOR = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_TOP_COLOR_PROPERTY); + public static final int STYLE_BORDER_RIGHT_COLOR = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_RIGHT_COLOR_PROPERTY); + public static final int STYLE_BORDER_BOTTOM_COLOR = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_BOTTOM_COLOR_PROPERTY); + public static final int STYLE_MARGIN_LEFT = propMgr.getPropertyIndex(CSSConstants.CSS_MARGIN_LEFT_PROPERTY); + public static final int STYLE_MARGIN_RIGHT = propMgr.getPropertyIndex(CSSConstants.CSS_MARGIN_RIGHT_PROPERTY); + public static final int STYLE_PADDING_BOTTOM = propMgr.getPropertyIndex(CSSConstants.CSS_PADDING_BOTTOM_PROPERTY); + public static final int STYLE_MARGIN_TOP = propMgr.getPropertyIndex(CSSConstants.CSS_MARGIN_TOP_PROPERTY); + public static final int STYLE_TEXT_INDENT = propMgr.getPropertyIndex(CSSConstants.CSS_TEXT_INDENT_PROPERTY); + public static final int STYLE_BORDER_RIGHT_STYLE = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_RIGHT_STYLE_PROPERTY); + public static final int STYLE_BORDER_BOTTOM_STYLE = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_BOTTOM_STYLE_PROPERTY); + public static final int STYLE_TEXT_ALIGN = propMgr.getPropertyIndex(CSSConstants.CSS_TEXT_ALIGN_PROPERTY); + // public static final int STYLE_HEIGHT = propMgr.getPropertyIndex(CSSConstants.CSS_HEIGHT_PROPERTY); + public static final int STYLE_NUMBER_ALIGN = propMgr.getPropertyIndex(BIRTConstants.BIRT_NUMBER_ALIGN_PROPERTY); + // public static final int STYLE_WIDTH = propMgr.getPropertyIndex(CSSConstants.CSS_WIDTH_PROPERTY); + public static final int STYLE_TEXT_LINETHROUGH = propMgr.getPropertyIndex(BIRTConstants.BIRT_TEXT_LINETHROUGH_PROPERTY); + public static final int STYLE_ORPHANS = propMgr.getPropertyIndex(CSSConstants.CSS_ORPHANS_PROPERTY); + public static final int STYLE_FONT_WEIGHT = propMgr.getPropertyIndex(CSSConstants.CSS_FONT_WEIGHT_PROPERTY); + public static final int STYLE_FONT_VARIANT = propMgr.getPropertyIndex(CSSConstants.CSS_FONT_VARIANT_PROPERTY); + public static final int STYLE_MARGIN_BOTTOM = propMgr.getPropertyIndex(CSSConstants.CSS_MARGIN_BOTTOM_PROPERTY); + public static final int STYLE_BACKGROUND_POSITION_X = propMgr.getPropertyIndex(BIRTConstants.BIRT_BACKGROUND_POSITION_X_PROPERTY); + public static final int STYLE_PAGE_BREAK_BEFORE = propMgr.getPropertyIndex(CSSConstants.CSS_PAGE_BREAK_BEFORE_PROPERTY); + public static final int STYLE_TEXT_OVERLINE = propMgr.getPropertyIndex(BIRTConstants.BIRT_TEXT_OVERLINE_PROPERTY); + public static final int STYLE_TEXT_TRANSFORM = propMgr.getPropertyIndex(CSSConstants.CSS_TEXT_TRANSFORM_PROPERTY); + public static final int STYLE_BACKGROUND_WIDTH = propMgr.getPropertyIndex(CSSConstants.CSS_BACKGROUND_WIDTH_PROPERTY); + public static final int STYLE_BACKGROUND_POSITION_Y = propMgr.getPropertyIndex(BIRTConstants.BIRT_BACKGROUND_POSITION_Y_PROPERTY); + public static final int STYLE_OVERFLOW = propMgr.getPropertyIndex(CSSConstants.CSS_OVERFLOW_PROPERTY); + public static final int STYLE_FONT_SIZE = propMgr.getPropertyIndex(CSSConstants.CSS_FONT_SIZE_PROPERTY); + public static final int STYLE_FONT_STYLE = propMgr.getPropertyIndex(CSSConstants.CSS_FONT_STYLE_PROPERTY); + public static final int STYLE_BORDER_TOP_WIDTH = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_TOP_WIDTH_PROPERTY); + public static final int STYLE_BORDER_LEFT_WIDTH = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_LEFT_WIDTH_PROPERTY); + public static final int STYLE_SHOW_IF_BLANK = propMgr.getPropertyIndex(BIRTConstants.BIRT_SHOW_IF_BLANK_PROPERTY); + public static final int STYLE_LETTER_SPACING = propMgr.getPropertyIndex(CSSConstants.CSS_LETTER_SPACING_PROPERTY); + public static final int STYLE_BACKGROUND_IMAGE = propMgr.getPropertyIndex(CSSConstants.CSS_BACKGROUND_IMAGE_PROPERTY); + public static final int STYLE_BORDER_LEFT_COLOR = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_LEFT_COLOR_PROPERTY); + public static final int STYLE_BACKGROUND_ATTACHMENT = propMgr.getPropertyIndex(CSSConstants.CSS_BACKGROUND_ATTACHMENT_PROPERTY); + public static final int STYLE_VERTICAL_ALIGN = propMgr.getPropertyIndex(CSSConstants.CSS_VERTICAL_ALIGN_PROPERTY); + public static final int STYLE_BORDER_TOP_STYLE = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_TOP_STYLE_PROPERTY); + public static final int STYLE_DISPLAY = propMgr.getPropertyIndex(CSSConstants.CSS_DISPLAY_PROPERTY); + public static final int STYLE_MASTER_PAGE = propMgr.getPropertyIndex(BIRTConstants.BIRT_MASTER_PAGE_PROPERTY); + public static final int STYLE_BORDER_LEFT_STYLE = propMgr.getPropertyIndex(CSSConstants.CSS_BORDER_LEFT_STYLE_PROPERTY); + public static final int STYLE_VISIBLE_FORMAT = propMgr.getPropertyIndex(BIRTConstants.BIRT_VISIBLE_FORMAT_PROPERTY); + public static final int STYLE_WIDOWS = propMgr.getPropertyIndex(CSSConstants.CSS_WIDOWS_PROPERTY); + public static final int STYLE_FONT_FAMILY = propMgr.getPropertyIndex(CSSConstants.CSS_FONT_FAMILY_PROPERTY); + public static final int STYLE_PAGE_BREAK_INSIDE = propMgr.getPropertyIndex(CSSConstants.CSS_PAGE_BREAK_INSIDE_PROPERTY); + public static final int STYLE_PAGE_BREAK_AFTER = propMgr.getPropertyIndex(CSSConstants.CSS_PAGE_BREAK_AFTER_PROPERTY); + public static final int STYLE_TEXT_UNDERLINE = propMgr.getPropertyIndex(BIRTConstants.BIRT_TEXT_UNDERLINE_PROPERTY); + public static final int STYLE_WORD_SPACING = propMgr.getPropertyIndex(CSSConstants.CSS_WORD_SPACING_PROPERTY); + public static final int STYLE_WHITE_SPACE = propMgr.getPropertyIndex(CSSConstants.CSS_WHITE_SPACE_PROPERTY); + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/XlsxEmitter.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/XlsxEmitter.java index a42134a6e4e..3c8449e7a85 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/XlsxEmitter.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/XlsxEmitter.java @@ -19,6 +19,7 @@ import java.io.InputStream; import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; /** @@ -40,7 +41,11 @@ public String getOutputFormat() { } protected Workbook createWorkbook() { - return new XSSFWorkbook(); + if( extractMode ) { + return new SXSSFWorkbook(); + } else { + return new XSSFWorkbook(); + } } protected Workbook openWorkbook( File templateFile ) throws IOException { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractHandler.java index 53314e1cac9..e1707d9fe42 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractHandler.java @@ -38,11 +38,11 @@ import org.eclipse.birt.report.engine.content.ITableContent; import org.eclipse.birt.report.engine.content.ITableGroupContent; import org.eclipse.birt.report.engine.content.ITextContent; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; import org.w3c.dom.css.CSSValue; import uk.co.spudsoft.birt.emitters.excel.HandlerState; +import uk.co.spudsoft.birt.emitters.excel.StylePropertyIndexes; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; public class AbstractHandler implements IHandler { @@ -90,7 +90,7 @@ public CSSValue getBackgroundColour() { return backgroundColour; } if( element != null ) { - CSSValue elemColour = element.getComputedStyle().getProperty( StyleConstants.STYLE_BACKGROUND_COLOR ); + CSSValue elemColour = element.getComputedStyle().getProperty( StylePropertyIndexes.STYLE_BACKGROUND_COLOR ); if( ( elemColour != null ) && ! CSSConstants.CSS_TRANSPARENT_VALUE.equals( elemColour.getCssText() ) ) { backgroundColour = elemColour; } @@ -112,6 +112,10 @@ protected static String getStyleProperty( IStyledElement element, int property, protected static String prepareName( String name ) { char c = name.charAt(0); + if( Character.isDigit(c) ) { + name = "_" + name; + } + boolean requirePreparation = (!(c == '_' || Character.isLetter(c)) || name.indexOf(' ') != -1); if( !requirePreparation ) { for( int i = 1; i < name.length(); ++i ) { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealListHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealListHandler.java index 828954ee0a1..9558383f51a 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealListHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealListHandler.java @@ -30,19 +30,34 @@ public class AbstractRealListHandler extends AbstractHandler implements NestedTableContainer { - protected int startRow; - protected int startCol; + protected int startRow = -1; + protected int startCol = -1; + @SuppressWarnings("unused") private IListGroupContent currentGroup; + @SuppressWarnings("unused") private IListBandContent currentBand; private AreaBorders borderDefn; private List< NestedTableHandler > nestedTables; + private NestedTableHandler lastNestedTable; public AbstractRealListHandler(Logger log, IHandler parent, IListContent list) { super(log, parent, list); } + + @Override + public void notifyHandler(HandlerState state) { + super.notifyHandler(state); + if( startCol >= 0 ) { + state.colNum = startCol; + if( lastNestedTable != null ) { + state.rowNum = lastNestedTable.endDetailsRow + 1; + lastNestedTable = null; + } + } + } public void addNestedTable( NestedTableHandler nestedTableHandler ) { if( nestedTables == null ) { @@ -50,6 +65,7 @@ public void addNestedTable( NestedTableHandler nestedTableHandler ) { } log.debug( "Adding nested table: ", nestedTableHandler ); nestedTables.add(nestedTableHandler); + lastNestedTable = nestedTableHandler; } public boolean rowHasNestedTable( int rowNum ) { @@ -109,7 +125,7 @@ public void endList(HandlerState state, IListContent list) throws BirtException state.removeBorderOverload(borderDefn); } - if( list.getBookmark() != null ) { + if( ( list.getBookmark() != null ) && ( state.rowNum > startRow ) ) { createName(state, prepareName( list.getBookmark() ), startRow, 0, state.rowNum - 1, 0); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableCellHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableCellHandler.java index 2e39a8144e0..3b69f383686 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableCellHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableCellHandler.java @@ -29,7 +29,6 @@ import org.eclipse.birt.report.engine.content.ITextContent; import org.eclipse.birt.report.engine.content.impl.CellContent; import org.eclipse.birt.report.engine.content.impl.TableContent; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.emitter.IContentEmitter; import org.eclipse.birt.report.engine.ir.CellDesign; import org.eclipse.birt.report.engine.layout.pdf.util.HTML2Content; @@ -39,6 +38,7 @@ import uk.co.spudsoft.birt.emitters.excel.EmitterServices; import uk.co.spudsoft.birt.emitters.excel.ExcelEmitter; import uk.co.spudsoft.birt.emitters.excel.HandlerState; +import uk.co.spudsoft.birt.emitters.excel.StylePropertyIndexes; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; public class AbstractRealTableCellHandler extends CellContentHandler { @@ -113,6 +113,10 @@ public void interruptCell(HandlerState state, boolean includeFormatOnly) throws Area area = null; if(( cell.getColSpan() > 1 )||( cell.getRowSpan() > 1 )) { + + if( state.getEmitter().isExtractMode() ) { + throw new IllegalArgumentException( "Merged cells encountered in extract mode, not currently supported" ); + } int endRow = state.rowNum + cell.getRowSpan() - 1; int endCol = state.colNum + cell.getColSpan() - 1; @@ -158,16 +162,16 @@ public void interruptCell(HandlerState state, boolean includeFormatOnly) throws @Override public void startContainer(HandlerState state, IContainerContent container) throws BirtException { - // log.debug( "Container display = " + getStyleProperty( container, StyleConstants.STYLE_DISPLAY, "block") ); - if( ! "inline".equals( getStyleProperty( container, StyleConstants.STYLE_DISPLAY, "block") ) ) { + // log.debug( "Container display = " + getStyleProperty( container, StylePropertyIndexes.STYLE_DISPLAY, "block") ); + if( ! "inline".equals( getStyleProperty( container, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) { lastCellContentsWasBlock = true; } } @Override public void endContainer(HandlerState state, IContainerContent container) throws BirtException { - // log.debug( "Container display = " + getStyleProperty( container, StyleConstants.STYLE_DISPLAY, "block") ); - if( ! "inline".equals( getStyleProperty( container, StyleConstants.STYLE_DISPLAY, "block") ) ) { + // log.debug( "Container display = " + getStyleProperty( container, StylePropertyIndexes.STYLE_DISPLAY, "block") ); + if( ! "inline".equals( getStyleProperty( container, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) { lastCellContentsWasBlock = true; } } @@ -189,6 +193,8 @@ public void startTable(HandlerState state, ITableContent table) throws BirtExcep if( ( tableHandler != null ) && ( tableHandler.getColumnCount() == colSpan ) + && ( table.getParent() instanceof CellContent ) + && ( ( (CellContent)table.getParent() ).getGenerateBy() instanceof CellDesign ) && ( 1 == ( (CellDesign)( (CellContent)table.getParent() ).getGenerateBy()).getContentCount() ) ) { // Parent row contains only one item @@ -266,25 +272,25 @@ public void startList(HandlerState state, IListContent list) throws BirtExceptio public void emitText(HandlerState state, ITextContent text) throws BirtException { String textText = text.getText(); log.debug( "text:", textText ); - emitContent(state,text,textText, ( ! "inline".equals( getStyleProperty(text, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,text,textText, ( ! "inline".equals( getStyleProperty(text, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); } @Override public void emitData(HandlerState state, IDataContent data) throws BirtException { - emitContent(state,data,data.getValue(), ( ! "inline".equals( getStyleProperty(data, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,data,data.getValue(), ( ! "inline".equals( getStyleProperty(data, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); } - + @Override public void emitLabel(HandlerState state, ILabelContent label) throws BirtException { // String labelText = ( label.getLabelText() != null ) ? label.getLabelText() : label.getText(); String labelText = ( label.getText() != null ) ? label.getText() : label.getLabelText(); log.debug( "labelText:", labelText ); - emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StyleConstants.STYLE_DISPLAY, "block") ) )); + emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StylePropertyIndexes.STYLE_DISPLAY, "block") ) )); } @Override public void emitAutoText(HandlerState state, IAutoTextContent autoText) throws BirtException { - emitContent(state,autoText,autoText.getText(), ( ! "inline".equals( getStyleProperty(autoText, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,autoText,autoText.getText(), ( ! "inline".equals( getStyleProperty(autoText, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); } @Override diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableHandler.java index 6a93ccfad66..79e1a37b5a5 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableHandler.java @@ -16,13 +16,18 @@ import java.util.ArrayList; import java.util.List; +import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.SheetUtil; import org.eclipse.birt.core.exception.BirtException; +import org.eclipse.birt.report.engine.content.IContent; import org.eclipse.birt.report.engine.content.ITableBandContent; import org.eclipse.birt.report.engine.content.ITableContent; import org.eclipse.birt.report.engine.content.ITableGroupContent; import org.eclipse.birt.report.engine.ir.DimensionType; +import org.eclipse.birt.report.engine.ir.ExtendedItemDesign; import org.eclipse.birt.report.engine.ir.GridItemDesign; +import org.eclipse.birt.report.engine.ir.TableItemDesign; +import org.eclipse.birt.report.model.api.DesignElementHandle; import uk.co.spudsoft.birt.emitters.excel.AreaBorders; import uk.co.spudsoft.birt.emitters.excel.BirtStyle; @@ -38,13 +43,18 @@ public class AbstractRealTableHandler extends AbstractHandler implements ITableH protected int startCol; protected int startDetailsRow = -1; protected int endDetailsRow; + protected int startHeaderRow = -1; + @SuppressWarnings("unused") private ITableGroupContent currentGroup; + @SuppressWarnings("unused") private ITableBandContent currentBand; private BirtStyle tableStyle; private AreaBorders borderDefn; + private boolean repeatHeader = false; + private List< NestedTableHandler > nestedTables; public AbstractRealTableHandler(Logger log, IHandler parent, ITableContent table) { @@ -97,6 +107,29 @@ public void startTable(HandlerState state, ITableContent table) throws BirtExcep log.debug( "startTable @ [", startRow, ",", startCol, "]" ); + repeatHeader = false; + Object genBy = ((IContent)table).getGenerateBy(); + if( genBy instanceof TableItemDesign ) { + TableItemDesign design = (TableItemDesign)genBy; + repeatHeader = ( design.getPageBreakInterval() == 0 ) && design.isRepeatHeader(); + } else if( genBy instanceof ExtendedItemDesign ) { + ExtendedItemDesign extDesign = (ExtendedItemDesign)genBy; + DesignElementHandle handle = extDesign.getHandle(); + Object rowPageBreakInterval = handle.getProperty( "rowPageBreakInterval" ); + if( rowPageBreakInterval == null ) { + rowPageBreakInterval = 40; + } + Object repeatRowHeader = handle.getProperty( "repeatRowHeader" ); + if( repeatRowHeader == null ) { + repeatRowHeader = Boolean.TRUE; + } + + if( ( rowPageBreakInterval instanceof Integer ) && ( repeatRowHeader instanceof Boolean ) ) { + repeatHeader = (((Integer)rowPageBreakInterval).intValue() == 0) && (((Boolean)repeatRowHeader).booleanValue()); + } + } + + for( int col = 0; col < table.getColumnCount(); ++col ) { DimensionType width = table.getColumn(col).getWidth(); if( width != null ) { @@ -123,7 +156,7 @@ public void startTable(HandlerState state, ITableContent table) throws BirtExcep @Override public void endTable(HandlerState state, ITableContent table) throws BirtException { if( table.getGenerateBy() instanceof GridItemDesign ) { - endDetailsRow = state.rowNum; + endDetailsRow = state.rowNum - 1; } log.debug( "Applying bottom border to [", state.rowNum - 1, ",", startCol, "] - [", state.rowNum - 1, ",", startCol + table.getColumnCount() - 1, "]" ); @@ -135,12 +168,21 @@ public void endTable(HandlerState state, ITableContent table) throws BirtExcepti log.debug( "Details rows from ", startDetailsRow, " to ", endDetailsRow ); - if( ( startDetailsRow > 0 ) && ( endDetailsRow > startDetailsRow ) ) { + int autoWidthStartRow = startDetailsRow; + if( EmitterServices.booleanOption( state.getRenderOptions(), table, ExcelEmitter.AUTO_COL_WIDTHS_HEADER, false ) ) { + autoWidthStartRow = startRow; + } + int autoWidthEndRow = endDetailsRow; + if( EmitterServices.booleanOption( state.getRenderOptions(), table, ExcelEmitter.AUTO_COL_WIDTHS_FOOTER, false ) ) { + autoWidthEndRow = state.rowNum - 1; + } + + if( ( autoWidthStartRow >= 0 ) && ( autoWidthEndRow > autoWidthStartRow ) ) { boolean forceAutoColWidths = EmitterServices.booleanOption( state.getRenderOptions(), table, ExcelEmitter.FORCEAUTOCOLWIDTHS_PROP, false ); for( int col = 0; col < table.getColumnCount(); ++col ) { int oldWidth = state.currentSheet.getColumnWidth(col); if( forceAutoColWidths || ( oldWidth == 256 * state.currentSheet.getDefaultColumnWidth() ) ) { - FilteredSheet filteredSheet = new FilteredSheet( state.currentSheet, startDetailsRow, Math.min(endDetailsRow, startDetailsRow + 12) ); + FilteredSheet filteredSheet = new FilteredSheet( state.currentSheet, autoWidthStartRow, Math.min(autoWidthEndRow, autoWidthStartRow + 12) ); double calcWidth = SheetUtil.getColumnWidth( filteredSheet, col, false ); if (calcWidth > 1.0) { @@ -172,7 +214,7 @@ public void endTable(HandlerState state, ITableContent table) throws BirtExcepti } if( ! EmitterServices.booleanOption( state.getRenderOptions(), table, ExcelEmitter.DISPLAYZEROS_PROP, true ) ) { state.currentSheet.setDisplayZeros(false); - } + } } @Override @@ -180,6 +222,9 @@ public void startTableBand(HandlerState state, ITableBandContent band) throws Bi if( ( band.getBandType() == ITableBandContent.BAND_DETAIL ) && ( startDetailsRow < 0 ) ) { startDetailsRow = state.rowNum; } + if( ( band.getBandType() == ITableBandContent.BAND_HEADER ) && ( startHeaderRow < 0 )) { + startHeaderRow = state.rowNum; + } currentBand = band; } @@ -188,6 +233,15 @@ public void endTableBand(HandlerState state, ITableBandContent band) throws Birt if( band.getBandType() == ITableBandContent.BAND_DETAIL ) { endDetailsRow = state.rowNum - 1; } + if( ( band.getBandType() == ITableBandContent.BAND_HEADER ) && repeatHeader && (state.rowNum > startHeaderRow) ) { + int endHeaderRow = state.rowNum - 1; + + if( state.currentSheet.getRepeatingRows() == null ) { + CellRangeAddress repeatingRows = new CellRangeAddress(startHeaderRow, endHeaderRow, -1, -1); + // repeatingRows = CellRangeAddress.valueOf( Integer.toString(startHeaderRow+1) + ":" + Integer.toString(endHeaderRow+1) ); + state.currentSheet.setRepeatingRows(repeatingRows); + } + } currentBand = null; } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableRowHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableRowHandler.java index c75e581e2c7..096500efd45 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableRowHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/AbstractRealTableRowHandler.java @@ -76,11 +76,10 @@ public void resumeRow(HandlerState state) { log.debug( "Resume row at ", state.rowNum ); myRow = state.rowNum; - if( state.currentSheet.getRow(state.rowNum) == null ) { + currentRow = state.currentSheet.getRow(state.rowNum); + if( currentRow == null ) { log.debug( "Creating row ", state.rowNum ); currentRow = state.currentSheet.createRow( state.rowNum ); - } else { - currentRow = state.currentSheet.getRow( state.rowNum ); } state.requiredRowHeightInPoints = 0; diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/CellContentHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/CellContentHandler.java index c93e99c2346..e9a918ba9c2 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/CellContentHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/CellContentHandler.java @@ -38,7 +38,6 @@ import org.eclipse.birt.report.engine.content.IContent; import org.eclipse.birt.report.engine.content.IHyperlinkAction; import org.eclipse.birt.report.engine.content.IImageContent; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.css.engine.value.StringValue; import org.eclipse.birt.report.engine.css.engine.value.css.CSSConstants; import org.eclipse.birt.report.engine.emitter.IContentEmitter; @@ -59,6 +58,7 @@ import uk.co.spudsoft.birt.emitters.excel.RichTextRun; import uk.co.spudsoft.birt.emitters.excel.StyleManager; import uk.co.spudsoft.birt.emitters.excel.StyleManagerUtils; +import uk.co.spudsoft.birt.emitters.excel.StylePropertyIndexes; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; public class CellContentHandler extends AbstractHandler { @@ -72,6 +72,10 @@ public class CellContentHandler extends AbstractHandler { * The last value added to a cell */ protected Object lastValue; + /** + * The last value added to a cell + */ + protected String lastFormula; /** * The BIRT element that provided the lastValue */ @@ -132,38 +136,47 @@ public void startCell(HandlerState state, ICellContent cell) throws BirtExceptio protected void endCellContent(HandlerState state, ICellContent birtCell, IContent element, Cell cell, Area area ) { StyleManager sm = state.getSm(); StyleManagerUtils smu = state.getSmu(); - + BirtStyle birtCellStyle = null; - if( birtCell != null ) { - birtCellStyle = new BirtStyle( birtCell ); - if( element != null ) { - // log.debug( "Overlaying style from ", element ); - birtCellStyle.overlay( element ); + if( ! EmitterServices.booleanOption( state.getRenderOptions(), element, ExcelEmitter.NO_STYLES, false ) ) { + if( birtCell != null ) { + birtCellStyle = new BirtStyle( birtCell ); + if( element != null ) { + // log.debug( "Overlaying style from ", element ); + birtCellStyle.overlay( element ); + } + } else if( element != null ) { + birtCellStyle = new BirtStyle( element ); + } else { + birtCellStyle = new BirtStyle( state.getSm().getCssEngine() ); } - } else if( element != null ) { - birtCellStyle = new BirtStyle( element ); - } else { - birtCellStyle = new BirtStyle( state.getSm().getCssEngine() ); - } - if( preferredAlignment != null ) { - birtCellStyle.setProperty( StyleConstants.STYLE_TEXT_ALIGN, preferredAlignment ); - } - if( CSSConstants.CSS_TRANSPARENT_VALUE.equals(birtCellStyle.getString(StyleConstants.STYLE_BACKGROUND_COLOR))) { - if( parent != null ) { - birtCellStyle.setProperty( StyleConstants.STYLE_BACKGROUND_COLOR, parent.getBackgroundColour() ); + if( preferredAlignment != null ) { + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_TEXT_ALIGN, preferredAlignment ); + } + if( CSSConstants.CSS_TRANSPARENT_VALUE.equals(birtCellStyle.getString(StylePropertyIndexes.STYLE_BACKGROUND_COLOR))) { + if( parent != null ) { + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_BACKGROUND_COLOR, parent.getBackgroundColour() ); + } } } if( hyperlinkUrl != null ) { Hyperlink hyperlink = cell.getSheet().getWorkbook().getCreationHelper().createHyperlink(Hyperlink.LINK_URL); hyperlink.setAddress(hyperlinkUrl); cell.setHyperlink(hyperlink); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_COLOR, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_BLUE_VALUE ) ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_TEXT_UNDERLINE, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_UNDERLINE_VALUE ) ); } if( hyperlinkBookmark != null ) { Hyperlink hyperlink = cell.getSheet().getWorkbook().getCreationHelper().createHyperlink(Hyperlink.LINK_DOCUMENT); hyperlink.setAddress(prepareName( hyperlinkBookmark )); cell.setHyperlink(hyperlink); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_COLOR, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_BLUE_VALUE ) ); + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_TEXT_UNDERLINE, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_UNDERLINE_VALUE ) ); } + if( ( lastFormula != null ) && ( lastValue == null ) ) { + setCellContents( cell, null, lastFormula ); + } if( lastValue != null ) { if( lastValue instanceof String ) { String lastString = (String)lastValue; @@ -191,30 +204,34 @@ protected void endCellContent(HandlerState state, ICellContent birtCell, IConten log.debug("Finalising with ", runStart, " - ", lastString.length() ); rich.applyFont(runStart, lastString.length(), lastFont); - setCellContents( cell, rich ); + setCellContents( cell, rich, lastFormula ); } else { - setCellContents( cell, lastString ); + setCellContents( cell, lastString, lastFormula ); } - if( lastString.contains("\n") ) { - if( ! CSSConstants.CSS_NOWRAP_VALUE.equals( lastElement.getStyle().getWhiteSpace() ) ) { - birtCellStyle.setProperty( StyleConstants.STYLE_WHITE_SPACE, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_PRE_VALUE ) ); + if( birtCell != null ) { + if( lastString.contains("\n") ) { + if( ! CSSConstants.CSS_NOWRAP_VALUE.equals( lastElement.getStyle().getWhiteSpace() ) ) { + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_WHITE_SPACE, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_PRE_VALUE ) ); + } + } + if( ! richTextRuns.isEmpty() ) { + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_VERTICAL_ALIGN, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_TOP_VALUE ) ); + } + if( preferredAlignment != null ) { + birtCellStyle.setProperty( StylePropertyIndexes.STYLE_TEXT_ALIGN, preferredAlignment ); } - } - if( ! richTextRuns.isEmpty() ) { - birtCellStyle.setProperty( StyleConstants.STYLE_VERTICAL_ALIGN, new StringValue( StringValue.CSS_STRING, CSSConstants.CSS_TOP_VALUE ) ); - } - if( preferredAlignment != null ) { - birtCellStyle.setProperty( StyleConstants.STYLE_TEXT_ALIGN, preferredAlignment ); } } else { - setCellContents( cell, lastValue ); + setCellContents( cell, lastValue, lastFormula ); } } int colIndex = cell.getColumnIndex(); - state.getSmu().applyAreaBordersToCell(state.areaBorders, cell, birtCellStyle, state.rowNum, colIndex); + if( birtCellStyle != null ) { + state.getSmu().applyAreaBordersToCell(state.areaBorders, cell, birtCellStyle, state.rowNum, colIndex); + } if((birtCell != null) && (( birtCell.getColSpan() > 1 )||( birtCell.getRowSpan() > 1 ))) { AreaBorders mergedRegionBorders = AreaBorders.createForMergedCells( state.rowNum + birtCell.getRowSpan() - 1, colIndex, colIndex + birtCell.getColSpan() - 1, state.rowNum, birtCellStyle ); @@ -223,19 +240,21 @@ protected void endCellContent(HandlerState state, ICellContent birtCell, IConten } } - String customNumberFormat = EmitterServices.stringOption(state.getRenderOptions(), element, ExcelEmitter.CUSTOM_NUMBER_FORMAT, null); - if( customNumberFormat != null ) { - StyleManagerUtils.setNumberFormat(birtCellStyle, ExcelEmitter.CUSTOM_NUMBER_FORMAT + customNumberFormat, null); + if( birtCellStyle != null ) { + String customNumberFormat = EmitterServices.stringOption(state.getRenderOptions(), element, ExcelEmitter.CUSTOM_NUMBER_FORMAT, null); + if( customNumberFormat != null ) { + StyleManagerUtils.setNumberFormat(birtCellStyle, ExcelEmitter.CUSTOM_NUMBER_FORMAT + customNumberFormat, null); + } + + setCellStyle(sm, cell, birtCellStyle, lastValue); } - - setCellStyle(sm, cell, birtCellStyle, lastValue); // Excel auto calculates the row height (if it isn't specified) as long as the cell isn't merged - if it is merged I have to do it if( ( ( colSpan > 1 ) || ( state.rowHasSpans( state.rowNum ) ) ) && ( ( lastValue instanceof String ) || ( lastValue instanceof RichTextString ) ) ) { int spannedRowAlgorithm = EmitterServices.integerOption(state.getRenderOptions(), element, ExcelEmitter.SPANNED_ROW_HEIGHT, ExcelEmitter.SPANNED_ROW_HEIGHT_SPREAD); Font defaultFont = state.getWb().getFontAt(cell.getCellStyle().getFontIndex()); double cellWidth = spanWidthMillimetres( state.currentSheet, cell.getColumnIndex(), cell.getColumnIndex() + colSpan - 1 ); - float cellDesiredHeight = smu.calculateTextHeightPoints( cell.getStringCellValue(), defaultFont, cellWidth, richTextRuns ); + float cellDesiredHeight = smu.calculateTextHeightPoints( cell.getStringCellValue(), defaultFont, cellWidth, richTextRuns, cell.getCellStyle().getWrapText() ); if( cellDesiredHeight > state.requiredRowHeightInPoints ) { int rowSpan = birtCell.getRowSpan(); if( rowSpan < 2 ) { @@ -269,6 +288,7 @@ protected void endCellContent(HandlerState state, ICellContent birtCell, IConten } lastValue = null; + lastFormula = null; lastElement = null; richTextRuns.clear(); } @@ -299,8 +319,17 @@ private double spanWidthMillimetres( Sheet sheet, int startCol, int endCol ) { * @param element * The BIRT element supplying the value, used to set the style of the cell. */ - private void setCellContents(Cell cell, Object value) { + private void setCellContents(Cell cell, Object value, String formula) { log.debug( "Setting cell[", cell.getRow().getRowNum(), ",", cell.getColumnIndex(), "] value to ", value ); + + if( formula != null ) { + formula = formula.trim(); + if( formula.startsWith("=") ) { + formula = formula.substring(1).trim(); + } + cell.setCellFormula(formula); + } + if( value instanceof Double ) { // cell.setCellType(Cell.CELL_TYPE_NUMERIC); cell.setCellValue((Double)value); @@ -374,7 +403,7 @@ private void setCellStyle( StyleManager sm, Cell cell, BirtStyle birtStyle, Obje } private CSSValue preferredAlignment( BirtStyle elementStyle ) { - CSSValue newAlign = elementStyle.getProperty(StyleConstants.STYLE_TEXT_ALIGN); + CSSValue newAlign = elementStyle.getProperty(StylePropertyIndexes.STYLE_TEXT_ALIGN); if( newAlign == null ) { newAlign = new StringValue(StringValue.CSS_STRING, CSSConstants.CSS_LEFT_VALUE); } @@ -402,14 +431,24 @@ private CSSValue preferredAlignment( BirtStyle elementStyle ) { * The value to put into the current cell. */ protected void emitContent(HandlerState state, IContent element, Object value, boolean asBlock) { - if( value == null ) { - return ; - } if( element.getBookmark() != null ) { createName(state, prepareName( element.getBookmark() ), state.rowNum, state.colNum, state.rowNum, state.colNum); } - if( lastValue == null ) { + String formula = EmitterServices.stringOption( null, element, ExcelEmitter.FORMULA, null); + if( ( formula == null ) && EmitterServices.booleanOption( null, element, ExcelEmitter.VALUE_AS_FORMULA, false ) ) { + formula = value != null ? value.toString() : null; + value = null; + } + if( formula != null ) { + lastFormula = formula; + } + + if( value == null ) { + return ; + } + + if( ( lastValue == null ) && ( value != null ) ) { lastValue = value; lastElement = element; lastCellContentsWasBlock = asBlock; @@ -439,32 +478,34 @@ protected void emitContent(HandlerState state, IContent element, Object value, b StyleManager sm = state.getSm(); - // Both to be improved to include formatting - String oldValue = lastValue.toString(); - String newComponent = value.toString(); - - if( lastCellContentsWasBlock - && ! newComponent.startsWith("\n") - && ! oldValue.endsWith("\n") ) { - oldValue = oldValue + "\n"; - lastCellContentsWasBlock = false; - } - if( lastCellContentsRequiresSpace - && ! newComponent.startsWith("\n") - && ! oldValue.endsWith("\n") ) { - oldValue = oldValue + " "; - lastCellContentsRequiresSpace = false; - } - - String newValue = oldValue + newComponent; - lastValue = newValue; - - if( element != null ) { - BirtStyle elementStyle = new BirtStyle(element); - Font newFont = sm.getFontManager().getFont( elementStyle ); - richTextRuns.add(new RichTextRun(oldValue.length(), newFont)); - - preferredAlignment = preferredAlignment(elementStyle); + if( lastValue != null ) { + // Both to be improved to include formatting + String oldValue = lastValue.toString(); + String newComponent = value.toString(); + + if( lastCellContentsWasBlock + && ! newComponent.startsWith("\n") + && ! oldValue.endsWith("\n") ) { + oldValue = oldValue + "\n"; + lastCellContentsWasBlock = false; + } + if( lastCellContentsRequiresSpace + && ! newComponent.startsWith("\n") + && ! oldValue.endsWith("\n") ) { + oldValue = oldValue + " "; + lastCellContentsRequiresSpace = false; + } + + String newValue = oldValue + newComponent; + lastValue = newValue; + + if( element != null ) { + BirtStyle elementStyle = new BirtStyle(element); + Font newFont = sm.getFontManager().getFont( elementStyle ); + richTextRuns.add(new RichTextRun(oldValue.length(), newFont)); + + preferredAlignment = preferredAlignment(elementStyle); + } } lastCellContentsWasBlock = asBlock; diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedListHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedListHandler.java index fa3c9aa8e82..5930143ab66 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedListHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedListHandler.java @@ -23,6 +23,7 @@ import org.eclipse.birt.report.engine.content.IListBandContent; import org.eclipse.birt.report.engine.content.IListContent; import org.eclipse.birt.report.engine.content.IListGroupContent; +import org.eclipse.birt.report.engine.content.ITableContent; import org.eclipse.birt.report.engine.content.ITextContent; import uk.co.spudsoft.birt.emitters.excel.HandlerState; @@ -37,6 +38,14 @@ public FlattenedListHandler(CellContentHandler contentHandler, Logger log, IHand this.contentHandler = contentHandler; } + + @Override + public void startTable(HandlerState state, ITableContent table) throws BirtException { + state.setHandler(new FlattenedTableHandler(contentHandler, log, this, table)); + state.getHandler().startTable(state, table); + } + + @Override public void startList(HandlerState state, IListContent list) throws BirtException { } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedTableHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedTableHandler.java index 3a0ccdadb2f..fc001a31ded 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedTableHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/FlattenedTableHandler.java @@ -14,6 +14,7 @@ package uk.co.spudsoft.birt.emitters.excel.handlers; import org.eclipse.birt.core.exception.BirtException; +import org.eclipse.birt.report.engine.content.IListContent; import org.eclipse.birt.report.engine.content.IRowContent; import org.eclipse.birt.report.engine.content.ITableBandContent; import org.eclipse.birt.report.engine.content.ITableContent; @@ -33,14 +34,18 @@ public FlattenedTableHandler(CellContentHandler contentHandler, Logger log, IHan this.contentHandler = contentHandler; } + + + @Override + public void startList(HandlerState state, IListContent list) throws BirtException { + state.setHandler(new FlattenedListHandler(contentHandler, log, this, list)); + state.getHandler().startList(state, list); + } + + + @Override public void startTable(HandlerState state, ITableContent table) throws BirtException { - if( ( state.sheetName == null ) || state.sheetName.isEmpty() ) { - String name = table.getName(); - if( ( name != null ) && ! name.isEmpty() ) { - state.sheetName = name; - } - } if( ( state.sheetPassword == null ) || state.sheetPassword.isEmpty() ) { String password = EmitterServices.stringOption( state.getRenderOptions(), table, ExcelEmitter.SHEET_PASSWORD, null); if( ( password != null ) && ! password.isEmpty() ) { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListContentHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListContentHandler.java index 99d58aa460c..38b973dd0f6 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListContentHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListContentHandler.java @@ -21,12 +21,12 @@ import org.eclipse.birt.report.engine.content.ILabelContent; import org.eclipse.birt.report.engine.content.IListContent; import org.eclipse.birt.report.engine.content.ITextContent; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.emitter.IContentEmitter; import org.eclipse.birt.report.engine.layout.pdf.util.HTML2Content; import uk.co.spudsoft.birt.emitters.excel.Coordinate; import uk.co.spudsoft.birt.emitters.excel.HandlerState; +import uk.co.spudsoft.birt.emitters.excel.StylePropertyIndexes; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; public class NestedListContentHandler extends CellContentHandler { @@ -43,13 +43,13 @@ public NestedListContentHandler(IContentEmitter emitter, Logger log, IHandler pa public void emitText(HandlerState state, ITextContent text) throws BirtException { String textText = text.getText(); log.debug( "text:", textText ); - emitContent(state,text,textText, ( ! "inline".equals( getStyleProperty(text, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,text,textText, ( ! "inline".equals( getStyleProperty(text, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); state.setHandler(parent); } @Override public void emitData(HandlerState state, IDataContent data) throws BirtException { - emitContent(state,data,data.getValue(), ( ! "inline".equals( getStyleProperty(data, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,data,data.getValue(), ( ! "inline".equals( getStyleProperty(data, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); state.setHandler(parent); } @@ -58,13 +58,13 @@ public void emitLabel(HandlerState state, ILabelContent label) throws BirtExcept // String labelText = ( label.getLabelText() != null ) ? label.getLabelText() : label.getText(); String labelText = ( label.getText() != null ) ? label.getText() : label.getLabelText(); log.debug( "labelText:", labelText ); - emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StyleConstants.STYLE_DISPLAY, "block") ) )); + emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StylePropertyIndexes.STYLE_DISPLAY, "block") ) )); state.setHandler(parent); } @Override public void emitAutoText(HandlerState state, IAutoTextContent autoText) throws BirtException { - emitContent(state,autoText,autoText.getText(), ( ! "inline".equals( getStyleProperty(autoText, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,autoText,autoText.getText(), ( ! "inline".equals( getStyleProperty(autoText, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); state.setHandler(parent); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListHandler.java index 0783baec734..83a39a20406 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedListHandler.java @@ -13,8 +13,10 @@ package uk.co.spudsoft.birt.emitters.excel.handlers; +import org.eclipse.birt.core.exception.BirtException; import org.eclipse.birt.report.engine.content.IListContent; +import uk.co.spudsoft.birt.emitters.excel.HandlerState; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; public class NestedListHandler extends TopLevelListHandler { @@ -23,4 +25,16 @@ public NestedListHandler(Logger log, IHandler parent, IListContent list) { super(log, parent, list); } + @Override + public void startList(HandlerState state, IListContent list) throws BirtException { + String name = list.getName(); + if( ( name != null ) && ! name.isEmpty() ) { + state.sheetName = name; + } + super.startList(state, list); + + } + + + } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedTableHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedTableHandler.java index 8e12b8e27da..1e26f27f4b0 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedTableHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/NestedTableHandler.java @@ -66,12 +66,11 @@ public void startTable(HandlerState state, ITableContent table) throws BirtExcep topLeft = new Coordinate(state.rowNum, state.colNum); log.debug( "startTable called with topLeft = [", topLeft.getRow(), ", ", topLeft.getCol(), "]" ); super.startTable(state, table); - if( ( state.sheetName == null ) || state.sheetName.isEmpty() ) { - String name = table.getName(); - if( ( name != null ) && ! name.isEmpty() ) { - state.sheetName = name; - } + String name = table.getName(); + if( ( name != null ) && ! name.isEmpty() ) { + state.sheetName = name; } + if( ( state.sheetPassword == null ) || state.sheetPassword.isEmpty() ) { String password = EmitterServices.stringOption( state.getRenderOptions(), table, ExcelEmitter.SHEET_PASSWORD, null); if( ( password != null ) && ! password.isEmpty() ) { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/PageHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/PageHandler.java index 31f618c7a20..48743fc36d6 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/PageHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/PageHandler.java @@ -14,15 +14,19 @@ package uk.co.spudsoft.birt.emitters.excel.handlers; import java.util.Collection; +import java.util.regex.Pattern; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.ClientAnchor; import org.apache.poi.ss.usermodel.Drawing; import org.apache.poi.ss.usermodel.HeaderFooter; import org.apache.poi.ss.usermodel.PrintSetup; +import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddress; import org.eclipse.birt.core.exception.BirtException; +import org.eclipse.birt.report.engine.api.script.IReportContext; import org.eclipse.birt.report.engine.content.IAutoTextContent; import org.eclipse.birt.report.engine.content.IContent; import org.eclipse.birt.report.engine.content.IDataContent; @@ -49,6 +53,10 @@ public class PageHandler extends AbstractHandler { + private static Pattern INVALID_CHARS_REGEX = Pattern.compile( "[/\\\\*'?\\[\\]:]+" ); + + boolean created; + public PageHandler(Logger log, IPageContent page) { super(log, null, page); } @@ -123,9 +131,21 @@ private void outputStructuredHeaderFooter( HandlerState state, Collection birtHe } + private void cleanSheet( Sheet sheet ) { + for( int i = 0; i < sheet.getNumMergedRegions(); ++i ) { + sheet.removeMergedRegion(i); + } + while( sheet.getPhysicalNumberOfRows() > 0 ) { + Row row = sheet.getRow(sheet.getLastRowNum()); + sheet.removeRow(row); + } + } + @Override public void startPage(HandlerState state, IPageContent page) throws BirtException { + element = page; + if( state.getWb().getNumberOfSheets() > 0 ) { if( EmitterServices.booleanOption( state.getRenderOptions(), page, ExcelEmitter.SINGLE_SHEET_PAGE_BREAKS, false ) ) { state.currentSheet.setRowBreak( state.rowNum - 1 ); @@ -135,7 +155,56 @@ public void startPage(HandlerState state, IPageContent page) throws BirtExceptio } } - state.currentSheet = state.getWb().createSheet(); + state.currentSheet = null; + created = false; + } + + private void createSheet(HandlerState state, IContent newElement) throws BirtException { + if( created ) { + return ; + } + IPageContent page = (IPageContent)element; + if( EmitterServices.booleanOption( state.getRenderOptions(), page, ExcelEmitter.SINGLE_SHEET, false ) + && state.getWb().getNumberOfSheets() > 0 ) { + return ; + } + + String pageLabel = null; + IReportContext reportContext = page.getReportContent().getReportContext(); + if( reportContext != null ) { + Object pageLabelObject = reportContext.getPageVariable( IReportContext.PAGE_VAR_PAGE_LABEL ); + if( pageLabelObject instanceof String ) { + pageLabel = (String)pageLabel; + } + } + if( pageLabel == null ) { + String name = newElement.getName(); + if( ( name != null ) && ! name.isEmpty() ) { + pageLabel = name; + } + } + if( pageLabel == null ) { + String name = page.getReportContent().getTitle(); + if( ( name != null ) && ! name.isEmpty() ) { + pageLabel = name; + } + } + + if( pageLabel != null ) { + state.sheetName = null; + String sheetName = prepareSheetName(state, pageLabel); + int sheetIndex = findNamedSheetIndex( state.getWb(), sheetName ); + if( sheetIndex >= 0 ) { + state.currentSheet = state.getWb().getSheetAt( sheetIndex ); + cleanSheet( state.currentSheet ); + } else { + state.currentSheet = state.getWb().createSheet( sheetName ); + } + } else { + state.currentSheet = state.getWb().createSheet(); + } + created = true; + log.debug("Page type: ", page.getPageType()); if( page.getPageType() != null ) { @@ -169,35 +238,81 @@ public void startPage(HandlerState state, IPageContent page) throws BirtExceptio state.currentSheet.getPrintSetup().setScale((short)printScale); } - if( EmitterServices.booleanOption( state.getRenderOptions(), page, ExcelEmitter.STRUCTURED_HEADER, false ) ) { + boolean structuredHeader = + ! state.getEmitter().isExtractMode() + && EmitterServices.booleanOption( state.getRenderOptions(), page, ExcelEmitter.STRUCTURED_HEADER, false ); + if( structuredHeader ) { outputStructuredHeaderFooter(state, page.getHeader()); } else { processHeaderFooter(state, page.getHeader(), state.currentSheet.getHeader() ); processHeaderFooter(state, page.getFooter(), state.currentSheet.getFooter() ); } - state.getSmu().prepareMarginDimensions(state.currentSheet, page); + state.getSmu().prepareMarginDimensions(state.currentSheet, page, !structuredHeader); } - private String prepareSheetName( HandlerState state ) { - if( state.sheetName != null ) { - String preparedName = state.sheetName; - Integer nameCount = state.sheetNames.get(preparedName); - if( nameCount != null ) { - ++nameCount; - state.sheetNames.put(preparedName, nameCount); - preparedName = preparedName + " " + nameCount; + private String prepareSheetName( HandlerState state, String proposedName ) { + // Strip invalid chars + proposedName = INVALID_CHARS_REGEX.matcher(proposedName).replaceAll(" "); + + String preparedName = proposedName.length() > 31 ? proposedName.substring(0,31) : proposedName; + + // Check whether there are really any sheets with that name + boolean found = false; + Workbook wb = state.getWb(); + for( int i = 0; i < wb.getNumberOfSheets(); ++i ) { + if( wb.getSheetName( i ).startsWith( preparedName ) ) { + found = true; + break; + } + } + if( ! found ) { + state.sheetNames.remove(preparedName); + } + + Integer nameCount = state.sheetNames.get(preparedName); + if( nameCount != null ) { + ++nameCount; + String suffix = " " + nameCount; + state.sheetNames.put(preparedName, nameCount); + if( preparedName.length() > 31 - suffix.length() ) { + preparedName = preparedName.substring(0,31 - suffix.length()) + " " + nameCount; } else { - state.sheetNames.put(preparedName,1); + preparedName = preparedName + " " + nameCount; } - return preparedName; - } - return null; + } else { + state.sheetNames.put(preparedName,1); + } + return preparedName; + } + + private int findNamedSheetIndex( Workbook workbook, String sheetName ) { + for( int i = 0; i < workbook.getNumberOfSheets(); ++i ) { + if( workbook.getSheetName(i).equalsIgnoreCase(sheetName)) { + log.debug("Found matching sheet at ", i, " \"", workbook.getSheetName(i), "\"" ); + return i; + } + } + return -1; + } + + private int sheetIndex( Workbook workbook, Sheet sheet ) { + for( int i = 0; i < workbook.getNumberOfSheets(); ++i ) { + if( workbook.getSheetAt(i) == sheet ) { + return i; + } + } + return -1; } @Override public void endPage(HandlerState state, IPageContent page) throws BirtException { + if( ( state.sheetName != null ) && ! state.sheetName.isEmpty() ) { + String newSheetName = prepareSheetName( state, state.sheetName ); + state.getWb().setSheetName( sheetIndex( state.getWb(), state.currentSheet ), newSheetName ); + } + if( EmitterServices.booleanOption( state.getRenderOptions(), page, ExcelEmitter.SINGLE_SHEET, false ) && ! state.reportEnding ) { return ; @@ -207,27 +322,6 @@ public void endPage(HandlerState state, IPageContent page) throws BirtException outputStructuredHeaderFooter(state, page.getFooter()); } - String sheetName = prepareSheetName( state ); - if( sheetName != null ) { - log.debug("Attempting to name sheet ", ( state.getWb().getNumberOfSheets() - 1 ), " \"", sheetName, "\" "); - int existingSheetIndex = -1; - for( int i = 0; i < state.getWb().getNumberOfSheets() - 1; ++i ) { - if( state.getWb().getSheetName(i).equals(sheetName)) { - log.debug("Found matching sheet at ", i, " \"", state.getWb().getSheetName(i), "\"" ); - existingSheetIndex = i; - break; - } - } - if (existingSheetIndex >= 0) { - log.debug("Deleting sheet at ", existingSheetIndex, " \"", state.getWb().getSheetName(existingSheetIndex), "\"" ); - state.getWb().removeSheetAt(existingSheetIndex); - } - state.getWb().setSheetName(state.getWb().getNumberOfSheets() - 1, sheetName); - if (existingSheetIndex >= 0) { - state.getWb().setSheetOrder(sheetName,existingSheetIndex); - } - state.sheetName = null; - } if( state.sheetPassword != null ) { log.debug("Attempting to protect sheet ", ( state.getWb().getNumberOfSheets() - 1 ) ); state.currentSheet.protectSheet( state.sheetPassword ); @@ -247,7 +341,9 @@ public void endPage(HandlerState state, IPageContent page) throws BirtException state.clearRowSpans(); state.areaBorders.clear(); + created = false; state.currentSheet = null; + state.sheetName = null; } private CellRangeAddress getMergedRegionBegunBy( Sheet sheet, int row, int col ) { @@ -272,6 +368,12 @@ private CellRangeAddress getMergedRegionBegunBy( Sheet sheet, int row, int col ) private void processCellImage( HandlerState state, Drawing drawing, CellImage cellImage ) { Coordinate location = cellImage.location; + if( state.currentSheet.getRow( location.getRow() ) == null ) { + state.currentSheet.createRow( location.getRow() ); + } + if( state.currentSheet.getRow( location.getRow() ).getCell( location.getCol() ) == null ) { + state.currentSheet.getRow( location.getRow() ).createCell( location.getCol() ); + } Cell cell = state.currentSheet.getRow( location.getRow() ).getCell( location.getCol() ); IImageContent image = cellImage.image; @@ -286,13 +388,13 @@ private void processCellImage( HandlerState state, Drawing drawing, CellImage ce int endCol = cell.getColumnIndex(); double lastColWidth = ClientAnchorConversions.widthUnits2Millimetres( (short)state.currentSheet.getColumnWidth( endCol ) ) + 2.0; - int dx = smu.anchorDxFromMM( lastColWidth, lastColWidth ); double mmWidth = 0.0; if( smu.isAbsolute(image.getWidth())) { mmWidth = image.getWidth().convertTo(DimensionType.UNITS_MM); } else if(smu.isPixels(image.getWidth())) { mmWidth = ClientAnchorConversions.pixels2Millimetres( image.getWidth().getMeasure() ); } + int dx = smu.anchorDxFromMM( mmWidth, lastColWidth ); // Allow image to span multiple columns CellRangeAddress mergedRegion = getMergedRegionBegunBy( state.currentSheet, location.getRow(), location.getCol() ); if( (cellImage.spanColumns) || ( mergedRegion != null ) ) { @@ -313,9 +415,6 @@ private void processCellImage( HandlerState state, Drawing drawing, CellImage ce dx = smu.anchorDxFromMM( mmShort, lastColWidth ); } } - } else { - float widthRatio = (float)(mmWidth / lastColWidth); - ptHeight = ptHeight / widthRatio; } int rowsSpanned = state.findRowsSpanned( cell.getRowIndex(), cell.getColumnIndex() ); @@ -323,7 +422,9 @@ private void processCellImage( HandlerState state, Drawing drawing, CellImage ce for( int i = 0; i < rowsSpanned; ++i ) { int rowIndex = cell.getRowIndex() + 1 + i; - neededRowHeightPoints -= state.currentSheet.getRow(rowIndex).getHeightInPoints(); + if( state.currentSheet.getRow(rowIndex) != null ) { + neededRowHeightPoints -= state.currentSheet.getRow(rowIndex).getHeightInPoints(); + } } if( neededRowHeightPoints > cell.getRow().getHeightInPoints()) { @@ -345,48 +446,56 @@ private void processCellImage( HandlerState state, Drawing drawing, CellImage ce @Override public void startList(HandlerState state, IListContent list) throws BirtException { + createSheet( state, list ); state.setHandler(new TopLevelListHandler(log,this,list)); state.getHandler().startList(state, list); } @Override public void startTable(HandlerState state, ITableContent table) throws BirtException { + createSheet( state, table ); state.setHandler(new TopLevelTableHandler(log,this,table)); state.getHandler().startTable(state, table); } @Override public void emitText(HandlerState state, ITextContent text) throws BirtException { + createSheet( state, text ); state.setHandler(new TopLevelContentHandler(state.getEmitter(), log, this)); state.getHandler().emitText(state, text); } @Override public void emitData(HandlerState state, IDataContent data) throws BirtException { + createSheet( state, data ); state.setHandler(new TopLevelContentHandler(state.getEmitter(), log, this)); state.getHandler().emitData(state, data); } @Override public void emitLabel(HandlerState state, ILabelContent label) throws BirtException { + createSheet( state, label ); state.setHandler(new TopLevelContentHandler(state.getEmitter(), log, this)); state.getHandler().emitLabel(state, label); } @Override public void emitAutoText(HandlerState state, IAutoTextContent autoText) throws BirtException { + createSheet( state, autoText ); state.setHandler(new TopLevelContentHandler(state.getEmitter(), log, this)); state.getHandler().emitAutoText(state, autoText); } @Override public void emitForeign(HandlerState state, IForeignContent foreign) throws BirtException { + createSheet( state, foreign ); state.setHandler(new TopLevelContentHandler(state.getEmitter(), log, this)); state.getHandler().emitForeign(state, foreign); } @Override public void emitImage(HandlerState state, IImageContent image) throws BirtException { + createSheet( state, image ); state.setHandler(new TopLevelContentHandler(state.getEmitter(), log, this)); state.getHandler().emitImage(state, image); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/StringCellHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/StringCellHandler.java index 193f1342b56..4255ae38fcf 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/StringCellHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/StringCellHandler.java @@ -25,12 +25,12 @@ import org.eclipse.birt.report.engine.content.ILabelContent; import org.eclipse.birt.report.engine.content.ITableContent; import org.eclipse.birt.report.engine.content.ITextContent; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.emitter.IContentEmitter; import org.eclipse.birt.report.engine.layout.pdf.util.HTML2Content; import uk.co.spudsoft.birt.emitters.excel.Area; import uk.co.spudsoft.birt.emitters.excel.HandlerState; +import uk.co.spudsoft.birt.emitters.excel.StylePropertyIndexes; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; public class StringCellHandler extends CellContentHandler { @@ -100,24 +100,24 @@ public void startTable(HandlerState state, ITableContent table) throws BirtExcep public void emitText(HandlerState state, ITextContent text) throws BirtException { String textText = text.getText(); log.debug( "text:", textText ); - emitContent(state,text,textText, ( ! "inline".equals( getStyleProperty(text, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,text,textText, ( ! "inline".equals( getStyleProperty(text, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); } @Override public void emitData(HandlerState state, IDataContent data) throws BirtException { - emitContent(state,data,data.getValue(), ( ! "inline".equals( getStyleProperty(data, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,data,data.getValue(), ( ! "inline".equals( getStyleProperty(data, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); } @Override public void emitLabel(HandlerState state, ILabelContent label) throws BirtException { String labelText = ( label.getLabelText() != null ) ? label.getLabelText() : label.getText(); log.debug( "labelText:" + labelText ); - emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StyleConstants.STYLE_DISPLAY, "block") ) )); + emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StylePropertyIndexes.STYLE_DISPLAY, "block") ) )); } @Override public void emitAutoText(HandlerState state, IAutoTextContent autoText) throws BirtException { - emitContent(state,autoText,autoText.getText(), ( ! "inline".equals( getStyleProperty(autoText, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state,autoText,autoText.getText(), ( ! "inline".equals( getStyleProperty(autoText, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); } @Override @@ -137,7 +137,7 @@ public void emitImage(HandlerState state, IImageContent image) throws BirtExcept @Override public void endContainer(HandlerState state, IContainerContent container) throws BirtException { - lastCellContentsWasBlock = ( ! "inline".equals( getStyleProperty(container, StyleConstants.STYLE_DISPLAY, "block") ) ); + lastCellContentsWasBlock = ( ! "inline".equals( getStyleProperty(container, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelContentHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelContentHandler.java index 38d11cd9af4..e4d1d88eae6 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelContentHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelContentHandler.java @@ -20,12 +20,12 @@ import org.eclipse.birt.report.engine.content.IImageContent; import org.eclipse.birt.report.engine.content.ILabelContent; import org.eclipse.birt.report.engine.content.ITextContent; -import org.eclipse.birt.report.engine.css.engine.StyleConstants; import org.eclipse.birt.report.engine.emitter.IContentEmitter; import org.eclipse.birt.report.engine.layout.pdf.util.HTML2Content; import uk.co.spudsoft.birt.emitters.excel.Coordinate; import uk.co.spudsoft.birt.emitters.excel.HandlerState; +import uk.co.spudsoft.birt.emitters.excel.StylePropertyIndexes; import uk.co.spudsoft.birt.emitters.excel.framework.Logger; public class TopLevelContentHandler extends CellContentHandler { @@ -40,10 +40,10 @@ public void emitText(HandlerState state, ITextContent text) throws BirtException log.debug( "Creating row ", state.rowNum, " for text" ); state.currentSheet.createRow( state.rowNum ); - emitContent(state, text, text.getText(), ( ! "inline".equals( getStyleProperty(text, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state, text, text.getText(), ( ! "inline".equals( getStyleProperty(text, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); Cell currentCell = state.currentSheet.getRow(state.rowNum).createCell( 0 ); - currentCell.setCellType(Cell.CELL_TYPE_BLANK); + // currentCell.setCellType(Cell.CELL_TYPE_BLANK); endCellContent(state, null, text, currentCell, null); @@ -56,10 +56,10 @@ public void emitData(HandlerState state, IDataContent data) throws BirtException log.debug( "Creating row ", state.rowNum, " for data" ); state.currentSheet.createRow( state.rowNum ); - emitContent(state, data, data.getValue(), ( ! "inline".equals( getStyleProperty(data, StyleConstants.STYLE_DISPLAY, "block") ) ) ); + emitContent(state, data, data.getValue(), ( ! "inline".equals( getStyleProperty(data, StylePropertyIndexes.STYLE_DISPLAY, "block") ) ) ); Cell currentCell = state.currentSheet.getRow(state.rowNum).createCell( 0 ); - currentCell.setCellType(Cell.CELL_TYPE_BLANK); + // currentCell.setCellType(Cell.CELL_TYPE_BLANK); endCellContent(state, null, data, currentCell, null); @@ -73,10 +73,10 @@ public void emitLabel(HandlerState state, ILabelContent label) throws BirtExcept state.currentSheet.createRow( state.rowNum ); String labelText = ( label.getLabelText() != null ) ? label.getLabelText() : label.getText(); - emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StyleConstants.STYLE_DISPLAY, "block") ) )); + emitContent(state,label,labelText, ( ! "inline".equals( getStyleProperty(label, StylePropertyIndexes.STYLE_DISPLAY, "block") ) )); Cell currentCell = state.currentSheet.getRow(state.rowNum).createCell( 0 ); - currentCell.setCellType(Cell.CELL_TYPE_BLANK); + // currentCell.setCellType(Cell.CELL_TYPE_BLANK); endCellContent(state, null, label, currentCell, null); @@ -104,7 +104,7 @@ public void emitImage(HandlerState state, IImageContent image) throws BirtExcept recordImage(state, new Coordinate( state.rowNum, 0 ), image, true); Cell currentCell = state.currentSheet.getRow(state.rowNum).createCell( 0 ); - currentCell.setCellType(Cell.CELL_TYPE_BLANK); + // currentCell.setCellType(Cell.CELL_TYPE_BLANK); endCellContent(state, null, image, currentCell, null); diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelListHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelListHandler.java index 353238191a1..aee5511ebb8 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelListHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelListHandler.java @@ -47,10 +47,6 @@ public TopLevelListHandler(Logger log,IHandler parent, IListContent list) { public void startList(HandlerState state, IListContent list) throws BirtException { log.debug( "Call startList on ", this ); super.startList(state, list); - String name = list.getName(); - if( ( name != null ) && ! name.isEmpty() ) { - state.sheetName = name; - } String password = EmitterServices.stringOption( state.getRenderOptions(), list, ExcelEmitter.SHEET_PASSWORD, null); if( ( password != null ) && ! password.isEmpty() ) { @@ -75,7 +71,6 @@ public void startListGroup(HandlerState state, IListGroupContent group) throws B } groupStarts.push(state.rowNum); - Object groupDesignObject = group.getGenerateBy(); if( groupDesignObject instanceof ListGroupDesign ) { ListGroupDesign groupDesign = (ListGroupDesign)groupDesignObject; diff --git a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelTableHandler.java b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelTableHandler.java index 2952d60e6fc..3df88f8631c 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelTableHandler.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel/src/uk/co/spudsoft/birt/emitters/excel/handlers/TopLevelTableHandler.java @@ -40,10 +40,6 @@ public TopLevelTableHandler(Logger log,IHandler parent, ITableContent table) { public void startTable(HandlerState state, ITableContent table) throws BirtException { state.colNum = 0; super.startTable(state, table); - String name = table.getName(); - if( ( name != null ) && ! name.isEmpty() ) { - state.sheetName = name; - } String password = EmitterServices.stringOption( state.getRenderOptions(), table, ExcelEmitter.SHEET_PASSWORD, null); if( ( password != null ) && ! password.isEmpty() ) { @@ -71,6 +67,8 @@ public void endTable(HandlerState state, ITableContent table) throws BirtExcepti } state.setHandler(parent); + + state.colNum = 0; } @Override @@ -78,7 +76,7 @@ public void startRow(HandlerState state, IRowContent row) throws BirtException { state.setHandler(new TopLevelTableRowHandler(log, this, row)); state.getHandler().startRow(state, row); } - + @Override public void startTableGroup(HandlerState state, ITableGroupContent group) throws BirtException { log.debug( "startTableGroup @" + state.rowNum + " called " + group.getBookmark() ); From 45ec28a3c1c2cc89b3d0ee1a5f92941ce2eb1447 Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Fri, 25 Oct 2019 17:02:45 +0200 Subject: [PATCH 06/16] Updated the Spudsoft Excel Emitter to the latest release 0.8.0.201310230652 from Jim Talbut --- .../emitters/bugfix/FixedExecutorManager.java | 36 + .../bugfix/FixedListItemExecutor.java | 23 + .../birt/emitters/bugfix/FixedRenderTask.java | 2 + .../emitters/bugfix/FixedReportExecutor.java | 14 + .../birt/emitters/bugfix/FixedRunTask.java | 401 + .../bugfix/FixedTableItemExecutor.java | 23 + .../emitters/excel/tests/AutoFilterTest.java | 5 +- .../excel/tests/BigCrosstab.rptdesign | 7 +- .../excel/tests/Borders2ReportTest.java | 3 - .../emitters/excel/tests/Hyperlinks.rptdesign | 5 +- .../emitters/excel/tests/HyperlinksTest.java | 16 +- ...ClassCastExceptionIfCrosstabHasNoData.java | 46 + ...CastExceptionIfCrosstabHasNoData.rptdesign | 575 + .../excel/tests/Issue102Wrapping.java | 49 + .../excel/tests/Issue102Wrapping.rptdesign | 500 + .../tests/Issue107ForceRecalculation.java | 67 + .../Issue107ForceRecalculation.rptdesign | 542 + .../tests/Issue107ForceRecalculation.xls | Bin 0 -> 17920 bytes ...ssue109FormulaParseExceptionEmptyList.java | 45 + ...09FormulaParseExceptionEmptyList.rptdesign | 532 + .../tests/Issue110ListElementsOffset.java | 160 + .../Issue110ListElementsOffset.rptdesign | 879 + ...sue110ListElementsOffsetListOnly.rptdesign | 766 + ...tElementsOffsetMultiNestedTables.rptdesign | 1098 + .../tests/Issue112BetterDesign.rptdesign | 2069 ++ ...ethodNotImplementedDeeplyNestedTables.java | 72 + ...NotImplementedDeeplyNestedTables.rptdesign | 2047 ++ .../Issue114IncorrectHeightCalculation.java | 71 + ...sue114IncorrectHeightCalculation.rptdesign | 556 + ...ncorrectHeightCalculationExample.rptdesign | 371 + .../excel/tests/Issue43StructuredHeader.java | 26 + .../tests/Issue61SheetNameWithGroups.java | 4 +- .../Issue61SheetNameWithGroups.rptdesign | 4 +- .../excel/tests/Issue65DynamicImageSize.java | 49 + .../tests/Issue65DynamicImageSize.rptdesign | 733 + .../Issue66SingleSheetWithPageBreaks.java | 2 +- .../excel/tests/Issue76ExistingWorkbook.java | 2 +- .../tests/Issue76ExistingWorkbook.rptdesign | 7 +- .../emitters/excel/tests/Issue85Formulae.java | 94 + .../excel/tests/Issue85Formulae.rptdesign | 449 + .../excel/tests/Issue87PrintSettings.java | 31 +- .../excel/tests/MannedSpaceMissions.xlsx | Bin 21629 -> 21197 bytes .../emitters/excel/tests/MegaSize.rptdesign | 21022 ++++++++-------- .../excel/tests/MegaSize60000.rptdesign | 11185 ++++++++ .../excel/tests/MegaSizeFixedLayout.rptdesign | 11185 ++++++++ .../excel/tests/MegaSizeNoStyles.rptdesign | 11193 ++++++++ .../excel/tests/MegaSizeTemplate.xlsx | Bin 0 -> 8381 bytes .../emitters/excel/tests/MegaSizeTest.java | 126 +- .../excel/tests/MultiSheetsNoNames.rptdesign | 5 +- .../excel/tests/MultiSheetsReportTest.java | 2 +- .../excel/tests/NumberFormats.rptdesign | 215 +- .../excel/tests/NumberFormatsTest.java | 30 +- .../excel/tests/OutputFileNotStreamTest.java | 2 +- .../emitters/excel/tests/PageLayout.rptdesign | 6 +- .../emitters/excel/tests/PageLayoutTest.java | 10 +- .../emitters/excel/tests/ReportRunner.java | 52 +- .../birt/emitters/excel/tests/SideBySide.java | 2 +- .../tests/SideBySideMultiColumns.rptdesign | 577 +- .../excel/tests/SingleSheetsReportTest.java | 2 +- 59 files changed, 57152 insertions(+), 10843 deletions(-) create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedExecutorManager.java create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedListItemExecutor.java create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedReportExecutor.java create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRunTask.java create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedTableItemExecutor.java create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue100ClassCastExceptionIfCrosstabHasNoData.java create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue100ClassCastExceptionIfCrosstabHasNoData.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue102Wrapping.java create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue102Wrapping.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.java create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.xls create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue109FormulaParseExceptionEmptyList.java create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue109FormulaParseExceptionEmptyList.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffset.java create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffset.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffsetListOnly.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffsetMultiNestedTables.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112BetterDesign.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112MethodNotImplementedDeeplyNestedTables.java create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112MethodNotImplementedDeeplyNestedTables.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculation.java create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculation.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculationExample.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue65DynamicImageSize.java create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue65DynamicImageSize.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue85Formulae.java create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue85Formulae.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize60000.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeFixedLayout.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeNoStyles.rptdesign create mode 100644 engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeTemplate.xlsx diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedExecutorManager.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedExecutorManager.java new file mode 100644 index 00000000000..2dfd846b429 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedExecutorManager.java @@ -0,0 +1,36 @@ +package uk.co.spudsoft.birt.emitters.bugfix; + +import org.eclipse.birt.report.engine.executor.ExecutorManager; +import org.eclipse.birt.report.engine.executor.ReportExecutor; +import org.eclipse.birt.report.engine.executor.ReportItemExecutor; + +public class FixedExecutorManager extends ExecutorManager { + + public FixedExecutorManager(ReportExecutor executor) { + super(executor); + } + + @Override + protected ReportItemExecutor getItemExecutor(int type) { + if ((type == LISTITEM)||(type == TABLEITEM)) { + assert ( type >= 0 ) && ( type < NUMBER ); + if ( !freeList[type].isEmpty( ) ) + { + // the free list is non-empty + return (ReportItemExecutor) freeList[type].remove( ); + } + if(type == LISTITEM) { + return new FixedListItemExecutor( this ); + } else { + return new FixedTableItemExecutor( this ); + } + } else { + return super.getItemExecutor(type); + } + } + + + + + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedListItemExecutor.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedListItemExecutor.java new file mode 100644 index 00000000000..43e0e69ae34 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedListItemExecutor.java @@ -0,0 +1,23 @@ +package uk.co.spudsoft.birt.emitters.bugfix; + +import org.eclipse.birt.report.engine.content.IContent; +import org.eclipse.birt.report.engine.executor.ExecutorManager; +import org.eclipse.birt.report.engine.executor.ListItemExecutor; +import org.eclipse.birt.report.engine.ir.ListingDesign; +import org.eclipse.birt.report.engine.ir.ReportElementDesign; + +public class FixedListItemExecutor extends ListItemExecutor { + + public FixedListItemExecutor(ExecutorManager manager) { + super(manager); + } + + @Override + protected void initializeContent(ReportElementDesign design, + IContent content) { + super.initializeContent(design, content); + pageBreakInterval = ( (ListingDesign) design ) + .getPageBreakInterval( ); + } + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRenderTask.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRenderTask.java index 15004abda9a..1ec8b85e4ec 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRenderTask.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRenderTask.java @@ -589,6 +589,7 @@ public void render( ) throws Exception if ( ExtensionManager.PAPER_SIZE_PAGINATION.equals( pagination ) ) { LayoutEngine pdfEmitter = new LayoutEngine( + executor, ( (HTMLReportLayoutEngine) layoutEngine ).getContext( ), emitter, renderOptions, executionContext, @@ -740,6 +741,7 @@ public void render( ) throws Exception if ( ExtensionManager.PAPER_SIZE_PAGINATION.equals( pagination ) ) { emitter = new LayoutEngine( + executor, ( (HTMLReportLayoutEngine) layoutEngine ).getContext( ), emitter, renderOptions, executionContext, getDocumentTotalPage( ) ); diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedReportExecutor.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedReportExecutor.java new file mode 100644 index 00000000000..eec2af2276a --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedReportExecutor.java @@ -0,0 +1,14 @@ +package uk.co.spudsoft.birt.emitters.bugfix; + +import org.eclipse.birt.report.engine.executor.ExecutionContext; +import org.eclipse.birt.report.engine.executor.ReportExecutor; + +public class FixedReportExecutor extends ReportExecutor { + + public FixedReportExecutor(ExecutionContext context) { + super(context); + this.manager = new FixedExecutorManager( this ); + } + + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRunTask.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRunTask.java new file mode 100644 index 00000000000..c29ddf2cf34 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRunTask.java @@ -0,0 +1,401 @@ +/******************************************************************************* + * Copyright (c) 2004, 2008 Actuate Corporation. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Actuate Corporation - initial API and implementation + *******************************************************************************/ + +package uk.co.spudsoft.birt.emitters.bugfix; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.birt.core.archive.FileArchiveWriter; +import org.eclipse.birt.core.archive.FolderArchive; +import org.eclipse.birt.core.archive.FolderArchiveWriter; +import org.eclipse.birt.core.archive.IDocArchiveWriter; +import org.eclipse.birt.core.archive.compound.ArchiveWriter; +import org.eclipse.birt.core.archive.compound.IArchiveFile; +import org.eclipse.birt.report.engine.api.EngineException; +import org.eclipse.birt.report.engine.api.IEngineTask; +import org.eclipse.birt.report.engine.api.IProgressMonitor; +import org.eclipse.birt.report.engine.api.IReportDocumentInfo; +import org.eclipse.birt.report.engine.api.IReportRunnable; +import org.eclipse.birt.report.engine.api.IRunTask; +import org.eclipse.birt.report.engine.api.impl.EngineTask; +import org.eclipse.birt.report.engine.api.impl.ReportDocumentConstants; +import org.eclipse.birt.report.engine.api.impl.ReportDocumentWriter; +import org.eclipse.birt.report.engine.api.impl.ReportEngine; +import org.eclipse.birt.report.engine.api.impl.ReportRunnable; +import org.eclipse.birt.report.engine.api.impl.RunStatusWriter; +import org.eclipse.birt.report.engine.data.dte.DocumentDataSource; +import org.eclipse.birt.report.engine.emitter.IContentEmitter; +import org.eclipse.birt.report.engine.executor.IReportExecutor; +import org.eclipse.birt.report.engine.i18n.MessageConstants; +import org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplciateReportExecutor; +import org.eclipse.birt.report.engine.internal.executor.emitter.ReportEmitterExecutor; +import org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportExecutor; +import org.eclipse.birt.report.engine.internal.presentation.ReportDocumentInfo; +import org.eclipse.birt.report.engine.presentation.ReportDocumentBuilder; +import org.eclipse.birt.report.model.api.ReportDesignHandle; +import org.eclipse.birt.report.model.api.elements.DesignChoiceConstants; + +/** + * A task for running a report design to get a report document + */ +public class FixedRunTask extends EngineTask implements IRunTask +{ + + private String documentName; + private IDocArchiveWriter archiveWriter; + private ReportDocumentWriter writer; + private ReportDocumentBuilder documentBuilder; + private IArchiveFile archive; + + /** + * @param engine + * the report engine + * @param runnable + * the report runnable instance + */ + public FixedRunTask( ReportEngine engine, IReportRunnable runnable ) + { + super( engine, runnable, IEngineTask.TASK_RUN ); + executionContext.setFactoryMode( true ); + executionContext.setPresentationMode( false ); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.birt.report.engine.api.IRunTask#run(java.lang.String) + */ + public void run( String reportDocName ) throws EngineException + { + try + { + switchToOsgiClassLoader( ); + changeStatusToRunning( ); + if ( reportDocName == null || reportDocName.length( ) == 0 ) + { + throw new EngineException( + MessageConstants.REPORT_DOCNAME_NOT_SPECIFIED_ERROR ); //$NON-NLS-1$ + } + this.documentName = reportDocName; + doRun( ); + } + finally + { + changeStatusToStopped( ); + switchClassLoaderBack( ); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.birt.report.engine.api.IRunTask#run(org.eclipse.birt.core.archive.IDocumentArchive) + */ + public void run( IDocArchiveWriter archive ) throws EngineException + { + try + { + switchToOsgiClassLoader( ); + changeStatusToRunning( ); + if ( archive == null ) + { + throw new EngineException( + MessageConstants.REPORT_ARCHIVE_ERROR ); //$NON-NLS-1$ + } + this.archiveWriter = archive; + doRun( ); + } + finally + { + changeStatusToStopped( ); + switchClassLoaderBack( ); + } + } + + private void openArchive( ) throws IOException + { + if ( archive != null ) + { + archiveWriter = new ArchiveWriter( archive ); + return; + } + File file = new File( documentName ); + if ( file.exists( ) ) + { + if ( file.isDirectory( ) ) + { + archiveWriter = new FolderArchiveWriter( documentName ); + } + else + { + archiveWriter = new FileArchiveWriter( documentName ); + } + } + else + { + if ( documentName.endsWith( "\\" ) || documentName.endsWith( "/" ) ) + { + archiveWriter = new FolderArchiveWriter( documentName ); + } + else + { + archiveWriter = new FileArchiveWriter( documentName ); + } + } + } + + private void openReportDocument( ) throws EngineException + { + try + { + if ( archiveWriter == null ) + { + openArchive( ); + } + String[] exts = executionContext.getEngineExtensions( ); + writer = new ReportDocumentWriter( engine, archiveWriter, exts ); + executionContext.setReportDocWriter( writer ); + DocumentDataSource ds = executionContext.getDataSource( ); + if ( ds != null) + { + //avoid the auto-generated bookmark will be changed at generation time + if ( ds.getInstanceID( ) != null ) + { + executionContext + .setReportletBookmark( ds.getInstanceID( ).getComponentID( ), ds.getBookmark( ) ); + } + if( ds.isReportletDocument( )) + { + writer.saveReportletDocument( ds.getBookmark( ), ds + .getInstanceID( ) ); + } + else + { + writer.removeReportletDoucment( ); + } + } + } + catch ( IOException ex ) + { + throw new EngineException( + MessageConstants.REPORT_ARCHIVE_OPEN_ERROR, ex ); + } + } + + private void closeReportDocument( ) + { + writer.close( ); + writer = null; + archive = null; + archiveWriter = null; + documentName = null; + } + + /** + * runs the report + * + * @throws EngineException + * throws exception when there is a run error + */ + protected void doRun( ) throws EngineException + { + if ( progressMonitor != null ) + { + progressMonitor.onProgress( IProgressMonitor.START_TASK, TASK_RUN ); + } + loadDataSource( ); + loadScripts( ); + doValidateParameters( ); + ReportDesignHandle design = executionContext.getReportDesign( ); + if ( DesignChoiceConstants.REPORT_LAYOUT_PREFERENCE_FIXED_LAYOUT + .equals( design.getLayoutPreference( ) ) ) + { + executionContext.setFixedLayout( true ); + setupRenderOption( ); + updateRtLFlag( ); + } + initReportVariable( ); + loadDesign( ); + prepareDesign( ); + startFactory( ); + openReportDocument( ); + ArrayList errList = new ArrayList( ); + try + { + ReportRunnable newRunnable = writer.saveDesign( executionContext + .getRunnable( ), executionContext.getOriginalRunnable( ) ); + executionContext.updateRunnable( newRunnable ); + writer.saveReportIR( executionContext.getReport( ) ); + writer.saveParamters( inputValues ); + + executionContext.openDataEngine( ); + + synchronized(this) + { + if (!executionContext.isCanceled( )) + { + documentBuilder = new ReportDocumentBuilder( + executionContext, writer ); + } + } + + if ( documentBuilder != null ) + { + if ( pageHandler != null ) + { + documentBuilder.setPageHandler( pageHandler ); + } + + IContentEmitter emitter = documentBuilder.getContentEmitter( ); + IReportExecutor executor = new FixedReportExecutor( executionContext ); + // prepare the extension executor + executor = createReportExtensionExecutor( executor ); + executor = new ReportEmitterExecutor( executor, emitter ); + executor = new SuppressDuplciateReportExecutor( executor ); + if ( executionContext.isFixedLayout( ) ) + { + executor = new LocalizedReportExecutor( executionContext, + executor ); + } + executionContext.setExecutor( executor ); + + initializeContentEmitter( emitter ); + documentBuilder.build( ); + } + + executionContext.closeDataEngine( ); + } + catch ( Throwable t ) + { + errList.add( t.getLocalizedMessage( ) ); + handleFatalExceptions( t ); + } + finally + { + documentBuilder = null; + closeFactory(); + + List list = (List) executionContext + .getAllErrors( ); + if ( list != null ) + { + for ( Exception ex : list ) + { + errList.add( ex.getLocalizedMessage( ) ); + } + } + if ( !errList.isEmpty( ) ) + { + // status writer never throws out exception + RunStatusWriter statusWriter = new RunStatusWriter( + archiveWriter ); + statusWriter.writeRunTaskStatus( errList ); + statusWriter.close( ); + } + else + { + //TODO: need clear all related stream at the beginning of generation task + if ( archiveWriter + .exists( ReportDocumentConstants.RUN_STATUS_STREAM ) ) + { + archiveWriter + .dropStream( ReportDocumentConstants.RUN_STATUS_STREAM ); + } + } + + writer.savePersistentObjects( executionContext.getGlobalBeans( ) ); + writer.finish( ); + + // notify that the document has been finished + if ( pageHandler != null && !executionContext.isCanceled( ) ) + { + int totalPage = (int) executionContext.getTotalPage( ); + IReportDocumentInfo docInfo = new ReportDocumentInfo( + executionContext, totalPage, true ); + pageHandler.onPage( totalPage, true, docInfo ); + } + if ( progressMonitor != null ) + { + progressMonitor.onProgress( IProgressMonitor.END_TASK, TASK_RUN ); + } + closeReportDocument(); + } + } + + public void close( ) + { + super.close( ); + } + + /** + * @deprecated + */ + public void run( FolderArchive fArchive ) throws EngineException + { + try + { + changeStatusToRunning( ); + setDataSource( fArchive ); + run( (IDocArchiveWriter) fArchive ); + } + finally + { + changeStatusToStopped( ); + } + } + + public void cancel( ) + { + super.cancel( ); + if ( documentBuilder != null ) + { + documentBuilder.cancel( ); + } + } + + public void setMaxRowsPerQuery( int maxRows ) + { + executionContext.setMaxRowsPerQuery( maxRows ); + } + + public void enableProgressiveViewing( boolean enabled ) + { + executionContext.enableProgressiveViewing( enabled ); + } + + public void setReportDocument( IArchiveFile archive ) + { + this.archive = archive; + } + + public void setReportDocument( String name ) + { + documentName = name; + } + + public void run( ) throws EngineException + { + try + { + switchToOsgiClassLoader( ); + changeStatusToRunning( ); + doRun( ); + } + finally + { + changeStatusToStopped( ); + switchClassLoaderBack( ); + } + } +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedTableItemExecutor.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedTableItemExecutor.java new file mode 100644 index 00000000000..850168613fe --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedTableItemExecutor.java @@ -0,0 +1,23 @@ +package uk.co.spudsoft.birt.emitters.bugfix; + +import org.eclipse.birt.report.engine.content.IContent; +import org.eclipse.birt.report.engine.executor.ExecutorManager; +import org.eclipse.birt.report.engine.executor.TableItemExecutor; +import org.eclipse.birt.report.engine.ir.ListingDesign; +import org.eclipse.birt.report.engine.ir.ReportElementDesign; + +public class FixedTableItemExecutor extends TableItemExecutor { + + public FixedTableItemExecutor(ExecutorManager manager) { + super(manager); + } + + @Override + protected void initializeContent(ReportElementDesign design, + IContent content) { + super.initializeContent(design, content); + pageBreakInterval = ( (ListingDesign) design ) + .getPageBreakInterval( ); + } + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/AutoFilterTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/AutoFilterTest.java index 3d324f0cd8c..d9f45907c3e 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/AutoFilterTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/AutoFilterTest.java @@ -30,7 +30,6 @@ public class AutoFilterTest extends ReportRunner { @Test public void autoFilter() throws Exception { debug = false; - autoFilter = true; InputStream inputStream = runAndRenderReport("SideBySideMultiColumns.rptdesign", "xlsx"); assertNotNull(inputStream); try { @@ -63,7 +62,7 @@ public void autoFilter() throws Exception { XSSFName name = workbook.getName( XSSFName.BUILTIN_FILTER_DB ); assertEquals( 0, name.getSheetIndex() ); - assertEquals( "Sheet0!$A$1:$M$2", name.getRefersToFormula() ); + assertEquals( "Sheet0!$A$2:$M$124", name.getRefersToFormula() ); } finally { inputStream.close(); } @@ -123,7 +122,7 @@ public void autoFilterMultiTables() throws Exception { assertEquals( "Number Formats Test Report", workbook.getSheetAt(0).getSheetName()); Sheet sheet = workbook.getSheetAt(0); - assertEquals(22, this.firstNullRow(sheet)); + assertEquals(26, this.firstNullRow(sheet)); assertEquals( 3035, sheet.getColumnWidth( 0 ) ); assertEquals( 3913, sheet.getColumnWidth( 1 ) ); diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/BigCrosstab.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/BigCrosstab.rptdesign index 7aead9fa456..f2ad5022b5d 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/BigCrosstab.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/BigCrosstab.rptdesign @@ -1,6 +1,6 @@ - - Eclipse BIRT Designer Version 3.7.1.v20110905 Build <3.7.1.v20110905-1820> + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> Big Crosstab Report 1 Reporting for duty! - Mission Cube @@ -612,6 +612,7 @@ this.getDataSource( "Mission Data Source" ).setPrivateDriverProperty( "HOME", pa + 0 LaunchVehicle_LaunchVehicle diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Borders2ReportTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Borders2ReportTest.java index 96ca3551e2c..f337c8eed76 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Borders2ReportTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Borders2ReportTest.java @@ -53,9 +53,6 @@ public static void assertBorder( Sheet sheet, int row, int col, short bottom, sh CellStyle styleLeft = ( cellLeft == null ) ? null : cellLeft.getCellStyle(); CellStyle styleRight = ( cellRight == null ) ? null : cellRight.getCellStyle(); - System.out.println( "style == " + style ); - System.out.println( "style == " + style ); - if( ( top != style.getBorderTop() ) && ( ( styleUp == null ) || ( top != styleUp.getBorderBottom() ) ) ) { assertEquals( top, style.getBorderTop() ); diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Hyperlinks.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Hyperlinks.rptdesign index 3127404bdac..74cce7b4be0 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Hyperlinks.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Hyperlinks.rptdesign @@ -1,6 +1,6 @@ - - Eclipse BIRT Designer Version 3.7.1.v20110905 Build <3.7.1.v20110905-1820> + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> Number Formats Test Report in "BK" + row["Integer"] + row["Integer"] + "_" + row["Name"] Name diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/HyperlinksTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/HyperlinksTest.java index 9479b953cea..d6e0f0b8979 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/HyperlinksTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/HyperlinksTest.java @@ -23,6 +23,8 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Name; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; @@ -157,7 +159,7 @@ public void testBookmarksXlsx() throws BirtException, IOException { } assertEquals( 7, rangesValidated ); - assertEquals( 18, workbook.getNumberOfNames() ); + assertEquals( 18, workbook.getNumberOfNames() ); int index = 0; validateNamedRange( workbook, index++, "DataItemOne", -1, 1, 0, 1, 0 ); @@ -199,11 +201,17 @@ public void testHyperlinksXlsx() throws BirtException, IOException { Sheet sheet = workbook.getSheetAt(0); assertEquals( 2002, this.firstNullRow(sheet)); + assertEquals( 8, workbook.getNumCellStyles() ); + + assertTrue( Font.U_SINGLE != workbook.getFontAt( sheet.getRow(0).getCell(1).getCellStyle().getFontIndex() ).getUnderline() ); + assertTrue( IndexedColors.BLUE.getIndex() != workbook.getFontAt( sheet.getRow(0).getCell(1).getCellStyle().getFontIndex() ).getColor() ); for(int i = 1; i < 2000; ++i ) { assertEquals( "http://www.spudsoft.co.uk/?p=" + i, sheet.getRow(i).getCell(0).getHyperlink().getAddress()); assertEquals( "_BK" + (i + 1000), sheet.getRow(i).getCell(1).getHyperlink().getAddress()); + assertEquals( Font.U_SINGLE, workbook.getFontAt( sheet.getRow(i).getCell(1).getCellStyle().getFontIndex() ).getUnderline() ); + assertEquals( "FF0000FF", workbook.getFontAt( sheet.getRow(i).getCell(1).getCellStyle().getFontIndex() ).getXSSFColor().getARGBHex() ); } } finally { @@ -225,11 +233,17 @@ public void testHyperlinksXls() throws BirtException, IOException { Sheet sheet = workbook.getSheetAt(0); assertEquals( 2002, this.firstNullRow(sheet)); + assertEquals( 28, workbook.getNumCellStyles() ); + + assertTrue( Font.U_SINGLE != workbook.getFontAt( sheet.getRow(0).getCell(1).getCellStyle().getFontIndex() ).getUnderline() ); + assertTrue( IndexedColors.BLUE.getIndex() != workbook.getFontAt( sheet.getRow(0).getCell(1).getCellStyle().getFontIndex() ).getColor() ); for(int i = 1; i < 2000; ++i ) { assertEquals( "http://www.spudsoft.co.uk/?p=" + i, sheet.getRow(i).getCell(0).getHyperlink().getAddress()); assertEquals( "_BK" + (i + 1000), sheet.getRow(i).getCell(1).getHyperlink().getAddress()); + assertEquals( Font.U_SINGLE, workbook.getFontAt( sheet.getRow(i).getCell(1).getCellStyle().getFontIndex() ).getUnderline() ); + assertEquals( IndexedColors.BLUE.getIndex(), workbook.getFontAt( sheet.getRow(i).getCell(1).getCellStyle().getFontIndex() ).getColor() ); } } finally { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue100ClassCastExceptionIfCrosstabHasNoData.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue100ClassCastExceptionIfCrosstabHasNoData.java new file mode 100644 index 00000000000..437f69839e7 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue100ClassCastExceptionIfCrosstabHasNoData.java @@ -0,0 +1,46 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.InputStream; + +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.junit.Test; + +public class Issue100ClassCastExceptionIfCrosstabHasNoData extends ReportRunner { + + @Test + public void testHeader() throws Exception { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue100ClassCastExceptionIfCrosstabHasNoData.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 2, this.firstNullRow( sheet )); + } finally { + inputStream.close(); + } + + } +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue100ClassCastExceptionIfCrosstabHasNoData.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue100ClassCastExceptionIfCrosstabHasNoData.rptdesign new file mode 100644 index 00000000000..e6494fd62b3 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue100ClassCastExceptionIfCrosstabHasNoData.rptdesign @@ -0,0 +1,575 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + + + Data Cube.Data Set.x + integer + false + + + Data Cube.Data Set.y + integer + false + + + 135 + 80 + in + /templates/blank_report.gif + auto layout + ltr + 99 + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + nulls lowest + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + 2 + CUSTOMERNAME + CUSTOMERNAME + string + 12 + + + 3 + THEMONTH + THEMONTH + integer + 4 + + + 4 + THEYEAR + THEYEAR + integer + 4 + + + 5 + ORDER_COUNT + ORDER_COUNT + integer + 4 + + + 6 + PAYMENT_COUNT + PAYMENT_COUNT + integer + 4 + + + + + CUSTOMERNUMBER + measure + CUSTOMERNUMBER + CUSTOMERNUMBER + + + CUSTOMERNAME + dimension + CUSTOMERNAME + CUSTOMERNAME + + + THEMONTH + measure + THEMONTH + THEMONTH + + + THEYEAR + measure + THEYEAR + THEYEAR + + + ORDER_COUNT + measure + ORDER_COUNT + ORDER_COUNT + + + PAYMENT_COUNT + measure + PAYMENT_COUNT + PAYMENT_COUNT + + + + + + + + 1 + CUSTOMERNUMBER + integer + + + 2 + CUSTOMERNAME + string + + + 3 + THEMONTH + integer + + + 4 + THEYEAR + integer + + + 5 + ORDER_COUNT + integer + + + 6 + PAYMENT_COUNT + integer + + + + Data Source + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + + + 2 + CUSTOMERNAME + CUSTOMERNAME + string + + + 3 + THEMONTH + THEMONTH + integer + + + 4 + THEYEAR + THEYEAR + integer + + + 5 + ORDER_COUNT + ORDER_COUNT + integer + + + 6 + PAYMENT_COUNT + PAYMENT_COUNT + integer + + + + + + + + + + NewTabularHierarchy + + + + + integer + CUSTOMERNUMBER + + + string + CUSTOMERNAME + + + + + + + NewTabularHierarchy1 + + + + + integer + THEYEAR + + + integer + THEMONTH + + + + + + + + + + + dataSetRow["ORDER_COUNT"] + integer + + + dataSetRow["PAYMENT_COUNT"] + integer + + + + + Data Set + + + + + + + + + + landscape + 1in + 1.25in + 1in + 1.25in + + + html + new Date()]]> + + + + + + + Data Cube + + + ORDER_COUNT + + + Group/CUSTOMERNAME + Group1/THEMONTH + + + yellow + ORDER_COUNT_Group/CUSTOMERNAME_Group1/THEMONTH + + + + + + + + + + PAYMENT_COUNT + + + Group/CUSTOMERNAME + Group1/THEMONTH + + + yellow + PAYMENT_COUNT_Group/CUSTOMERNAME_Group1/THEMONTH + + + + + + + + + + + + + + Group + + + Group/CUSTOMERNUMBER + + + + + CUSTOMERNUMBER + + + yellow + + + + + Group/CUSTOMERNAME + + + data["CUSTOMERNAME"] + eq + + "Bob" + + true + + + + + + + yellow + CUSTOMERNAME + + + + + + + + + + + + + + + Group1 + + + Group1/THEYEAR + + + + + THEYEAR + + + orange + + + + + Group1/THEMONTH + + + + + orange + THEMONTH + + + + + + + + + + + + + + + + + + + 1 + 1 + + + + 1 + 1 + + + + + + #FFA500 + + + true + + + CUSTOMERNUMBER + dimension["Group"]["CUSTOMERNUMBER"] + integer + + + CUSTOMERNAME + dimension["Group"]["CUSTOMERNAME"] + string + + + THEYEAR + dimension["Group1"]["THEYEAR"] + integer + + + THEMONTH + dimension["Group1"]["THEMONTH"] + integer + + + ORDER_COUNT_Group1/THEMONTH + measure["ORDER_COUNT"] + integer + + Group1/THEMONTH + + SUM + + + PAYMENT_COUNT_Group1/THEMONTH + measure["PAYMENT_COUNT"] + integer + + Group1/THEMONTH + + SUM + + + ORDER_COUNT_Group/CUSTOMERNAME + measure["ORDER_COUNT"] + integer + + Group/CUSTOMERNAME + + SUM + + + PAYMENT_COUNT_Group/CUSTOMERNAME + measure["PAYMENT_COUNT"] + integer + + Group/CUSTOMERNAME + + SUM + + + ORDER_COUNT_Group/CUSTOMERNAME_Group1/THEMONTH + measure["ORDER_COUNT"] + integer + + Group/CUSTOMERNAME + Group1/THEMONTH + + SUM + + + PAYMENT_COUNT_Group/CUSTOMERNAME_Group1/THEMONTH + measure["PAYMENT_COUNT"] + integer + + Group/CUSTOMERNAME + Group1/THEMONTH + + SUM + + + + + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue102Wrapping.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue102Wrapping.java new file mode 100644 index 00000000000..7e50e0b230b --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue102Wrapping.java @@ -0,0 +1,49 @@ +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.*; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue102Wrapping extends ReportRunner { + + @Test + public void testRunReport() throws BirtException, IOException { + + removeEmptyRows = false; + InputStream inputStream = runAndRenderReport("Issue102Wrapping.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + + assertEquals( "Sheet0", sheet.getSheetName()); + assertEquals( 4231, sheet.getColumnWidth(0) ); + + assertTrue( sheet.getRow(0).getCell(0).getCellStyle().getWrapText()); + assertTrue( sheet.getRow(1).getCell(0).getCellStyle().getWrapText()); + + assertTrue( ! sheet.getRow(2).getCell(0).getCellStyle().getWrapText()); + assertTrue( ! sheet.getRow(3).getCell(0).getCellStyle().getWrapText()); + assertTrue( ! sheet.getRow(4).getCell(0).getCellStyle().getWrapText()); + + assertEquals( 300, sheet.getRow(0).getHeight() ); + assertEquals( 300, sheet.getRow(2).getHeight() ); + + assertEquals( 116, firstNullRow(sheet)); + } finally { + inputStream.close(); + } + } + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue102Wrapping.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue102Wrapping.rptdesign new file mode 100644 index 00000000000..5c602fa22e4 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue102Wrapping.rptdesign @@ -0,0 +1,500 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + in + /templates/blank_report.gif + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + PRODUCTCODE + dimension + PRODUCTCODE + PRODUCTCODE + + + PRODUCTNAME + dimension + PRODUCTNAME + PRODUCTNAME + + + PRODUCTLINE + dimension + PRODUCTLINE + PRODUCTLINE + + + PRODUCTSCALE + dimension + PRODUCTSCALE + PRODUCTSCALE + + + PRODUCTVENDOR + dimension + PRODUCTVENDOR + PRODUCTVENDOR + + + PRODUCTDESCRIPTION + dimension + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + + + QUANTITYINSTOCK + measure + QUANTITYINSTOCK + QUANTITYINSTOCK + + + BUYPRICE + measure + BUYPRICE + BUYPRICE + + + MSRP + measure + MSRP + MSRP + + + + + + + 1 + PRODUCTCODE + string + + + 2 + PRODUCTNAME + string + + + 3 + PRODUCTLINE + string + + + 4 + PRODUCTSCALE + string + + + 5 + PRODUCTVENDOR + string + + + 6 + PRODUCTDESCRIPTION + string + + + 7 + QUANTITYINSTOCK + integer + + + 8 + BUYPRICE + float + + + 9 + MSRP + float + + + + Data Source + + + 1 + PRODUCTCODE + PRODUCTCODE + string + 12 + + + 2 + PRODUCTNAME + PRODUCTNAME + string + 12 + + + 3 + PRODUCTLINE + PRODUCTLINE + string + 12 + + + 4 + PRODUCTSCALE + PRODUCTSCALE + string + 12 + + + 5 + PRODUCTVENDOR + PRODUCTVENDOR + string + 12 + + + 6 + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + string + 12 + + + 7 + QUANTITYINSTOCK + QUANTITYINSTOCK + integer + 4 + + + 8 + BUYPRICE + BUYPRICE + float + 8 + + + 9 + MSRP + MSRP + float + 8 + + + + + + + + + + + + + + + html + new Date()]]> + + + + + + + + + + + + + + + + + + + + + + 4 + 1 + + + + + + + + + + + + + + + + + + + + + + + 6 + 1 + + + + + + + + + + + + ExcelEmitter.AutoColWidthsIncludeTableHeader + boolean + + + true + Data Set + + + PRODUCTCODE + PRODUCTCODE + dataSetRow["PRODUCTCODE"] + string + + + PRODUCTNAME + PRODUCTNAME + dataSetRow["PRODUCTNAME"] + string + + + PRODUCTLINE + PRODUCTLINE + dataSetRow["PRODUCTLINE"] + string + + + PRODUCTSCALE + PRODUCTSCALE + dataSetRow["PRODUCTSCALE"] + string + + + PRODUCTVENDOR + PRODUCTVENDOR + dataSetRow["PRODUCTVENDOR"] + string + + + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + dataSetRow["PRODUCTDESCRIPTION"] + string + + + QUANTITYINSTOCK + QUANTITYINSTOCK + dataSetRow["QUANTITYINSTOCK"] + integer + + + BUYPRICE + BUYPRICE + dataSetRow["BUYPRICE"] + float + + + MSRP + MSRP + dataSetRow["MSRP"] + float + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + PRODUCTCODE + + + + + PRODUCTNAME + + + + + PRODUCTLINE + + + + + PRODUCTSCALE + + + + + PRODUCTVENDOR + + + + + PRODUCTDESCRIPTION + + + + + QUANTITYINSTOCK + + + + + BUYPRICE + + + + + MSRP + + + + +
+ + + + + + + + + + + +
+
+
+
+
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.java new file mode 100644 index 00000000000..e933848e83e --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.java @@ -0,0 +1,67 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue107ForceRecalculation extends ReportRunner { + + @Test + public void testWithoutOption() throws BirtException, IOException { + + debug = false; + forceRecalcuation = false; + InputStream inputStream = runAndRenderReport("Issue107ForceRecalculation.rptdesign", "xls"); + assertNotNull(inputStream); + try { + HSSFWorkbook workbook = new HSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 2, workbook.getNumberOfSheets() ); + + // assertTrue( ! workbook.getForceFormulaRecalculation() ); + } finally { + inputStream.close(); + } + } + + @Test + public void testWithOption() throws BirtException, IOException { + + debug = false; + forceRecalcuation = true; + InputStream inputStream = runAndRenderReport("Issue107ForceRecalculation.rptdesign", "xls"); + assertNotNull(inputStream); + try { + HSSFWorkbook workbook = new HSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 2, workbook.getNumberOfSheets() ); + + // assertTrue( workbook.getForceFormulaRecalculation() ); + } finally { + inputStream.close(); + } + } + + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.rptdesign new file mode 100644 index 00000000000..993e0cd3624 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.rptdesign @@ -0,0 +1,542 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + + + ExcelEmitter.TemplateFile + string + + + Issue107ForceRecalculation.xls + in + /templates/blank_report.gif + ltr + 120 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + + + 1 + CUSTOMERNUMBER + integer + + + 2 + CUSTOMERNAME + string + + + 3 + CONTACTLASTNAME + string + + + 4 + CONTACTFIRSTNAME + string + + + 5 + PHONE + string + + + 6 + ADDRESSLINE1 + string + + + 7 + ADDRESSLINE2 + string + + + 8 + CITY + string + + + 9 + STATE + string + + + 10 + POSTALCODE + string + + + 11 + COUNTRY + string + + + 12 + SALESREPEMPLOYEENUMBER + integer + + + 13 + CREDITLIMIT + float + + + + Data Source + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + + + 2 + CUSTOMERNAME + CUSTOMERNAME + string + + + 3 + CONTACTLASTNAME + CONTACTLASTNAME + string + + + 4 + CONTACTFIRSTNAME + CONTACTFIRSTNAME + string + + + 5 + PHONE + PHONE + string + + + 6 + ADDRESSLINE1 + ADDRESSLINE1 + string + + + 7 + ADDRESSLINE2 + ADDRESSLINE2 + string + + + 8 + CITY + CITY + string + + + 9 + STATE + STATE + string + + + 10 + POSTALCODE + POSTALCODE + string + + + 11 + COUNTRY + COUNTRY + string + + + 12 + SALESREPEMPLOYEENUMBER + SALESREPEMPLOYEENUMBER + integer + + + 13 + CREDITLIMIT + CREDITLIMIT + float + + + + + + + + + 1 + ORDERNUMBER + integer + + + 2 + ORDERDATE + date + + + 3 + REQUIREDDATE + date + + + 4 + SHIPPEDDATE + date + + + 5 + STATUS + string + + + 6 + COMMENTS + string + + + 7 + CUSTOMERNUMBER + integer + + + + Data Source + + + 1 + ORDERNUMBER + ORDERNUMBER + integer + + + 2 + ORDERDATE + ORDERDATE + date + + + 3 + REQUIREDDATE + REQUIREDDATE + date + + + 4 + SHIPPEDDATE + SHIPPEDDATE + date + + + 5 + STATUS + STATUS + string + + + 6 + COMMENTS + COMMENTS + string + + + 7 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + + + + + + + + + + + + + + + html + new Date()]]> + + + + + + + "Arial" + top + Orders + + + ORDERNUMBER + ORDERNUMBER + dataSetRow["ORDERNUMBER"] + integer + + + ORDERDATE + ORDERDATE + dataSetRow["ORDERDATE"] + date + + + REQUIREDDATE + REQUIREDDATE + dataSetRow["REQUIREDDATE"] + date + + + SHIPPEDDATE + SHIPPEDDATE + dataSetRow["SHIPPEDDATE"] + date + + + STATUS + STATUS + dataSetRow["STATUS"] + string + + + COMMENTS + COMMENTS + dataSetRow["COMMENTS"] + string + + + CUSTOMERNUMBER + CUSTOMERNUMBER + dataSetRow["CUSTOMERNUMBER"] + integer + + + 0 + + + + + + + + 50mm + +
+ + top + + + + + + + + + + + + + + + + + + + + + + +
+ + TableGroupCustomer + row["CUSTOMERNUMBER"] + + row["CUSTOMERNUMBER"] + + false +
+ + 0in + top + + detail + + CUSTOMERNUMBER + + + + 0pt + 0pt + 0pt + 0pt + + + 0pt + 0pt + 0pt + 0pt + + + 0pt + 0pt + 0pt + 0pt + + + 0pt + 0pt + 0pt + 0pt + + + 0pt + 0pt + 0pt + 0pt + + + 0pt + 0pt + 0pt + 0pt + + +
+
+ + + + + + + + + +
+
+ + + top + + 0pt + 0pt + 0pt + 0pt + + + + ORDERNUMBER + + + + + ORDERDATE + + + + + REQUIREDDATE + + + + + SHIPPEDDATE + + + + + STATUS + + + + pre + + COMMENTS + + + + +
+ + + + + + + + + +
+
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.xls b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.xls new file mode 100644 index 0000000000000000000000000000000000000000..e63dba57e3ba8fa452a9863a2e6a520f842ed33c GIT binary patch literal 17920 zcmeHOdvILUdH?QewOT(V`Hi2~vTVz?EF`V`#$H*r0&Xl@NH!2`D(i7qQYEd-O7hrF zTm&uu6q*4!m=U;5XrK+jHH{%8nUX}bX=r8yWm+ghVmc%>nWX8ogPTqvW7z(F=kDFT zd-vX}rD-~a;qIKf_k8!9-}jyGabA1&mA@-}>#?sb{;@c&T~Z()B&SKpM%VDnq^=T? z<#=HJgJd#k5=HR%$@LM^!26I@hw%!Kf=Go(w0RLy7-<^Pbfg(bGm&N?%|?(!*q^}YA%&8;`TtTlhBy}Y~SWo-p$qh>L=72FfjCml+T zKC{+`xX+P*M!&UW$fqh<_iQms7D}s($N)a=s_pxrg_x3wlws+`bKD2C0{qzrGJYt7 zPtmMbkEe2lvKJgWl?;Zmz=xA(EBIS&&zC=C-AbWxO$#H6Lxu9xikFIhfZjX=W&T(K z@)yAua2NRr(os3i_Wf4xK)g5Jt)Cc->kaLRZX>S$=B@@ML%T*9CLrrhSXl$@JW>gI z71CjQ+~=zM)2ih2>b?_idbD}k(e2+`wG|~eO5GNySLOat-OJQ{Htw2yL)H1AqSTqF5xLK0vJ7%9z5mXxHDCW8>TEV&$mPm;(Dt?(t(sl+m%i$ zT}t#r-x;k3rz~+99_ZwfjX}%R`AW(X)2Aq*!TMgdT^@{}7hfpaDyfuJ_*5h0bt#hz zdYSCN^G48e-z*RA#8hFaSG6P3B8GIy9XTDe33AI-K3?^}ua-gM(R>@c33er}wUbn>J^U(^GJGyQMb7dRLAWmCFeH*~H$dgjb z8W6%>NoDQz6d|kXX89^Qu?#a)d>cO{l*KX{%`lD1Q?fmqsa4s|*Q#%^wnHqI3tTB2 zDc@LAT~l3Gz2%OsuA@~014pY)oq9{HBSijFtxM3gscS+forAKX|1w1ue>w*+#$)v zG2?~1CW`KmhdU{X{;D+NF)crLS8Q}N-)z^s3|+?~#CFgf_}raI;T*#wHfGH78U_PJ zcgU|{L~^5Zhey#J_}ukT^e@C>rrp1x^ut{xuHMv^5S}f*CLP&DifE%>P<_4HGE%Qh zInDBjnw;{fok<6sRh|9Y=fd;ka}2!nwO4x1J^k*P@NPMiMW^)&u;VpPt?oJYsDT&* z+ic9213~q|h;jSD9FVI4-~^$m^8jJXyg}#}d4SM8y+Pu{?!4-kLrVD@YS zLB=h1Y9s#E;bw705>F6+>+n~KJV5-d!!64^K>V$v=Lh0%ot624_*(}HlBt_x{vhBT zfUEKY@wZNSejxtVS)Ct9W;HjtAJ(XrEjDU-!8nVd{ZVtMYROP7+80%$GzNoaIc<1WA4kb+8(@sow-D|mAH>qOQ=1UMg4s*4oxHLtSPuBa6HlbMS`Ns5*77q;I?^mZvmB5#XD>yX$xh^KU=Dtv z!iuxDdbPe$-`#iGh!59{g_~rIV@K-Jg3FV$uyHilG9NbBI<(jn8nLTyUUp|Q$H^v=%Vv!a z8#4e^YeGisU*37soy}Y)o4Q;!>wVZTL{myDGGcGP^{?)1<~iAH%4JjK!^RA3)tWGD z^Kbv*&St)o&E{M-wLWaj&{u4x8L{_&{)Ri71!Pm_?`bQ*rY;Xpo814+$t&(`7CPCu zc-kr-Hg->&-2c;Webb%IA}1RcPh0E5#_nm8`(MBEygQrgoNQb?ZG#URyQfX=pPcxi zJDbH$HZGoay$>6^r%mpE?#-XMvsvO~|ja+){MRzv3lZ}g~Rr|29ds=Pe>`SR0+G(4WPBt!{R_DXU?rF7= zUrjvV)|#34xeP0{^tid(F>WqP7I}`9A_wpOwmaym3@ALx3A)k&YWE^+RyH@egO+DN z;Xh8$)eca*&xkzwm!EM5U7Z1iw>Ux9IY8|mf@4)(f8q|hCIbrJaDr}hfZF{*1a?kjD}FY(osH?oZ%?1%MoxlObjfGpYTT^gdG7M=Fki~#o#39!Z+7ZN5*)egZ zI}~BX#Gb-byp;<g$@`a!-@9(oCwsG!a@fi3*izekH~;>v2B5#$Fe>JIvuMI?AaX{9PT|m7VgTH zFEAZd4&cNhPez`GjD_jg|APHpBar#5qzQ=2(DY3*pCi&Gb(3C$3GFugVc zQ`l)1j?7>=)!Nz9kJyAF_hbvIErCC@s*vo51{j*zD&=xN-FoZ^q*@Qh7!}B|#sMb^ zZWv0WnR!;Ui-JIs63ngfgWTl~BQez3ljw~>n4Q_R3yKkHmsM|-fLl@+p393VkxUmU zfcSeb!ac#GWW33HT#}e|O1GWTXtvjrqT0*jgcIW`RKg-_>A^jZ8*Bp#6JUSVb z`YT`!Px#&NfV75juxkRA)L0SIM{_aSr{nbALl-Ee#E^Wod%^R_LT z2LM`%&mlCpLz%1(^ zO+1C5Fvta!RJ}>mPbSA@9Qoup>H-(zwM1e`iA+v{j?zryNHM_2#^v0(bAkdA83zHO z7(p6W3A706f^f8CHU~DvoFa%E)3|YWFSK}}n)zw6XJlx2Z~%Sfy@-a-GSu*6{w;%v zo^}kjabrl|o#-%nhle`)+lPlA2``dIY$h=`z|7zJzl@XXU$(s?()|)d$5$g4aatT_ zyMqg1aI4ND;V(QglV?X#S6f@h;9%cCd!nzcW(R3Oq>#Lzg^}=Im0xJ^xvnbel)4t|rGZ#Yc z(C$NrTOs|PgH2712M)Dj7;o+AJ$~HiLfM!(c_K}{ z@!o-v0sUZtb03sMxRTs{GKZYRIs33w;#USVSH|$2z;|bO0TLck*Mih{K+eHp=WK5p z-qz$%&>pqXXs!D}yWd7508b8?|5Yf-`me%_0EA0jn6=1{uyy(#+;SG}54i#e(_-~p ziaYTqO?kCqMPsH2s#7mhG;%DGcNJ}SipCzp zNn`0n`Q5;Dh1MW4 z@tOMXz_n=yo@2H?A<+UM#bb|r8-J;wgGFWZZ~nTzUi9NX!M*-Y-jCrqsL(ly;1PGI zPt^=z`{xq zX_cE%Xhoee4|rsvF5rkTMud~b@=h9k&`G1&oHRy?on}T2&l=LQ%#mX;Ms_ntUd1X} z`HozQ)t^U0@EUr%*$XkobeTYvB24%QF~Q;#pjdTSA^a{z$2N;I$aGdu7UOUO$ogt+ zLYrvNLP`S4Sj`O-9`DCsH%oM(^oT{}HZ78EJm;h1q#bb@|C3cCJd)KeQ^uL9KFFTm z%K^-?oX4i;;_Bb=UTYu4(!N5GnZRI-QkU!((<`Mb!^1{G!BZ^0o`ck2#M|R>Y*KLl zy0^2(P$k%K+ofR=F^EO%aXE;I!0*`J&LvK9UY4q#0)zy)WY5%KILq + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + in + /templates/blank_report.gif + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + EMPLOYEENUMBER + EMPLOYEENUMBER + EMPLOYEENUMBER + + + LASTNAME + LASTNAME + LASTNAME + + + FIRSTNAME + FIRSTNAME + FIRSTNAME + + + EXTENSION + EXTENSION + EXTENSION + + + EMAIL + EMAIL + EMAIL + + + OFFICECODE + OFFICECODE + OFFICECODE + + + REPORTSTO + REPORTSTO + REPORTSTO + + + JOBTITLE + JOBTITLE + JOBTITLE + + + + + + 1 + EMPLOYEENUMBER + integer + + + 2 + LASTNAME + string + + + 3 + FIRSTNAME + string + + + 4 + EXTENSION + string + + + 5 + EMAIL + string + + + 6 + OFFICECODE + string + + + 7 + REPORTSTO + integer + + + 8 + JOBTITLE + string + + + + Data Source + + + 1 + EMPLOYEENUMBER + EMPLOYEENUMBER + integer + 4 + + + 2 + LASTNAME + LASTNAME + string + 12 + + + 3 + FIRSTNAME + FIRSTNAME + string + 12 + + + 4 + EXTENSION + EXTENSION + string + 12 + + + 5 + EMAIL + EMAIL + string + 12 + + + 6 + OFFICECODE + OFFICECODE + string + 12 + + + 7 + REPORTSTO + REPORTSTO + integer + 4 + + + 8 + JOBTITLE + JOBTITLE + string + 12 + + + + + + 2.0 + + + + + + + EMPLOYEENUMBER + 1 + + 4 + 10 + 0 + Nullable + + EMPLOYEENUMBER + + + + EMPLOYEENUMBER + + 11 + + + + + + + LASTNAME + 2 + + 12 + 50 + 0 + Nullable + + LASTNAME + + + + LASTNAME + + 50 + + + + + + + FIRSTNAME + 3 + + 12 + 50 + 0 + Nullable + + FIRSTNAME + + + + FIRSTNAME + + 50 + + + + + + + EXTENSION + 4 + + 12 + 10 + 0 + Nullable + + EXTENSION + + + + EXTENSION + + 10 + + + + + + + EMAIL + 5 + + 12 + 100 + 0 + Nullable + + EMAIL + + + + EMAIL + + 100 + + + + + + + OFFICECODE + 6 + + 12 + 10 + 0 + Nullable + + OFFICECODE + + + + OFFICECODE + + 10 + + + + + + + REPORTSTO + 7 + + 4 + 10 + 0 + Nullable + + REPORTSTO + + + + REPORTSTO + + 11 + + + + + + + JOBTITLE + 8 + + 12 + 50 + 0 + Nullable + + JOBTITLE + + + + JOBTITLE + + 50 + + + + + + + +]]> + + + + + + + NewTabularHierarchy + + + + + string + OFFICECODE + + + integer + REPORTSTO + + + string + EMAIL + + + + + + + NewTabularHierarchy1 + + + + + string + JOBTITLE + + + + + + + + + + + first + false + dataSetRow["LASTNAME"] + string + true + + + + + Data Set + + + + + + + + + + + + html + new Date()]]> + + + + + + + Data Set + + + EMPLOYEENUMBER + EMPLOYEENUMBER + dataSetRow["EMPLOYEENUMBER"] + integer + + + LASTNAME + LASTNAME + dataSetRow["LASTNAME"] + string + + + FIRSTNAME + FIRSTNAME + dataSetRow["FIRSTNAME"] + string + + + EXTENSION + EXTENSION + dataSetRow["EXTENSION"] + string + + + EMAIL + EMAIL + dataSetRow["EMAIL"] + string + + + OFFICECODE + OFFICECODE + dataSetRow["OFFICECODE"] + string + + + REPORTSTO + REPORTSTO + dataSetRow["REPORTSTO"] + integer + + + JOBTITLE + JOBTITLE + dataSetRow["JOBTITLE"] + string + + + + + eq + row["OFFICECODE"] + + 999 + + true + + + + Office + row["OFFICECODE"] + + "Office " + row["OFFICECODE"] + + false + always +
+ + OFFICECODE + +
+
+
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffset.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffset.java new file mode 100644 index 00000000000..17d7637fe8d --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffset.java @@ -0,0 +1,160 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue110ListElementsOffset extends ReportRunner { + + @Test + public void testIssue110ListOnly() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue110ListElementsOffsetListOnly.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 112, this.firstNullRow(sheet)); + assertEquals( "18th Century Vintage Horse Carriage", sheet.getRow(2).getCell(0).getStringCellValue()); + + } finally { + inputStream.close(); + } + } + + + @Test + public void testIssue110XlsListOnly() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue110ListElementsOffsetListOnly.rptdesign", "xls"); + assertNotNull(inputStream); + try { + HSSFWorkbook workbook = new HSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 112, this.firstNullRow(sheet)); + assertEquals( "18th Century Vintage Horse Carriage", sheet.getRow(2).getCell(0).getStringCellValue()); + + } finally { + inputStream.close(); + } + } + + @Test + public void testIssue110() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue110ListElementsOffset.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 224, this.firstNullRow(sheet)); + assertEquals( "18th Century Vintage Horse Carriage", sheet.getRow(114).getCell(0).getStringCellValue()); + + } finally { + inputStream.close(); + } + } + + + @Test + public void testIssue110Xls() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue110ListElementsOffset.rptdesign", "xls"); + assertNotNull(inputStream); + try { + HSSFWorkbook workbook = new HSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 224, this.firstNullRow(sheet)); + assertEquals( "18th Century Vintage Horse Carriage", sheet.getRow(114).getCell(0).getStringCellValue()); + + } finally { + inputStream.close(); + } + } + + @Test + public void testIssue110MultiNested() throws BirtException, IOException { + + debug = true; + InputStream inputStream = runAndRenderReport("Issue110ListElementsOffsetMultiNestedTables.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 17, this.firstNullRow(sheet)); + assertEquals( "1969 Harley Davidson Ultimate Chopper", sheet.getRow(10).getCell(0).getStringCellValue()); + + } finally { + inputStream.close(); + } + } + + + @Test + public void testIssue110MultiNestedXls() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue110ListElementsOffsetMultiNestedTables.rptdesign", "xls"); + assertNotNull(inputStream); + try { + HSSFWorkbook workbook = new HSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 17, this.firstNullRow(sheet)); + assertEquals( "1969 Harley Davidson Ultimate Chopper", sheet.getRow(10).getCell(0).getStringCellValue()); + + } finally { + inputStream.close(); + } + } + +} + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffset.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffset.rptdesign new file mode 100644 index 00000000000..3a0b4590ecb --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffset.rptdesign @@ -0,0 +1,879 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + + + Data Cube.Data Set.x + integer + false + + + Data Cube.Data Set.y + integer + false + + + 135 + 80 + in + /templates/blank_report.gif + ltr + 72 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + LINE + dimension + LINE + LINE + + + NAME + dimension + NAME + NAME + + + PERCENT + measure + PERCENT + PERCENT + + + + + + + 1 + LINE + string + + + 2 + NAME + string + + + 3 + PERCENT + float + + + + Data Source + + + 1 + LINE + LINE + string + 12 + + + 2 + NAME + NAME + string + 12 + + + 3 + PERCENT + PERCENT + float + 8 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + PRODUCTCODE + 2 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + QUANTITYORDERED + 3 + + 4 + 10 + 0 + Nullable + + QUANTITYORDERED + + + + QUANTITYORDERED + + 11 + + + + + + + PRICEEACH + 4 + + 8 + 15 + 0 + Nullable + + PRICEEACH + + + + PRICEEACH + + 22 + + + + + + + ORDERLINENUMBER + 5 + + 5 + 5 + 0 + Nullable + + ORDERLINENUMBER + + + + ORDERLINENUMBER + + 6 + + + + + + + +]]> + + + nulls lowest + + + CUSTOMERNUMBER + measure + CUSTOMERNUMBER + CUSTOMERNUMBER + + + + + + + 1 + CUSTOMERNUMBER + integer + + + + Data Source + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + + + + 2.0 + + + + + + + CUSTOMERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + CUSTOMERNAME + 2 + + 12 + 50 + 0 + Nullable + + CUSTOMERNAME + + + + CUSTOMERNAME + + 50 + + + + + + + CONTACTLASTNAME + 3 + + 12 + 50 + 0 + Nullable + + CONTACTLASTNAME + + + + CONTACTLASTNAME + + 50 + + + + + + + CONTACTFIRSTNAME + 4 + + 12 + 50 + 0 + Nullable + + CONTACTFIRSTNAME + + + + CONTACTFIRSTNAME + + 50 + + + + + + + PHONE + 5 + + 12 + 50 + 0 + Nullable + + PHONE + + + + PHONE + + 50 + + + + + + + ADDRESSLINE1 + 6 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE1 + + + + ADDRESSLINE1 + + 50 + + + + + + + ADDRESSLINE2 + 7 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE2 + + + + ADDRESSLINE2 + + 50 + + + + + + + CITY + 8 + + 12 + 50 + 0 + Nullable + + CITY + + + + CITY + + 50 + + + + + + + STATE + 9 + + 12 + 50 + 0 + Nullable + + STATE + + + + STATE + + 50 + + + + + + + POSTALCODE + 10 + + 12 + 15 + 0 + Nullable + + POSTALCODE + + + + POSTALCODE + + 15 + + + + + + + COUNTRY + 11 + + 12 + 50 + 0 + Nullable + + COUNTRY + + + + COUNTRY + + 50 + + + + + + + SALESREPEMPLOYEENUMBER + 12 + + 4 + 10 + 0 + Nullable + + SALESREPEMPLOYEENUMBER + + + + SALESREPEMPLOYEENUMBER + + 11 + + + + + + + CREDITLIMIT + 13 + + 8 + 15 + 0 + Nullable + + CREDITLIMIT + + + + CREDITLIMIT + + 22 + + + + + + + +]]> + + + + + + + NewTabularHierarchy + + + + + string + NAME + + + + + + + NewTabularHierarchy1 + + + + + string + LINE + + + + + + + + + + + dataSetRow["PERCENT"] + float + + + + + Data Set + + + + + + + + + + + + html + new Date()]]> + + + + + + + + Data Cube + + + PERCENT + + + line/LINE + + + + Percent + ###0.00%{RoundingMode=HALF_UP} + + PERCENT_line/LINE + + + + + + + + + + + + + + + + + + Group + + + Group/NAME + + + + + NAME + + + + + + + + + line + + + line/LINE + + + + + LINE + + + + + + + + + + + + + + + + + + + + + + + + + NAME + dimension["Group"]["NAME"] + string + + + LINE + dimension["line"]["LINE"] + string + + + PERCENT_line/LINE + float + AVE + + + Expression + measure["PERCENT"] + + + + + + + list-ds + + + CUSTOMERNUMBER + CUSTOMERNUMBER + dataSetRow["CUSTOMERNUMBER"] + integer + + +
+ +
+ + + Data Cube + + + PERCENT + + + line/LINE + + + + Percent + ###0.00%{RoundingMode=HALF_UP} + + PERCENT_line/LINE + + + + + + + + + + + + + + + + + + Group + + + Group/NAME + + + + + NAME + + + + + + + + + line + + + line/LINE + + + + + LINE + + + + + + + + + + + + + + + + + + + + + + + + + NAME + dimension["Group"]["NAME"] + string + + + LINE + dimension["line"]["LINE"] + string + + + PERCENT_line/LINE + float + AVE + + + Expression + measure["PERCENT"] + + + + + + +
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffsetListOnly.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffsetListOnly.rptdesign new file mode 100644 index 00000000000..0460be9cf95 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffsetListOnly.rptdesign @@ -0,0 +1,766 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + + + Data Cube.Data Set.x + integer + false + + + Data Cube.Data Set.y + integer + false + + + 135 + 80 + in + /templates/blank_report.gif + ltr + 72 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + LINE + dimension + LINE + LINE + + + NAME + dimension + NAME + NAME + + + PERCENT + measure + PERCENT + PERCENT + + + + + + + 1 + LINE + string + + + 2 + NAME + string + + + 3 + PERCENT + float + + + + Data Source + + + 1 + LINE + LINE + string + 12 + + + 2 + NAME + NAME + string + 12 + + + 3 + PERCENT + PERCENT + float + 8 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + PRODUCTCODE + 2 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + QUANTITYORDERED + 3 + + 4 + 10 + 0 + Nullable + + QUANTITYORDERED + + + + QUANTITYORDERED + + 11 + + + + + + + PRICEEACH + 4 + + 8 + 15 + 0 + Nullable + + PRICEEACH + + + + PRICEEACH + + 22 + + + + + + + ORDERLINENUMBER + 5 + + 5 + 5 + 0 + Nullable + + ORDERLINENUMBER + + + + ORDERLINENUMBER + + 6 + + + + + + + +]]> + + + nulls lowest + + + CUSTOMERNUMBER + measure + CUSTOMERNUMBER + CUSTOMERNUMBER + + + + + + + 1 + CUSTOMERNUMBER + integer + + + + Data Source + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + + + + 2.0 + + + + + + + CUSTOMERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + CUSTOMERNAME + 2 + + 12 + 50 + 0 + Nullable + + CUSTOMERNAME + + + + CUSTOMERNAME + + 50 + + + + + + + CONTACTLASTNAME + 3 + + 12 + 50 + 0 + Nullable + + CONTACTLASTNAME + + + + CONTACTLASTNAME + + 50 + + + + + + + CONTACTFIRSTNAME + 4 + + 12 + 50 + 0 + Nullable + + CONTACTFIRSTNAME + + + + CONTACTFIRSTNAME + + 50 + + + + + + + PHONE + 5 + + 12 + 50 + 0 + Nullable + + PHONE + + + + PHONE + + 50 + + + + + + + ADDRESSLINE1 + 6 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE1 + + + + ADDRESSLINE1 + + 50 + + + + + + + ADDRESSLINE2 + 7 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE2 + + + + ADDRESSLINE2 + + 50 + + + + + + + CITY + 8 + + 12 + 50 + 0 + Nullable + + CITY + + + + CITY + + 50 + + + + + + + STATE + 9 + + 12 + 50 + 0 + Nullable + + STATE + + + + STATE + + 50 + + + + + + + POSTALCODE + 10 + + 12 + 15 + 0 + Nullable + + POSTALCODE + + + + POSTALCODE + + 15 + + + + + + + COUNTRY + 11 + + 12 + 50 + 0 + Nullable + + COUNTRY + + + + COUNTRY + + 50 + + + + + + + SALESREPEMPLOYEENUMBER + 12 + + 4 + 10 + 0 + Nullable + + SALESREPEMPLOYEENUMBER + + + + SALESREPEMPLOYEENUMBER + + 11 + + + + + + + CREDITLIMIT + 13 + + 8 + 15 + 0 + Nullable + + CREDITLIMIT + + + + CREDITLIMIT + + 22 + + + + + + + +]]> + + + + + + + NewTabularHierarchy + + + + + string + NAME + + + + + + + NewTabularHierarchy1 + + + + + string + LINE + + + + + + + + + + + dataSetRow["PERCENT"] + float + + + + + Data Set + + + + + + + + + + + + html + new Date()]]> + + + + + + + list-ds + + + CUSTOMERNUMBER + CUSTOMERNUMBER + dataSetRow["CUSTOMERNUMBER"] + integer + + +
+ +
+ + + Data Cube + + + PERCENT + + + line/LINE + + + + Percent + ###0.00%{RoundingMode=HALF_UP} + + PERCENT_line/LINE + + + + + + + + + + + + + + + + + + Group + + + Group/NAME + + + + + NAME + + + + + + + + + line + + + line/LINE + + + + + LINE + + + + + + + + + + + + + + + + + + + + + + + + + NAME + dimension["Group"]["NAME"] + string + + + LINE + dimension["line"]["LINE"] + string + + + PERCENT_line/LINE + float + AVE + + + Expression + measure["PERCENT"] + + + + + + +
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffsetMultiNestedTables.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffsetMultiNestedTables.rptdesign new file mode 100644 index 00000000000..808f35ee255 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue110ListElementsOffsetMultiNestedTables.rptdesign @@ -0,0 +1,1098 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + + + Data Cube.Data Set.x + integer + false + + + Data Cube.Data Set.y + integer + false + + + 135 + 80 + in + /templates/blank_report.gif + ltr + 72 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + nulls lowest + + + LINE + dimension + LINE + LINE + + + NAME + dimension + NAME + NAME + + + PERCENT + measure + PERCENT + PERCENT + + + + + + + 1 + LINE + string + + + 2 + NAME + string + + + 3 + PERCENT + float + + + + Data Source + + + 1 + LINE + LINE + string + 12 + + + 2 + NAME + NAME + string + 12 + + + 3 + PERCENT + PERCENT + float + 8 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + PRODUCTCODE + 2 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + QUANTITYORDERED + 3 + + 4 + 10 + 0 + Nullable + + QUANTITYORDERED + + + + QUANTITYORDERED + + 11 + + + + + + + PRICEEACH + 4 + + 8 + 15 + 0 + Nullable + + PRICEEACH + + + + PRICEEACH + + 22 + + + + + + + ORDERLINENUMBER + 5 + + 5 + 5 + 0 + Nullable + + ORDERLINENUMBER + + + + ORDERLINENUMBER + + 6 + + + + + + + +]]> + + + nulls lowest + + + CUSTOMERNUMBER + measure + CUSTOMERNUMBER + CUSTOMERNUMBER + + + + + + + 1 + CUSTOMERNUMBER + integer + + + + Data Source + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + + + + 2.0 + + + + + + + CUSTOMERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + CUSTOMERNAME + 2 + + 12 + 50 + 0 + Nullable + + CUSTOMERNAME + + + + CUSTOMERNAME + + 50 + + + + + + + CONTACTLASTNAME + 3 + + 12 + 50 + 0 + Nullable + + CONTACTLASTNAME + + + + CONTACTLASTNAME + + 50 + + + + + + + CONTACTFIRSTNAME + 4 + + 12 + 50 + 0 + Nullable + + CONTACTFIRSTNAME + + + + CONTACTFIRSTNAME + + 50 + + + + + + + PHONE + 5 + + 12 + 50 + 0 + Nullable + + PHONE + + + + PHONE + + 50 + + + + + + + ADDRESSLINE1 + 6 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE1 + + + + ADDRESSLINE1 + + 50 + + + + + + + ADDRESSLINE2 + 7 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE2 + + + + ADDRESSLINE2 + + 50 + + + + + + + CITY + 8 + + 12 + 50 + 0 + Nullable + + CITY + + + + CITY + + 50 + + + + + + + STATE + 9 + + 12 + 50 + 0 + Nullable + + STATE + + + + STATE + + 50 + + + + + + + POSTALCODE + 10 + + 12 + 15 + 0 + Nullable + + POSTALCODE + + + + POSTALCODE + + 15 + + + + + + + COUNTRY + 11 + + 12 + 50 + 0 + Nullable + + COUNTRY + + + + COUNTRY + + 50 + + + + + + + SALESREPEMPLOYEENUMBER + 12 + + 4 + 10 + 0 + Nullable + + SALESREPEMPLOYEENUMBER + + + + SALESREPEMPLOYEENUMBER + + 11 + + + + + + + CREDITLIMIT + 13 + + 8 + 15 + 0 + Nullable + + CREDITLIMIT + + + + CREDITLIMIT + + 22 + + + + + + + +]]> + + + + + + + NewTabularHierarchy + + + + + string + NAME + + + + + + + NewTabularHierarchy1 + + + + + string + LINE + + + + + + + + + + + dataSetRow["PERCENT"] + float + + + + + Data Set + + + + + + + + + + + + html + new Date()]]> + + + + + + + list-ds + + + CUSTOMERNUMBER + CUSTOMERNUMBER + dataSetRow["CUSTOMERNUMBER"] + integer + + +
+ +
+ + + Data Cube + + + PERCENT + + + line/LINE + + + + Percent + ###0.00%{RoundingMode=HALF_UP} + + PERCENT_line/LINE + + + + + + + + + + + + + + + + + + Group + + + Group/NAME + + + + + NAME + + + + + + + + + line + + + line/LINE + + + + + LINE + + + + + + + + + + + + + + + + + + + + + + + + + NAME + dimension["Group"]["NAME"] + string + + + LINE + dimension["line"]["LINE"] + string + + + PERCENT_line/LINE + float + AVE + + + Expression + measure["PERCENT"] + + + + + + + Data Cube + + + PERCENT + + + line/LINE + + + + Percent + ###0.00%{RoundingMode=HALF_UP} + + PERCENT_line/LINE + + + + + + + + + + + + + + + + + + Group + + + Group/NAME + + + + + NAME + + + + + + + + + line + + + line/LINE + + + + + LINE + + + + + + + + + + + + + + + + + + + + + + + + + NAME + dimension["Group"]["NAME"] + string + + + LINE + dimension["line"]["LINE"] + string + + + PERCENT_line/LINE + float + AVE + + + Expression + measure["PERCENT"] + + + + + + + Data Cube + + + PERCENT + + + line/LINE + + + + Percent + ###0.00%{RoundingMode=HALF_UP} + + PERCENT_line/LINE + + + + + + + + + + + + + + + + + + Group + + + Group/NAME + + + + + NAME + + + + + + + + + line + + + line/LINE + + + + + LINE + + + + + + + + + + + + + + + + + + + + + + + + + NAME + dimension["Group"]["NAME"] + string + + + LINE + dimension["line"]["LINE"] + string + + + PERCENT_line/LINE + float + AVE + + + Expression + measure["PERCENT"] + + + + + + + Data Cube + + + PERCENT + + + line/LINE + + + + Percent + ###0.00%{RoundingMode=HALF_UP} + + PERCENT_line/LINE + + + + + + + + + + + + + + + + + + Group + + + Group/NAME + + + + + NAME + + + + + + + + + line + + + line/LINE + + + + + LINE + + + + + + + + + + + + + + + + + + + + + + + + + NAME + dimension["Group"]["NAME"] + string + + + LINE + dimension["line"]["LINE"] + string + + + PERCENT_line/LINE + float + AVE + + + Expression + measure["PERCENT"] + + + + + + +
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112BetterDesign.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112BetterDesign.rptdesign new file mode 100644 index 00000000000..e9e345954c5 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112BetterDesign.rptdesign @@ -0,0 +1,2069 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + in + /templates/blank_report.gif + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + EMPLOYEENUMBER + EMPLOYEENUMBER + EMPLOYEENUMBER + + + LASTNAME + LASTNAME + LASTNAME + + + FIRSTNAME + FIRSTNAME + FIRSTNAME + + + EXTENSION + EXTENSION + EXTENSION + + + EMAIL + EMAIL + EMAIL + + + OFFICECODE + OFFICECODE + OFFICECODE + + + REPORTSTO + REPORTSTO + REPORTSTO + + + JOBTITLE + JOBTITLE + JOBTITLE + + + + + + 1 + EMPLOYEENUMBER + integer + + + 2 + LASTNAME + string + + + 3 + FIRSTNAME + string + + + 4 + EXTENSION + string + + + 5 + EMAIL + string + + + 6 + OFFICECODE + string + + + 7 + REPORTSTO + integer + + + 8 + JOBTITLE + string + + + + Data Source + + + 1 + EMPLOYEENUMBER + EMPLOYEENUMBER + integer + 4 + + + 2 + LASTNAME + LASTNAME + string + 12 + + + 3 + FIRSTNAME + FIRSTNAME + string + 12 + + + 4 + EXTENSION + EXTENSION + string + 12 + + + 5 + EMAIL + EMAIL + string + 12 + + + 6 + OFFICECODE + OFFICECODE + string + 12 + + + 7 + REPORTSTO + REPORTSTO + integer + 4 + + + 8 + JOBTITLE + JOBTITLE + string + 12 + + + + + + 2.0 + + + + + + + EMPLOYEENUMBER + 1 + + 4 + 10 + 0 + Nullable + + EMPLOYEENUMBER + + + + EMPLOYEENUMBER + + 11 + + + + + + + LASTNAME + 2 + + 12 + 50 + 0 + Nullable + + LASTNAME + + + + LASTNAME + + 50 + + + + + + + FIRSTNAME + 3 + + 12 + 50 + 0 + Nullable + + FIRSTNAME + + + + FIRSTNAME + + 50 + + + + + + + EXTENSION + 4 + + 12 + 10 + 0 + Nullable + + EXTENSION + + + + EXTENSION + + 10 + + + + + + + EMAIL + 5 + + 12 + 100 + 0 + Nullable + + EMAIL + + + + EMAIL + + 100 + + + + + + + OFFICECODE + 6 + + 12 + 10 + 0 + Nullable + + OFFICECODE + + + + OFFICECODE + + 10 + + + + + + + REPORTSTO + 7 + + 4 + 10 + 0 + Nullable + + REPORTSTO + + + + REPORTSTO + + 11 + + + + + + + JOBTITLE + 8 + + 12 + 50 + 0 + Nullable + + JOBTITLE + + + + JOBTITLE + + 50 + + + + + + + +]]> + + + + + CUSTOMERNUMBER + measure + CUSTOMERNUMBER + CUSTOMERNUMBER + + + CUSTOMERNAME + dimension + CUSTOMERNAME + CUSTOMERNAME + + + CONTACTLASTNAME + dimension + CONTACTLASTNAME + CONTACTLASTNAME + + + CONTACTFIRSTNAME + dimension + CONTACTFIRSTNAME + CONTACTFIRSTNAME + + + PHONE + dimension + PHONE + PHONE + + + ADDRESSLINE1 + dimension + ADDRESSLINE1 + ADDRESSLINE1 + + + ADDRESSLINE2 + dimension + ADDRESSLINE2 + ADDRESSLINE2 + + + CITY + dimension + CITY + CITY + + + STATE + dimension + STATE + STATE + + + POSTALCODE + dimension + POSTALCODE + POSTALCODE + + + COUNTRY + dimension + COUNTRY + COUNTRY + + + SALESREPEMPLOYEENUMBER + measure + SALESREPEMPLOYEENUMBER + SALESREPEMPLOYEENUMBER + + + CREDITLIMIT + measure + CREDITLIMIT + CREDITLIMIT + + + + + SalesRep + + integer + 4 + 1 + null + true + true + true + false + + + + + + 1 + CUSTOMERNUMBER + integer + + + 2 + CUSTOMERNAME + string + + + 3 + CONTACTLASTNAME + string + + + 4 + CONTACTFIRSTNAME + string + + + 5 + PHONE + string + + + 6 + ADDRESSLINE1 + string + + + 7 + ADDRESSLINE2 + string + + + 8 + CITY + string + + + 9 + STATE + string + + + 10 + POSTALCODE + string + + + 11 + COUNTRY + string + + + 12 + SALESREPEMPLOYEENUMBER + integer + + + 13 + CREDITLIMIT + float + + + + Data Source + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + 2 + CUSTOMERNAME + CUSTOMERNAME + string + 12 + + + 3 + CONTACTLASTNAME + CONTACTLASTNAME + string + 12 + + + 4 + CONTACTFIRSTNAME + CONTACTFIRSTNAME + string + 12 + + + 5 + PHONE + PHONE + string + 12 + + + 6 + ADDRESSLINE1 + ADDRESSLINE1 + string + 12 + + + 7 + ADDRESSLINE2 + ADDRESSLINE2 + string + 12 + + + 8 + CITY + CITY + string + 12 + + + 9 + STATE + STATE + string + 12 + + + 10 + POSTALCODE + POSTALCODE + string + 12 + + + 11 + COUNTRY + COUNTRY + string + 12 + + + 12 + SALESREPEMPLOYEENUMBER + SALESREPEMPLOYEENUMBER + integer + 4 + + + 13 + CREDITLIMIT + CREDITLIMIT + float + 8 + + + + + + 2.0 + + + + In + + + + 1 + + 4 + 10 + 0 + Nullable + + + + true + + + + + + + + + + + + CUSTOMERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + CUSTOMERNAME + 2 + + 12 + 50 + 0 + Nullable + + CUSTOMERNAME + + + + CUSTOMERNAME + + 50 + + + + + + + CONTACTLASTNAME + 3 + + 12 + 50 + 0 + Nullable + + CONTACTLASTNAME + + + + CONTACTLASTNAME + + 50 + + + + + + + CONTACTFIRSTNAME + 4 + + 12 + 50 + 0 + Nullable + + CONTACTFIRSTNAME + + + + CONTACTFIRSTNAME + + 50 + + + + + + + PHONE + 5 + + 12 + 50 + 0 + Nullable + + PHONE + + + + PHONE + + 50 + + + + + + + ADDRESSLINE1 + 6 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE1 + + + + ADDRESSLINE1 + + 50 + + + + + + + ADDRESSLINE2 + 7 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE2 + + + + ADDRESSLINE2 + + 50 + + + + + + + CITY + 8 + + 12 + 50 + 0 + Nullable + + CITY + + + + CITY + + 50 + + + + + + + STATE + 9 + + 12 + 50 + 0 + Nullable + + STATE + + + + STATE + + 50 + + + + + + + POSTALCODE + 10 + + 12 + 15 + 0 + Nullable + + POSTALCODE + + + + POSTALCODE + + 15 + + + + + + + COUNTRY + 11 + + 12 + 50 + 0 + Nullable + + COUNTRY + + + + COUNTRY + + 50 + + + + + + + SALESREPEMPLOYEENUMBER + 12 + + 4 + 10 + 0 + Nullable + + SALESREPEMPLOYEENUMBER + + + + SALESREPEMPLOYEENUMBER + + 11 + + + + + + + CREDITLIMIT + 13 + + 8 + 15 + 0 + Nullable + + CREDITLIMIT + + + + CREDITLIMIT + + 22 + + + + + + + +]]> + + + + + ORDERNUMBER + ORDERNUMBER + ORDERNUMBER + + + ORDERDATE + ORDERDATE + ORDERDATE + + + REQUIREDDATE + REQUIREDDATE + REQUIREDDATE + + + SHIPPEDDATE + SHIPPEDDATE + SHIPPEDDATE + + + STATUS + STATUS + STATUS + + + COMMENTS + COMMENTS + COMMENTS + + + CUSTOMERNUMBER + CUSTOMERNUMBER + CUSTOMERNUMBER + + + + + + 1 + ORDERNUMBER + integer + + + 2 + ORDERDATE + date + + + 3 + REQUIREDDATE + date + + + 4 + SHIPPEDDATE + date + + + 5 + STATUS + string + + + 6 + COMMENTS + string + + + 7 + CUSTOMERNUMBER + integer + + + + Data Source + + + 1 + ORDERNUMBER + ORDERNUMBER + integer + 4 + + + 2 + ORDERDATE + ORDERDATE + date + 91 + + + 3 + REQUIREDDATE + REQUIREDDATE + date + 91 + + + 4 + SHIPPEDDATE + SHIPPEDDATE + date + 91 + + + 5 + STATUS + STATUS + string + 12 + + + 6 + COMMENTS + COMMENTS + string + 12 + + + 7 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + ORDERDATE + 2 + + 91 + 10 + 0 + Nullable + + ORDERDATE + + + + ORDERDATE + + 10 + + + + + + + REQUIREDDATE + 3 + + 91 + 10 + 0 + Nullable + + REQUIREDDATE + + + + REQUIREDDATE + + 10 + + + + + + + SHIPPEDDATE + 4 + + 91 + 10 + 0 + Nullable + + SHIPPEDDATE + + + + SHIPPEDDATE + + 10 + + + + + + + STATUS + 5 + + 12 + 15 + 0 + Nullable + + STATUS + + + + STATUS + + 15 + + + + + + + COMMENTS + 6 + + 12 + 32700 + 0 + Nullable + + COMMENTS + + + + COMMENTS + + 32700 + + + + + + + CUSTOMERNUMBER + 7 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + +]]> + + + + + ORDERNUMBER + measure + ORDERNUMBER + ORDERNUMBER + + + PRODUCTCODE + dimension + PRODUCTCODE + PRODUCTCODE + + + QUANTITYORDERED + measure + QUANTITYORDERED + QUANTITYORDERED + + + PRICEEACH + measure + PRICEEACH + PRICEEACH + + + ORDERLINENUMBER + measure + ORDERLINENUMBER + ORDERLINENUMBER + + + PRODUCTCODE_6 + dimension + PRODUCTCODE + PRODUCTCODE + + + PRODUCTNAME + dimension + PRODUCTNAME + PRODUCTNAME + + + PRODUCTLINE + dimension + PRODUCTLINE + PRODUCTLINE + + + PRODUCTSCALE + dimension + PRODUCTSCALE + PRODUCTSCALE + + + PRODUCTVENDOR + dimension + PRODUCTVENDOR + PRODUCTVENDOR + + + PRODUCTDESCRIPTION + dimension + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + + + QUANTITYINSTOCK + measure + QUANTITYINSTOCK + QUANTITYINSTOCK + + + BUYPRICE + measure + BUYPRICE + BUYPRICE + + + MSRP + measure + MSRP + MSRP + + + + + + 1 + ORDERNUMBER + integer + + + 2 + PRODUCTCODE + string + + + 3 + QUANTITYORDERED + integer + + + 4 + PRICEEACH + float + + + 5 + ORDERLINENUMBER + integer + + + 6 + PRODUCTCODE_6 + string + + + 7 + PRODUCTNAME + string + + + 8 + PRODUCTLINE + string + + + 9 + PRODUCTSCALE + string + + + 10 + PRODUCTVENDOR + string + + + 11 + PRODUCTDESCRIPTION + string + + + 12 + QUANTITYINSTOCK + integer + + + 13 + BUYPRICE + float + + + 14 + MSRP + float + + + + Data Source + + + 1 + ORDERNUMBER + ORDERNUMBER + integer + 4 + + + 2 + PRODUCTCODE + PRODUCTCODE + string + 12 + + + 3 + QUANTITYORDERED + QUANTITYORDERED + integer + 4 + + + 4 + PRICEEACH + PRICEEACH + float + 8 + + + 5 + ORDERLINENUMBER + ORDERLINENUMBER + integer + 5 + + + 6 + PRODUCTCODE_6 + PRODUCTCODE + string + 12 + + + 7 + PRODUCTNAME + PRODUCTNAME + string + 12 + + + 8 + PRODUCTLINE + PRODUCTLINE + string + 12 + + + 9 + PRODUCTSCALE + PRODUCTSCALE + string + 12 + + + 10 + PRODUCTVENDOR + PRODUCTVENDOR + string + 12 + + + 11 + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + string + 12 + + + 12 + QUANTITYINSTOCK + QUANTITYINSTOCK + integer + 4 + + + 13 + BUYPRICE + BUYPRICE + float + 8 + + + 14 + MSRP + MSRP + float + 8 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + PRODUCTCODE + 2 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + QUANTITYORDERED + 3 + + 4 + 10 + 0 + Nullable + + QUANTITYORDERED + + + + QUANTITYORDERED + + 11 + + + + + + + PRICEEACH + 4 + + 8 + 15 + 0 + Nullable + + PRICEEACH + + + + PRICEEACH + + 22 + + + + + + + ORDERLINENUMBER + 5 + + 5 + 5 + 0 + Nullable + + ORDERLINENUMBER + + + + ORDERLINENUMBER + + 6 + + + + + + + PRODUCTCODE + 6 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + PRODUCTNAME + 7 + + 12 + 70 + 0 + Nullable + + PRODUCTNAME + + + + PRODUCTNAME + + 70 + + + + + + + PRODUCTLINE + 8 + + 12 + 50 + 0 + Nullable + + PRODUCTLINE + + + + PRODUCTLINE + + 50 + + + + + + + PRODUCTSCALE + 9 + + 12 + 10 + 0 + Nullable + + PRODUCTSCALE + + + + PRODUCTSCALE + + 10 + + + + + + + PRODUCTVENDOR + 10 + + 12 + 50 + 0 + Nullable + + PRODUCTVENDOR + + + + PRODUCTVENDOR + + 50 + + + + + + + PRODUCTDESCRIPTION + 11 + + 12 + 32700 + 0 + Nullable + + PRODUCTDESCRIPTION + + + + PRODUCTDESCRIPTION + + 32700 + + + + + + + QUANTITYINSTOCK + 12 + + 4 + 10 + 0 + Nullable + + QUANTITYINSTOCK + + + + QUANTITYINSTOCK + + 11 + + + + + + + BUYPRICE + 13 + + 8 + 15 + 0 + Nullable + + BUYPRICE + + + + BUYPRICE + + 22 + + + + + + + MSRP + 14 + + 8 + 15 + 0 + Nullable + + MSRP + + + + MSRP + + 22 + + + + + + + +]]> + + + + + + + + + + + + html + new Date()]]> + + + + + + + + + + + + + + 5 + 1 + + Employees + + + EMPLOYEENUMBER + EMPLOYEENUMBER + dataSetRow["EMPLOYEENUMBER"] + integer + + + LASTNAME + LASTNAME + dataSetRow["LASTNAME"] + string + + + FIRSTNAME + FIRSTNAME + dataSetRow["FIRSTNAME"] + string + + + EXTENSION + EXTENSION + dataSetRow["EXTENSION"] + string + + + EMAIL + EMAIL + dataSetRow["EMAIL"] + string + + + OFFICECODE + OFFICECODE + dataSetRow["OFFICECODE"] + string + + + REPORTSTO + REPORTSTO + dataSetRow["REPORTSTO"] + integer + + + JOBTITLE + JOBTITLE + dataSetRow["JOBTITLE"] + string + + + Column Binding + dataSetRow["LASTNAME"] + string + true + + + + + + + + + + + + + + + 3 + 1 + + Column Binding + + + + + + + + 3 + 1 + + + + + + + 3 + 1 + + Customers + + + SalesRep + + row["EMPLOYEENUMBER"] + + + + + + CUSTOMERNUMBER + CUSTOMERNUMBER + dataSetRow["CUSTOMERNUMBER"] + integer + + + CUSTOMERNAME + CUSTOMERNAME + dataSetRow["CUSTOMERNAME"] + string + + + CONTACTLASTNAME + CONTACTLASTNAME + dataSetRow["CONTACTLASTNAME"] + string + + + CONTACTFIRSTNAME + CONTACTFIRSTNAME + dataSetRow["CONTACTFIRSTNAME"] + string + + + PHONE + PHONE + dataSetRow["PHONE"] + string + + + ADDRESSLINE1 + ADDRESSLINE1 + dataSetRow["ADDRESSLINE1"] + string + + + ADDRESSLINE2 + ADDRESSLINE2 + dataSetRow["ADDRESSLINE2"] + string + + + CITY + CITY + dataSetRow["CITY"] + string + + + STATE + STATE + dataSetRow["STATE"] + string + + + POSTALCODE + POSTALCODE + dataSetRow["POSTALCODE"] + string + + + COUNTRY + COUNTRY + dataSetRow["COUNTRY"] + string + + + SALESREPEMPLOYEENUMBER + SALESREPEMPLOYEENUMBER + dataSetRow["SALESREPEMPLOYEENUMBER"] + integer + + + CREDITLIMIT + CREDITLIMIT + dataSetRow["CREDITLIMIT"] + float + + + Column Binding + dataSetRow["CUSTOMERNAME"] + string + true + + + + + + + + + + + + + + Column Binding + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112MethodNotImplementedDeeplyNestedTables.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112MethodNotImplementedDeeplyNestedTables.java new file mode 100644 index 00000000000..af8be70b41b --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112MethodNotImplementedDeeplyNestedTables.java @@ -0,0 +1,72 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue112MethodNotImplementedDeeplyNestedTables extends ReportRunner { + + @Test + public void testIssue112MethodNotImplementedDeeplyNestedTables() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue112MethodNotImplementedDeeplyNestedTables.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 69, this.firstNullRow(sheet)); + + } finally { + inputStream.close(); + } + } + + @Test + public void testIssue112BetterDesign() throws BirtException, IOException { + + debug = true; + InputStream inputStream = runAndRenderReport("Issue112BetterDesign.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 169, this.firstNullRow(sheet)); + assertEquals( "Mini Gifts Distributors Ltd.", sheet.getRow(20).getCell(2).getStringCellValue() ); + + } finally { + inputStream.close(); + } + } + + +} + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112MethodNotImplementedDeeplyNestedTables.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112MethodNotImplementedDeeplyNestedTables.rptdesign new file mode 100644 index 00000000000..adda8f37323 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue112MethodNotImplementedDeeplyNestedTables.rptdesign @@ -0,0 +1,2047 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + in + /templates/blank_report.gif + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + EMPLOYEENUMBER + EMPLOYEENUMBER + EMPLOYEENUMBER + + + LASTNAME + LASTNAME + LASTNAME + + + FIRSTNAME + FIRSTNAME + FIRSTNAME + + + EXTENSION + EXTENSION + EXTENSION + + + EMAIL + EMAIL + EMAIL + + + OFFICECODE + OFFICECODE + OFFICECODE + + + REPORTSTO + REPORTSTO + REPORTSTO + + + JOBTITLE + JOBTITLE + JOBTITLE + + + + + + 1 + EMPLOYEENUMBER + integer + + + 2 + LASTNAME + string + + + 3 + FIRSTNAME + string + + + 4 + EXTENSION + string + + + 5 + EMAIL + string + + + 6 + OFFICECODE + string + + + 7 + REPORTSTO + integer + + + 8 + JOBTITLE + string + + + + Data Source + + + 1 + EMPLOYEENUMBER + EMPLOYEENUMBER + integer + 4 + + + 2 + LASTNAME + LASTNAME + string + 12 + + + 3 + FIRSTNAME + FIRSTNAME + string + 12 + + + 4 + EXTENSION + EXTENSION + string + 12 + + + 5 + EMAIL + EMAIL + string + 12 + + + 6 + OFFICECODE + OFFICECODE + string + 12 + + + 7 + REPORTSTO + REPORTSTO + integer + 4 + + + 8 + JOBTITLE + JOBTITLE + string + 12 + + + + + + 2.0 + + + + + + + EMPLOYEENUMBER + 1 + + 4 + 10 + 0 + Nullable + + EMPLOYEENUMBER + + + + EMPLOYEENUMBER + + 11 + + + + + + + LASTNAME + 2 + + 12 + 50 + 0 + Nullable + + LASTNAME + + + + LASTNAME + + 50 + + + + + + + FIRSTNAME + 3 + + 12 + 50 + 0 + Nullable + + FIRSTNAME + + + + FIRSTNAME + + 50 + + + + + + + EXTENSION + 4 + + 12 + 10 + 0 + Nullable + + EXTENSION + + + + EXTENSION + + 10 + + + + + + + EMAIL + 5 + + 12 + 100 + 0 + Nullable + + EMAIL + + + + EMAIL + + 100 + + + + + + + OFFICECODE + 6 + + 12 + 10 + 0 + Nullable + + OFFICECODE + + + + OFFICECODE + + 10 + + + + + + + REPORTSTO + 7 + + 4 + 10 + 0 + Nullable + + REPORTSTO + + + + REPORTSTO + + 11 + + + + + + + JOBTITLE + 8 + + 12 + 50 + 0 + Nullable + + JOBTITLE + + + + JOBTITLE + + 50 + + + + + + + +]]> + + + + + CUSTOMERNUMBER + measure + CUSTOMERNUMBER + CUSTOMERNUMBER + + + CUSTOMERNAME + dimension + CUSTOMERNAME + CUSTOMERNAME + + + CONTACTLASTNAME + dimension + CONTACTLASTNAME + CONTACTLASTNAME + + + CONTACTFIRSTNAME + dimension + CONTACTFIRSTNAME + CONTACTFIRSTNAME + + + PHONE + dimension + PHONE + PHONE + + + ADDRESSLINE1 + dimension + ADDRESSLINE1 + ADDRESSLINE1 + + + ADDRESSLINE2 + dimension + ADDRESSLINE2 + ADDRESSLINE2 + + + CITY + dimension + CITY + CITY + + + STATE + dimension + STATE + STATE + + + POSTALCODE + dimension + POSTALCODE + POSTALCODE + + + COUNTRY + dimension + COUNTRY + COUNTRY + + + SALESREPEMPLOYEENUMBER + measure + SALESREPEMPLOYEENUMBER + SALESREPEMPLOYEENUMBER + + + CREDITLIMIT + measure + CREDITLIMIT + CREDITLIMIT + + + + + SalesRep + + integer + 4 + 1 + null + true + true + true + false + + + + + + 1 + CUSTOMERNUMBER + integer + + + 2 + CUSTOMERNAME + string + + + 3 + CONTACTLASTNAME + string + + + 4 + CONTACTFIRSTNAME + string + + + 5 + PHONE + string + + + 6 + ADDRESSLINE1 + string + + + 7 + ADDRESSLINE2 + string + + + 8 + CITY + string + + + 9 + STATE + string + + + 10 + POSTALCODE + string + + + 11 + COUNTRY + string + + + 12 + SALESREPEMPLOYEENUMBER + integer + + + 13 + CREDITLIMIT + float + + + + Data Source + + + 1 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + 2 + CUSTOMERNAME + CUSTOMERNAME + string + 12 + + + 3 + CONTACTLASTNAME + CONTACTLASTNAME + string + 12 + + + 4 + CONTACTFIRSTNAME + CONTACTFIRSTNAME + string + 12 + + + 5 + PHONE + PHONE + string + 12 + + + 6 + ADDRESSLINE1 + ADDRESSLINE1 + string + 12 + + + 7 + ADDRESSLINE2 + ADDRESSLINE2 + string + 12 + + + 8 + CITY + CITY + string + 12 + + + 9 + STATE + STATE + string + 12 + + + 10 + POSTALCODE + POSTALCODE + string + 12 + + + 11 + COUNTRY + COUNTRY + string + 12 + + + 12 + SALESREPEMPLOYEENUMBER + SALESREPEMPLOYEENUMBER + integer + 4 + + + 13 + CREDITLIMIT + CREDITLIMIT + float + 8 + + + + + + 2.0 + + + + In + + + + 1 + + 4 + 10 + 0 + Nullable + + + + true + + + + + + + + + + + + CUSTOMERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + CUSTOMERNAME + 2 + + 12 + 50 + 0 + Nullable + + CUSTOMERNAME + + + + CUSTOMERNAME + + 50 + + + + + + + CONTACTLASTNAME + 3 + + 12 + 50 + 0 + Nullable + + CONTACTLASTNAME + + + + CONTACTLASTNAME + + 50 + + + + + + + CONTACTFIRSTNAME + 4 + + 12 + 50 + 0 + Nullable + + CONTACTFIRSTNAME + + + + CONTACTFIRSTNAME + + 50 + + + + + + + PHONE + 5 + + 12 + 50 + 0 + Nullable + + PHONE + + + + PHONE + + 50 + + + + + + + ADDRESSLINE1 + 6 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE1 + + + + ADDRESSLINE1 + + 50 + + + + + + + ADDRESSLINE2 + 7 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE2 + + + + ADDRESSLINE2 + + 50 + + + + + + + CITY + 8 + + 12 + 50 + 0 + Nullable + + CITY + + + + CITY + + 50 + + + + + + + STATE + 9 + + 12 + 50 + 0 + Nullable + + STATE + + + + STATE + + 50 + + + + + + + POSTALCODE + 10 + + 12 + 15 + 0 + Nullable + + POSTALCODE + + + + POSTALCODE + + 15 + + + + + + + COUNTRY + 11 + + 12 + 50 + 0 + Nullable + + COUNTRY + + + + COUNTRY + + 50 + + + + + + + SALESREPEMPLOYEENUMBER + 12 + + 4 + 10 + 0 + Nullable + + SALESREPEMPLOYEENUMBER + + + + SALESREPEMPLOYEENUMBER + + 11 + + + + + + + CREDITLIMIT + 13 + + 8 + 15 + 0 + Nullable + + CREDITLIMIT + + + + CREDITLIMIT + + 22 + + + + + + + +]]> + + + + + ORDERNUMBER + ORDERNUMBER + ORDERNUMBER + + + ORDERDATE + ORDERDATE + ORDERDATE + + + REQUIREDDATE + REQUIREDDATE + REQUIREDDATE + + + SHIPPEDDATE + SHIPPEDDATE + SHIPPEDDATE + + + STATUS + STATUS + STATUS + + + COMMENTS + COMMENTS + COMMENTS + + + CUSTOMERNUMBER + CUSTOMERNUMBER + CUSTOMERNUMBER + + + + + + 1 + ORDERNUMBER + integer + + + 2 + ORDERDATE + date + + + 3 + REQUIREDDATE + date + + + 4 + SHIPPEDDATE + date + + + 5 + STATUS + string + + + 6 + COMMENTS + string + + + 7 + CUSTOMERNUMBER + integer + + + + Data Source + + + 1 + ORDERNUMBER + ORDERNUMBER + integer + 4 + + + 2 + ORDERDATE + ORDERDATE + date + 91 + + + 3 + REQUIREDDATE + REQUIREDDATE + date + 91 + + + 4 + SHIPPEDDATE + SHIPPEDDATE + date + 91 + + + 5 + STATUS + STATUS + string + 12 + + + 6 + COMMENTS + COMMENTS + string + 12 + + + 7 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + ORDERDATE + 2 + + 91 + 10 + 0 + Nullable + + ORDERDATE + + + + ORDERDATE + + 10 + + + + + + + REQUIREDDATE + 3 + + 91 + 10 + 0 + Nullable + + REQUIREDDATE + + + + REQUIREDDATE + + 10 + + + + + + + SHIPPEDDATE + 4 + + 91 + 10 + 0 + Nullable + + SHIPPEDDATE + + + + SHIPPEDDATE + + 10 + + + + + + + STATUS + 5 + + 12 + 15 + 0 + Nullable + + STATUS + + + + STATUS + + 15 + + + + + + + COMMENTS + 6 + + 12 + 32700 + 0 + Nullable + + COMMENTS + + + + COMMENTS + + 32700 + + + + + + + CUSTOMERNUMBER + 7 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + +]]> + + + + + ORDERNUMBER + measure + ORDERNUMBER + ORDERNUMBER + + + PRODUCTCODE + dimension + PRODUCTCODE + PRODUCTCODE + + + QUANTITYORDERED + measure + QUANTITYORDERED + QUANTITYORDERED + + + PRICEEACH + measure + PRICEEACH + PRICEEACH + + + ORDERLINENUMBER + measure + ORDERLINENUMBER + ORDERLINENUMBER + + + PRODUCTCODE_6 + dimension + PRODUCTCODE + PRODUCTCODE + + + PRODUCTNAME + dimension + PRODUCTNAME + PRODUCTNAME + + + PRODUCTLINE + dimension + PRODUCTLINE + PRODUCTLINE + + + PRODUCTSCALE + dimension + PRODUCTSCALE + PRODUCTSCALE + + + PRODUCTVENDOR + dimension + PRODUCTVENDOR + PRODUCTVENDOR + + + PRODUCTDESCRIPTION + dimension + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + + + QUANTITYINSTOCK + measure + QUANTITYINSTOCK + QUANTITYINSTOCK + + + BUYPRICE + measure + BUYPRICE + BUYPRICE + + + MSRP + measure + MSRP + MSRP + + + + + + 1 + ORDERNUMBER + integer + + + 2 + PRODUCTCODE + string + + + 3 + QUANTITYORDERED + integer + + + 4 + PRICEEACH + float + + + 5 + ORDERLINENUMBER + integer + + + 6 + PRODUCTCODE_6 + string + + + 7 + PRODUCTNAME + string + + + 8 + PRODUCTLINE + string + + + 9 + PRODUCTSCALE + string + + + 10 + PRODUCTVENDOR + string + + + 11 + PRODUCTDESCRIPTION + string + + + 12 + QUANTITYINSTOCK + integer + + + 13 + BUYPRICE + float + + + 14 + MSRP + float + + + + Data Source + + + 1 + ORDERNUMBER + ORDERNUMBER + integer + 4 + + + 2 + PRODUCTCODE + PRODUCTCODE + string + 12 + + + 3 + QUANTITYORDERED + QUANTITYORDERED + integer + 4 + + + 4 + PRICEEACH + PRICEEACH + float + 8 + + + 5 + ORDERLINENUMBER + ORDERLINENUMBER + integer + 5 + + + 6 + PRODUCTCODE_6 + PRODUCTCODE + string + 12 + + + 7 + PRODUCTNAME + PRODUCTNAME + string + 12 + + + 8 + PRODUCTLINE + PRODUCTLINE + string + 12 + + + 9 + PRODUCTSCALE + PRODUCTSCALE + string + 12 + + + 10 + PRODUCTVENDOR + PRODUCTVENDOR + string + 12 + + + 11 + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + string + 12 + + + 12 + QUANTITYINSTOCK + QUANTITYINSTOCK + integer + 4 + + + 13 + BUYPRICE + BUYPRICE + float + 8 + + + 14 + MSRP + MSRP + float + 8 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + PRODUCTCODE + 2 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + QUANTITYORDERED + 3 + + 4 + 10 + 0 + Nullable + + QUANTITYORDERED + + + + QUANTITYORDERED + + 11 + + + + + + + PRICEEACH + 4 + + 8 + 15 + 0 + Nullable + + PRICEEACH + + + + PRICEEACH + + 22 + + + + + + + ORDERLINENUMBER + 5 + + 5 + 5 + 0 + Nullable + + ORDERLINENUMBER + + + + ORDERLINENUMBER + + 6 + + + + + + + PRODUCTCODE + 6 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + PRODUCTNAME + 7 + + 12 + 70 + 0 + Nullable + + PRODUCTNAME + + + + PRODUCTNAME + + 70 + + + + + + + PRODUCTLINE + 8 + + 12 + 50 + 0 + Nullable + + PRODUCTLINE + + + + PRODUCTLINE + + 50 + + + + + + + PRODUCTSCALE + 9 + + 12 + 10 + 0 + Nullable + + PRODUCTSCALE + + + + PRODUCTSCALE + + 10 + + + + + + + PRODUCTVENDOR + 10 + + 12 + 50 + 0 + Nullable + + PRODUCTVENDOR + + + + PRODUCTVENDOR + + 50 + + + + + + + PRODUCTDESCRIPTION + 11 + + 12 + 32700 + 0 + Nullable + + PRODUCTDESCRIPTION + + + + PRODUCTDESCRIPTION + + 32700 + + + + + + + QUANTITYINSTOCK + 12 + + 4 + 10 + 0 + Nullable + + QUANTITYINSTOCK + + + + QUANTITYINSTOCK + + 11 + + + + + + + BUYPRICE + 13 + + 8 + 15 + 0 + Nullable + + BUYPRICE + + + + BUYPRICE + + 22 + + + + + + + MSRP + 14 + + 8 + 15 + 0 + Nullable + + MSRP + + + + MSRP + + 22 + + + + + + + +]]> + + + + + + + + + + + + html + new Date()]]> + + + + + + + Employees + + + EMPLOYEENUMBER + EMPLOYEENUMBER + dataSetRow["EMPLOYEENUMBER"] + integer + + + LASTNAME + LASTNAME + dataSetRow["LASTNAME"] + string + + + FIRSTNAME + FIRSTNAME + dataSetRow["FIRSTNAME"] + string + + + EXTENSION + EXTENSION + dataSetRow["EXTENSION"] + string + + + EMAIL + EMAIL + dataSetRow["EMAIL"] + string + + + OFFICECODE + OFFICECODE + dataSetRow["OFFICECODE"] + string + + + REPORTSTO + REPORTSTO + dataSetRow["REPORTSTO"] + integer + + + JOBTITLE + JOBTITLE + dataSetRow["JOBTITLE"] + string + + + Column Binding + dataSetRow["LASTNAME"] + string + true + + + + + + + + + + + + + + Column Binding + + + + + + + + + Customers + + + SalesRep + + row["EMPLOYEENUMBER"] + + + + + + CUSTOMERNUMBER + CUSTOMERNUMBER + dataSetRow["CUSTOMERNUMBER"] + integer + + + CUSTOMERNAME + CUSTOMERNAME + dataSetRow["CUSTOMERNAME"] + string + + + CONTACTLASTNAME + CONTACTLASTNAME + dataSetRow["CONTACTLASTNAME"] + string + + + CONTACTFIRSTNAME + CONTACTFIRSTNAME + dataSetRow["CONTACTFIRSTNAME"] + string + + + PHONE + PHONE + dataSetRow["PHONE"] + string + + + ADDRESSLINE1 + ADDRESSLINE1 + dataSetRow["ADDRESSLINE1"] + string + + + ADDRESSLINE2 + ADDRESSLINE2 + dataSetRow["ADDRESSLINE2"] + string + + + CITY + CITY + dataSetRow["CITY"] + string + + + STATE + STATE + dataSetRow["STATE"] + string + + + POSTALCODE + POSTALCODE + dataSetRow["POSTALCODE"] + string + + + COUNTRY + COUNTRY + dataSetRow["COUNTRY"] + string + + + SALESREPEMPLOYEENUMBER + SALESREPEMPLOYEENUMBER + dataSetRow["SALESREPEMPLOYEENUMBER"] + integer + + + CREDITLIMIT + CREDITLIMIT + dataSetRow["CREDITLIMIT"] + float + + + Column Binding + dataSetRow["CUSTOMERNAME"] + string + true + + + + + + + + + + + + + + Column Binding + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculation.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculation.java new file mode 100644 index 00000000000..bbf920d2249 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculation.java @@ -0,0 +1,71 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue114IncorrectHeightCalculation extends ReportRunner { + + @Test + public void testIssue114IncorrectHeightCalculation() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue114IncorrectHeightCalculation.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 100, this.firstNullRow(sheet)); + + } finally { + inputStream.close(); + } + } + + @Test + public void testIssue114IncorrectHeightCalculationExample() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue114IncorrectHeightCalculationExample.rptdesign", "xls"); + assertNotNull(inputStream); + try { + HSSFWorkbook workbook = new HSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 110, this.firstNullRow(sheet)); + + } finally { + inputStream.close(); + } + } + +} + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculation.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculation.rptdesign new file mode 100644 index 00000000000..8f94770d806 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculation.rptdesign @@ -0,0 +1,556 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + in + /templates/blank_report.gif + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + EMPLOYEENAME + dimension + EMPLOYEENAME + EMPLOYEENAME + + + EMPLOYEENUMBER + measure + EMPLOYEENUMBER + EMPLOYEENUMBER + + + EMAIL + dimension + EMAIL + EMAIL + + + CUSTOMERNAME + dimension + CUSTOMERNAME + CUSTOMERNAME + + + ORDERNUMBER + measure + ORDERNUMBER + ORDERNUMBER + + + ORDERDATE + dimension + ORDERDATE + ORDERDATE + + + ORDERNUMBER_7 + measure + ORDERNUMBER + ORDERNUMBER + + + QUANTITYORDERED + measure + QUANTITYORDERED + QUANTITYORDERED + + + PRICEEACH + measure + PRICEEACH + PRICEEACH + + + PRODUCTNAME + dimension + PRODUCTNAME + PRODUCTNAME + + + PRODUCTDESCRIPTION + dimension + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + + + LINEPRICE + measure + LINEPRICE + LINEPRICE + + + + + + + 1 + EMPLOYEENAME + string + + + 2 + EMPLOYEENUMBER + integer + + + 3 + EMAIL + string + + + 4 + CUSTOMERNAME + string + + + 5 + ORDERNUMBER + integer + + + 6 + ORDERDATE + date + + + 7 + ORDERNUMBER_7 + integer + + + 8 + QUANTITYORDERED + integer + + + 9 + PRICEEACH + float + + + 10 + PRODUCTNAME + string + + + 11 + PRODUCTDESCRIPTION + string + + + 12 + LINEPRICE + float + + + + Data Source + + + 1 + EMPLOYEENAME + EMPLOYEENAME + string + 12 + + + 2 + EMPLOYEENUMBER + EMPLOYEENUMBER + integer + 4 + + + 3 + EMAIL + EMAIL + string + 12 + + + 4 + CUSTOMERNAME + CUSTOMERNAME + string + 12 + + + 5 + ORDERNUMBER + ORDERNUMBER + integer + 4 + + + 6 + ORDERDATE + ORDERDATE + date + 91 + + + 7 + ORDERNUMBER_7 + ORDERNUMBER + integer + 4 + + + 8 + QUANTITYORDERED + QUANTITYORDERED + integer + 4 + + + 9 + PRICEEACH + PRICEEACH + float + 8 + + + 10 + PRODUCTNAME + PRODUCTNAME + string + 12 + + + 11 + PRODUCTDESCRIPTION + PRODUCTDESCRIPTION + string + 12 + + + 12 + LINEPRICE + LINEPRICE + float + 8 + + + + + + 2.0 + + + + + + + 1 + 1 + + 12 + 102 + 0 + Nullable + + 1 + + + + 1 + + 102 + + + + + + + +]]> + + + + + + + NewTabularHierarchy + + + + + string + CUSTOMERNAME + + + + + + + NewTabularHierarchy1 + + + + + string + EMPLOYEENAME + + + + + + + NewTabularHierarchy2 + + + + + string + PRODUCTNAME + + + + + + + + + + + dataSetRow["LINEPRICE"] + float + + + + + Data Set + + + + + + + + + + + + html + new Date()]]> + + + + + + + + + + + Data Cube + + + LINEPRICE + + + Group/CUSTOMERNAME + Group2/PRODUCTNAME + + + LINEPRICE_Group/CUSTOMERNAME_Group2/PRODUCTNAME + + + + + + + + + + + + + + + + + + Group + + + Group/CUSTOMERNAME + + + + + CUSTOMERNAME + + + + + + + + + + + + + + + Group1 + + + Group1/EMPLOYEENAME + + + + + EMPLOYEENAME + + + + + + + + + Group2 + + + Group2/PRODUCTNAME + + + + + PRODUCTNAME + + + + + + + + + + + + + + true + + + CUSTOMERNAME + dimension["Group"]["CUSTOMERNAME"] + string + + + PRODUCTNAME + dimension["Group2"]["PRODUCTNAME"] + string + + + LINEPRICE_Group2/PRODUCTNAME + measure["LINEPRICE"] + float + + Group2/PRODUCTNAME + + SUM + + + LINEPRICE_Group/CUSTOMERNAME_Group2/PRODUCTNAME + measure["LINEPRICE"] + float + + Group/CUSTOMERNAME + Group2/PRODUCTNAME + + SUM + + + EMPLOYEENAME + dimension["Group1"]["EMPLOYEENAME"] + string + + + LINEPRICE_Group/CUSTOMERNAME_Group1/EMPLOYEENAME + measure["LINEPRICE"] + float + + Group/CUSTOMERNAME + Group1/EMPLOYEENAME + + SUM + + + + + + + + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculationExample.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculationExample.rptdesign new file mode 100644 index 00000000000..6b7e209111c --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue114IncorrectHeightCalculationExample.rptdesign @@ -0,0 +1,371 @@ + + + Eclipse BIRT Designer Version 4.2.1.v201209101448 Build <4.2.1.v20120912-1721> + in + /templates/blank_report.gif + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + + + CUSTOMERNAME + CUSTOMERNAME + CUSTOMERNAME + + + CONTACTLASTNAME + CONTACTLASTNAME + CONTACTLASTNAME + + + CUSTOMERNUMBER + CUSTOMERNUMBER + CUSTOMERNUMBER + + + + + + 1 + CUSTOMERNAME + string + + + 2 + CONTACTLASTNAME + string + + + 3 + CUSTOMERNUMBER + integer + + + + Data Source + + + 1 + CUSTOMERNAME + CUSTOMERNAME + string + 12 + + + 2 + CONTACTLASTNAME + CONTACTLASTNAME + string + 12 + + + 3 + CUSTOMERNUMBER + CUSTOMERNUMBER + integer + 4 + + + + + + 2.0 + + + + + + + CUSTOMERNAME + 1 + + 12 + 50 + 0 + Nullable + + CUSTOMERNAME + + + + CUSTOMERNAME + + 50 + + + + + + + CONTACTLASTNAME + 2 + + 12 + 50 + 0 + Nullable + + CONTACTLASTNAME + + + + CONTACTLASTNAME + + 50 + + + + + + + CUSTOMERNUMBER + 3 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + +]]> + + + + + + + NewTabularHierarchy + + + + + string + CONTACTLASTNAME + + + + + + + NewTabularHierarchy1 + + + + + string + CUSTOMERNAME + + + + + + + + + + + dataSetRow["CUSTOMERNUMBER"] + integer + + + + + Data Set + + + + + + + + + + + + html + new Date()]]> + + + + + + + Data Cube + + + CUSTOMERNUMBER + + + Group/CONTACTLASTNAME + Group1/CUSTOMERNAME + + + CUSTOMERNUMBER_Group/CONTACTLASTNAME_Group1/CUSTOMERNAME + + + + + + + + + + + + + + + + + + Group + + + Group/CONTACTLASTNAME + + + + + CONTACTLASTNAME + + + + + + + + + + + + + + + Group1 + + + Group1/CUSTOMERNAME + + + + + CUSTOMERNAME + + + + + + + + + + + + + + + + CONTACTLASTNAME + dimension["Group"]["CONTACTLASTNAME"] + string + + + CUSTOMERNAME + dimension["Group1"]["CUSTOMERNAME"] + string + + + CUSTOMERNUMBER_Group1/CUSTOMERNAME + measure["CUSTOMERNUMBER"] + integer + + Group1/CUSTOMERNAME + + SUM + + + CUSTOMERNUMBER_Group/CONTACTLASTNAME + measure["CUSTOMERNUMBER"] + integer + + Group/CONTACTLASTNAME + + SUM + + + CUSTOMERNUMBER_Group/CONTACTLASTNAME_Group1/CUSTOMERNAME + measure["CUSTOMERNUMBER"] + integer + + Group/CONTACTLASTNAME + Group1/CUSTOMERNAME + + SUM + + + + + diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue43StructuredHeader.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue43StructuredHeader.java index ef75d09c4ee..3f39e06feef 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue43StructuredHeader.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue43StructuredHeader.java @@ -18,6 +18,9 @@ import java.io.InputStream; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFPrintSetup; +import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.junit.Test; @@ -38,6 +41,18 @@ public void testWithoutOption() throws Exception { assertEquals( 4, this.firstNullRow(workbook.getSheetAt(0))); assertEquals( 4, this.firstNullRow(workbook.getSheetAt(1))); assertEquals( 4, this.firstNullRow(workbook.getSheetAt(2))); + + XSSFSheet sheet0 = workbook.getSheetAt(0); + XSSFPrintSetup printSetup = sheet0.getPrintSetup(); + assertEquals( XSSFPrintSetup.A4_PAPERSIZE, printSetup.getPaperSize() ); + assertEquals( false, printSetup.getLandscape() ); + + assertEquals( 0.7 / 2.54, printSetup.getHeaderMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, printSetup.getFooterMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.LeftMargin ), 0.01 ); + assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.RightMargin ), 0.01 ); + assertEquals( 2.7 / 2.54, sheet0.getMargin( Sheet.TopMargin ), 0.01 ); + assertEquals( 1.7 / 2.54, sheet0.getMargin( Sheet.BottomMargin ), 0.01 ); } finally { inputStream.close(); @@ -62,6 +77,17 @@ public void testWithOption() throws Exception { assertEquals( 8, this.firstNullRow(workbook.getSheetAt(1))); assertEquals( 8, this.firstNullRow(workbook.getSheetAt(2))); + XSSFSheet sheet0 = workbook.getSheetAt(0); + XSSFPrintSetup printSetup = sheet0.getPrintSetup(); + assertEquals( XSSFPrintSetup.A4_PAPERSIZE, printSetup.getPaperSize() ); + assertEquals( false, printSetup.getLandscape() ); + + assertEquals( 0.7 / 2.54, printSetup.getHeaderMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, printSetup.getFooterMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.LeftMargin ), 0.01 ); + assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.RightMargin ), 0.01 ); + assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.TopMargin ), 0.01 ); + assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.BottomMargin ), 0.01 ); } finally { inputStream.close(); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.java index 0562bcfb3bd..9c275fa5bb2 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.java @@ -41,11 +41,11 @@ public void testIssue61() throws BirtException, IOException { Sheet firstSheet = workbook.getSheetAt(0); assertEquals( 7, this.firstNullRow(firstSheet)); - assertEquals( "10100", firstSheet.getSheetName() ); + assertEquals( "Sheet +10100", firstSheet.getSheetName() ); for( Sheet sheet : workbook ) { if( ! "Sheet326".equals( sheet.getSheetName() ) ) { - assertEquals( Integer.toString( (int)sheet.getRow(1).getCell(0).getNumericCellValue() ), sheet.getSheetName() ); + assertEquals( "Sheet +" + Integer.toString( (int)sheet.getRow(1).getCell(0).getNumericCellValue() ), sheet.getSheetName() ); } } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.rptdesign index ad806406235..872d6dc4a3e 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue61SheetNameWithGroups.rptdesign @@ -1,6 +1,6 @@ - Eclipse BIRT Designer Version 3.7.2.v20120213 Build <3.7.2.v20120214-1408> + Eclipse BIRT Designer Version 4.3.0.v201306041519 Build <4.3.0.v20130611-1045> in /templates/blank_report.gif ltr @@ -447,7 +447,7 @@ from orderdetails]]> row["ORDERNUMBER"] row["ORDERNUMBER"] - row["ORDERNUMBER"] + 'Sheet[/\\*\'?[\]:]+' + row["ORDERNUMBER"] false always diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue65DynamicImageSize.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue65DynamicImageSize.java new file mode 100644 index 00000000000..55388768c0e --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue65DynamicImageSize.java @@ -0,0 +1,49 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue65DynamicImageSize extends ReportRunner { + + @Test + public void test() throws BirtException, IOException { + + debug = true; + InputStream inputStream = runAndRenderReport("Issue65DynamicImageSize.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals( 110, this.firstNullRow(sheet)); + assertEquals( 109, this.lastRow(sheet)); + + } finally { + inputStream.close(); + } + } +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue65DynamicImageSize.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue65DynamicImageSize.rptdesign new file mode 100644 index 00000000000..ffdcf542e97 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue65DynamicImageSize.rptdesign @@ -0,0 +1,733 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + + + queryText + 8 + + + queryTimeOut + 8 + + + rowFetchSize + 8 + + + in + /templates/blank_report.gif + auto layout + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + nulls lowest + + + ORDERNUMBER + measure + ORDERNUMBER + ORDERNUMBER + + + CUSTOMERNAME + dimension + CUSTOMERNAME + CUSTOMERNAME + + + ORDERDATE + dimension + ORDERDATE + ORDERDATE + + + STATUS + dimension + STATUS + STATUS + + + PRODUCTNAME + dimension + PRODUCTNAME + PRODUCTNAME + + + PRODUCTLINE + dimension + PRODUCTLINE + PRODUCTLINE + + + QUANTITYORDERED + measure + QUANTITYORDERED + QUANTITYORDERED + + + + + + + 1 + ORDERNUMBER + integer + + + 2 + CUSTOMERNAME + string + + + 3 + ORDERDATE + date + + + 4 + STATUS + string + + + 5 + PRODUCTNAME + string + + + 6 + PRODUCTLINE + string + + + 7 + QUANTITYORDERED + integer + + + + 100 + Data Source + + + 1 + ORDERNUMBER + ORDERNUMBER + integer + 4 + + + 2 + CUSTOMERNAME + CUSTOMERNAME + string + 12 + + + 3 + ORDERDATE + ORDERDATE + date + 91 + + + 4 + STATUS + STATUS + string + 12 + + + 5 + PRODUCTNAME + PRODUCTNAME + string + 12 + + + 6 + PRODUCTLINE + PRODUCTLINE + string + 12 + + + 7 + QUANTITYORDERED + QUANTITYORDERED + integer + 4 + + + + + + 2.0 + + + + + + + ORDERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + ORDERNUMBER + + + + ORDERNUMBER + + 11 + + + + + + + PRODUCTCODE + 2 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + QUANTITYORDERED + 3 + + 4 + 10 + 0 + Nullable + + QUANTITYORDERED + + + + QUANTITYORDERED + + 11 + + + + + + + PRICEEACH + 4 + + 8 + 15 + 0 + Nullable + + PRICEEACH + + + + PRICEEACH + + 22 + + + + + + + ORDERLINENUMBER + 5 + + 5 + 5 + 0 + Nullable + + ORDERLINENUMBER + + + + ORDERLINENUMBER + + 6 + + + + + + + PRODUCTCODE + 6 + + 12 + 15 + 0 + Nullable + + PRODUCTCODE + + + + PRODUCTCODE + + 15 + + + + + + + PRODUCTNAME + 7 + + 12 + 70 + 0 + Nullable + + PRODUCTNAME + + + + PRODUCTNAME + + 70 + + + + + + + PRODUCTLINE + 8 + + 12 + 50 + 0 + Nullable + + PRODUCTLINE + + + + PRODUCTLINE + + 50 + + + + + + + PRODUCTSCALE + 9 + + 12 + 10 + 0 + Nullable + + PRODUCTSCALE + + + + PRODUCTSCALE + + 10 + + + + + + + PRODUCTVENDOR + 10 + + 12 + 50 + 0 + Nullable + + PRODUCTVENDOR + + + + PRODUCTVENDOR + + 50 + + + + + + + PRODUCTDESCRIPTION + 11 + + 12 + 32700 + 0 + Nullable + + PRODUCTDESCRIPTION + + + + PRODUCTDESCRIPTION + + 32700 + + + + + + + QUANTITYINSTOCK + 12 + + 4 + 10 + 0 + Nullable + + QUANTITYINSTOCK + + + + QUANTITYINSTOCK + + 11 + + + + + + + BUYPRICE + 13 + + 8 + 15 + 0 + Nullable + + BUYPRICE + + + + BUYPRICE + + 22 + + + + + + + MSRP + 14 + + 8 + 15 + 0 + Nullable + + MSRP + + + + MSRP + + 22 + + + + + + + +]]> + + + + + + + + + + + + html + new Date()]]> + + + + + + + + + ExcelEmitter.GroupSummaryHeader + boolean + + + ExcelEmitter.AllowImageAspectRatioChange + boolean + + + true + false + Data Set + + + ORDERNUMBER + ORDERNUMBER + dataSetRow["ORDERNUMBER"] + integer + + + CUSTOMERNAME + CUSTOMERNAME + dataSetRow["CUSTOMERNAME"] + string + + + ORDERDATE + ORDERDATE + dataSetRow["ORDERDATE"] + date + + + STATUS + STATUS + dataSetRow["STATUS"] + string + + + PRODUCTNAME + PRODUCTNAME + dataSetRow["PRODUCTNAME"] + string + + + PRODUCTLINE + PRODUCTLINE + dataSetRow["PRODUCTLINE"] + string + + + QUANTITYORDERED + QUANTITYORDERED + dataSetRow["QUANTITYORDERED"] + integer + + + 0 + + + + + + + + 10cm + + + OrderGroup + row["ORDERNUMBER"] + + row["ORDERNUMBER"] + + false +
+ + + + ORDERNUMBER + + + + + + Custom + yyyy-MM-dd + + ORDERDATE + + + + + CUSTOMERNAME + + + + + STATUS + + + + + + +
+
+ + + + + + + + + +
+
+ + + + + 2 + 1 + + PRODUCTLINE + + + + 2 + 1 + + PRODUCTNAME + + + + + QUANTITYORDERED + + + + + 0.4cm + 0.1cm + 0) { + unit = found[ 0 ]; +} +var w = orgWidth.replaceAll(unit, ""); +var width = s * w; +width = width < 1 ? 1 : width; +this.width = width + unit;]]> + embed + image.png + + + + +
+ + + + + + + + + +
+
+ + + + image.png + image/png + + iVBORw0KGgoAAAANSUhEUgAAAAgAAAAMCAYAAABfnvydAAAAH0lEQVR4nGP8z8DwnwEPYMInOaqARAUn + GBgYPuJSAABSZwPPGDmftwAAAABJRU5ErkJggg== + + + +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue66SingleSheetWithPageBreaks.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue66SingleSheetWithPageBreaks.java index 81fb64df1b1..f52169a112f 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue66SingleSheetWithPageBreaks.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue66SingleSheetWithPageBreaks.java @@ -155,7 +155,7 @@ public void testNoNames() throws BirtException, IOException { assertEquals( 2, workbook.getSheetAt(0).getRowBreaks().length ); assertEquals( 3, workbook.getSheetAt(0).getRowBreaks()[0] ); assertEquals( 7, workbook.getSheetAt(0).getRowBreaks()[1] ); - assertEquals( "Number Formats Test Report", workbook.getSheetAt(0).getSheetName()); + assertEquals( "Sheet0", workbook.getSheetAt(0).getSheetName()); assertEquals(11, firstNullRow(workbook.getSheetAt(0))); } finally { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.java index 6e92cbbce60..16e5668630c 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.java @@ -74,7 +74,7 @@ public void testVariousOptions() throws BirtException, IOException { assertEquals( 3, workbook.getNumberOfSheets() ); assertTrue( workbook.getSheetAt(0) instanceof XSSFChartSheet ); assertEquals( 280, firstNullRow( workbook.getSheetAt(1) ) ); - assertEquals( 5, firstNullRow( workbook.getSheetAt(2) ) ); + // Can't check any more here because the pivot table isn't updated until Excel loads it :( } finally { inputStream.close(); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.rptdesign index 908c9272964..d03b23348c2 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue76ExistingWorkbook.rptdesign @@ -1,6 +1,6 @@ - Eclipse BIRT Designer Version 4.2.1.v201209101448 Build <4.2.1.v20120912-1721> + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> Big Crosstab Report 1 +this.getDataSource( "Mission Data Source" ).setPrivateDriverProperty( "HOME", path ); +]]>
+ . diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue85Formulae.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue85Formulae.java new file mode 100644 index 00000000000..533017e5669 --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue85Formulae.java @@ -0,0 +1,94 @@ +/************************************************************************************* + * Copyright (c) 2011, 2012, 2013 James Talbut. + * jim-emitters@spudsoft.co.uk + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * James Talbut - Initial implementation. + ************************************************************************************/ + +package uk.co.spudsoft.birt.emitters.excel.tests; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Locale; + +import org.apache.poi.ss.usermodel.DataFormatter; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.eclipse.birt.core.exception.BirtException; +import org.junit.Test; + +public class Issue85Formulae extends ReportRunner { + + @Test + public void testRunReport() throws BirtException, IOException { + + debug = false; + InputStream inputStream = runAndRenderReport("Issue85Formulae.rptdesign", "xlsx"); + assertNotNull(inputStream); + try { + + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + assertNotNull(workbook); + + assertEquals( 1, workbook.getNumberOfSheets() ); + assertEquals( "Number Formats Test Report", workbook.getSheetAt(0).getSheetName()); + + Sheet sheet = workbook.getSheetAt(0); + assertEquals(4, this.firstNullRow(sheet)); + + assertEquals( 3035, sheet.getColumnWidth( 0 ) ); + assertEquals( 2157, sheet.getColumnWidth( 1 ) ); + assertEquals( 7021, sheet.getColumnWidth( 2 ) ); + assertEquals( 4205, sheet.getColumnWidth( 3 ) ); + assertEquals( 3474, sheet.getColumnWidth( 4 ) ); + assertEquals( 2852, sheet.getColumnWidth( 5 ) ); + assertEquals( 3510, sheet.getColumnWidth( 6 ) ); + assertEquals( 2889, sheet.getColumnWidth( 7 ) ); + assertEquals( 2048, sheet.getColumnWidth( 8 ) ); + + DataFormatter formatter = new DataFormatter(); + Locale locale = Locale.getDefault(); + + assertEquals( "1", formatter.formatCellValue(sheet.getRow(1).getCell(1))); + assertEquals( "2019-10-11 13:18:46", formatter.formatCellValue(sheet.getRow(1).getCell(2))); + assertEquals( "3.1415926536", formatter.formatCellValue(sheet.getRow(1).getCell(3))); + assertEquals( "3.1415926536", formatter.formatCellValue(sheet.getRow(1).getCell(4))); + assertEquals( "false", formatter.formatCellValue(sheet.getRow(1).getCell(5))); + if( locale.getDisplayName().equals( "en-US" ) ) { + assertEquals( "Oct 11, 2019", formatter.formatCellValue(sheet.getRow(1).getCell(6))); + assertEquals( "1:18:46 PM", formatter.formatCellValue(sheet.getRow(1).getCell(7))); + } else if( locale.getDisplayName().equals( "en-GB" ) ) { + assertEquals( "11-Oct-2019", formatter.formatCellValue(sheet.getRow(1).getCell(6))); + assertEquals( "13:18:46", formatter.formatCellValue(sheet.getRow(1).getCell(7))); + } + + assertEquals( "2", formatter.formatCellValue(sheet.getRow(2).getCell(1))); + assertEquals( "2019-10-11 13:18:46", formatter.formatCellValue(sheet.getRow(2).getCell(2))); + assertEquals( "6.2831853072", formatter.formatCellValue(sheet.getRow(2).getCell(3))); + assertEquals( "6.2831853072", formatter.formatCellValue(sheet.getRow(2).getCell(4))); + assertEquals( "true", formatter.formatCellValue(sheet.getRow(2).getCell(5))); + if( locale.getDisplayName().equals( "en-US" ) ) { + assertEquals( "Oct 11, 2019", formatter.formatCellValue(sheet.getRow(1).getCell(6))); + assertEquals( "1:18:46 PM", formatter.formatCellValue(sheet.getRow(1).getCell(7))); + } else if( locale.getDisplayName().equals( "en-GB" ) ) { + assertEquals( "11-Oct-2019", formatter.formatCellValue(sheet.getRow(1).getCell(6))); + assertEquals( "13:18:46", formatter.formatCellValue(sheet.getRow(1).getCell(7))); + } + + assertEquals( "B2+B3", formatter.formatCellValue(sheet.getRow(3).getCell(1))); + assertEquals( "D2+D3", formatter.formatCellValue(sheet.getRow(3).getCell(3))); + } finally { + inputStream.close(); + } + } + +} diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue85Formulae.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue85Formulae.rptdesign new file mode 100644 index 00000000000..44d2575231a --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue85Formulae.rptdesign @@ -0,0 +1,449 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + Number Formats Test Report + in + + /templates/blank_report.gif + ltr + 96 + + + + + + + + 0 + Name + string + + + 1 + Integer + integer + + + 2 + DateTime + date-time + + + 3 + Decimal + decimal + + + 4 + Float + float + + + 5 + Boolean + boolean + + + 6 + Date + date + + + 7 + Time + time + + + + + Name + + + Integer + + + DateTime + + + Decimal + + + Float + + + Boolean + + + Date + + + Time + + + + + + 1 + Name + string + + + 2 + Integer + integer + + + 3 + DateTime + date-time + + + 4 + Decimal + decimal + + + 5 + Float + float + + + 6 + Boolean + boolean + + + 7 + Date + date + + + 8 + Time + time + + + + Data Source + " : rowCount ) ); +if( rowCount < 2 ) { + ++rowCount; + + var pi = 3.1415926535897932384626433832795; + + row[ "Name" ] = "Row " + rowCount; + row[ "Integer" ] = rowCount; + row[ "Float" ] = rowCount * pi; + row[ "Decimal" ] = rowCount * pi; + row[ "Boolean" ] = (rowCount % 2 == 0); + row[ "DateTime" ] = new Date(pi * 500000000000); + row[ "Date" ] = new Date(pi * 500000000000); + row[ "Time" ] = new Date(pi * 500000000000); + + // java.lang.System.out.println( "Date: " + row[ "Date" ] + " / " + row["Date"].getTime()); + + return true; +} else { + // java.lang.System.out.println( "rowCount: " + rowCount ); + return false; +} +]]> + + + + + + + + + + + + + a4 + 0.5cm + 0.5cm + 0.5cm + 0.5cm + + + html + new Date()]]> + + + + + + + 7.614583333333333in + Data Set + + + Name + Name + dataSetRow["Name"] + string + + + Integer + Integer + dataSetRow["Integer"] + integer + + + DateTime + DateTime + dataSetRow["DateTime"] + date-time + + + Decimal + Decimal + dataSetRow["Decimal"] + decimal + + + Float + Float + dataSetRow["Float"] + float + + + Boolean + Boolean + dataSetRow["Boolean"] + boolean + + + Date + Date + dataSetRow["Date"] + date + + + Time + Time + dataSetRow["Time"] + time + + + + 0.8645833333333334in + + + 0.6145833333333334in + + + 2in + + + 1.1979166666666667in + + + 0.9895833333333334in + + + 0.8125in + + + 1in + + + 0.8229166666666666in + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + Name + + + + + Integer + + + + + + Custom + yyyy-MM-dd hh:mm:ss + + DateTime + + + + + Decimal + + + + + + Unformatted + + Float + + + + + Boolean + + + + + + Medium Date + Medium Date + + Date + + + + + + Medium Time + Medium Time + + Time + + + + +
+ + #0000FF + solid + + + + + + + + + + + + + + + +
+
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue87PrintSettings.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue87PrintSettings.java index c272648a8a3..3ff2c03e2d0 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue87PrintSettings.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue87PrintSettings.java @@ -15,6 +15,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.FileOutputStream; @@ -22,6 +23,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.eclipse.birt.report.engine.api.RenderOption; import org.junit.Test; @@ -35,7 +37,6 @@ public class Issue87PrintSettings extends ReportRunner { @Override protected RenderOption prepareRenderOptions(String outputFormat, FileOutputStream outputStream) { - // TODO Auto-generated method stub RenderOption options = super.prepareRenderOptions(outputFormat, outputStream); if( scale ) { options.setOption( ExcelEmitter.PRINT_SCALE, 27 ); @@ -76,6 +77,13 @@ public void testPrintPagesXlsx() throws Exception { Sheet sheet = workbook.getSheetAt(0); assertEquals( 236, firstNullRow(sheet)); + CellRangeAddress repCols = sheet.getRepeatingColumns(); + CellRangeAddress repRows = sheet.getRepeatingRows(); + assertNull( repCols ); +// assertNotNull( repRows ); +// assertEquals( 1, repCols.getFirstRow() ); +// assertEquals( 2, repCols.getLastRow() ); + assertEquals(28, greatestNumColumns(sheet)); } finally { @@ -112,6 +120,13 @@ public void testPrintPagesXls() throws Exception { Sheet sheet = workbook.getSheetAt(0); assertEquals( 236, firstNullRow(sheet)); + + CellRangeAddress repCols = sheet.getRepeatingColumns(); + CellRangeAddress repRows = sheet.getRepeatingRows(); + assertNull( repCols ); + assertNotNull( repRows ); + assertEquals( 1, repRows.getFirstRow() ); + assertEquals( 2, repRows.getLastRow() ); assertEquals(28, greatestNumColumns(sheet)); @@ -150,6 +165,13 @@ public void testPrintScaleXlsx() throws Exception { Sheet sheet = workbook.getSheetAt(0); assertEquals( 236, firstNullRow(sheet)); + CellRangeAddress repCols = sheet.getRepeatingColumns(); + CellRangeAddress repRows = sheet.getRepeatingRows(); + assertNull( repCols ); +// assertNotNull( repRows ); +// assertEquals( 1, repRows.getFirstRow() ); +// assertEquals( 2, repRows.getLastRow() ); + assertEquals(28, greatestNumColumns(sheet)); } finally { @@ -186,6 +208,13 @@ public void testPrintScaleXls() throws Exception { Sheet sheet = workbook.getSheetAt(0); assertEquals( 236, firstNullRow(sheet)); + CellRangeAddress repCols = sheet.getRepeatingColumns(); + CellRangeAddress repRows = sheet.getRepeatingRows(); + assertNotNull( repRows ); + assertNull( repCols ); + assertEquals( 1, repRows.getFirstRow() ); + assertEquals( 2, repRows.getLastRow() ); + assertEquals(28, greatestNumColumns(sheet)); } finally { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MannedSpaceMissions.xlsx b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MannedSpaceMissions.xlsx index 716bd144ddef86640e6476fc30d17e7716b77749..d5528c98029538279ea44e754e542380f76686cc 100644 GIT binary patch delta 9903 zcmZ`1NX*xk0*95Ree0q#J4JkcOpzAR)B@L0U?>K>4{ z?>pyr@7@3G70)xzGc)g+_0Fuh`HIk!g;4SZ6_D_Mjy#9}0_8mbfv`a!kh=}Lo4u3u zD|>ruHg{W_n3n^JQyc_7sTII}!4nKr2RuYFb^Kw%&PbdzmCo|u9KlBWP*7re99HzW>02O##kr!xn3~E=mASe8{Wc$LF><;!l4^CL=|U7` zU%YR6&^&yN9>gZEvhS>4!K-OU&8epf-kEyN16eCqm93{_kf^Y-v&8hVrbavX@Nvuqx9lnwA6YzMwIYF^W=7@~~@8 zZ=go2t;<%@)7kTVx^gq_5Oy@Ra(MgdiL_ z+Z@XsD(n%M0A`AQhia!_X@C#!_7a#4#v>q7NvW9wqjgW#JLs3&XRH<~^)1(@FjsMj zR}OtT)xo1Ju_na(8wWKn9F|YF1sW_GE)Kb|Rv!q0pYwKy;9+D3PDWmm8t~`mgE_SI zUeAc5TAw#zbhWOu)*Xb?dr5JI$bNsw&ZRNB+GgVNJq;ID@6s|595+2B!d2sXNdN}C z^yA$4Y9i-lzn+U>Y}WM8)AH`&!pI+m`QwXHUvZdgbu$K8R56}F98&KrY3;839`N}U z&SID=)lK2;VEJ3yTA|EIIZEbJ2O%I&1bfhYENW+L_mQ2z7~fFPp7vkpzbc22=IpY@ zvj!`RXd2*)|EOTG`{^R(#5SC1Ry~F_kE!{zdj5@9#qCGWg9pDGDFgEcORb1_{|pNR z(#`^bh(WLjWkP`K{-MZB)>opPAbd7QyCO#2fPH$y)sHC6?XS}znF)Q))o1sTN5e$H z=B)ktYT8-PLh>xkoVfVYX<%MW<(8*0OL2Yc%9-IPHe+hwj$Nfk-RI1qiDgrFJv%$i zh`nNlyNk1_y zxs!L}&YC?-g=a)CBYe7M%xev{uRcwk4b2R>YE550-3qcw=~*2*d37Qn7`AVI^_i2; z%`Jb$pKdj22-u&CitE+{jA-Arc%UtXOyOWa1yG4IR z#nCQ)008d3O|Z?19&g=7Z@wZixgu&H_5Gn^$6wnsb6bJUFG_H8!fU9&p6!#l)itHw zfS7m++i`H?y?FHFyA^EXB&)9v&}?3t3H5$8bYoY3VMKQ8>&2UJg6rDcTvCB9rhOcw z)U4FpEJ^kC*kT(9;ta(U82P~N9CkaJng-Y@0d_&Pt?fZK4ScD0dLWZ46hH4HeCUGnbg&zxXHRbpzQkFl>Mk! zgl<7>c=uA&4QF^#!|pHNbl=`v0ZNb4ng?6%MnKrh>@kW7_Ex0{s=H~XwWW7A2TCc2 zfQ?9*Sh!5p(9!7T_4W1{W7XZV=h*GnqGF-_S0W{1n?K8WYN3Eb)3Bik7S1sTrJ$J4 zNK{h}IQdBZJafLi$=%X(r98op8hxqMDfl_d5cj9{;f|-d@0U^w$bad8lr*q>S>Fo1 zb25jniBBMY#fMIXiX|kA3)03or`fz4MvdW?5CnHZ#FO!$x&pTyuqa$kApD$O<$)P` zrec~NZYQsDmG~x7CtE7x6Z}6Ct|SSqhAZXbL-_;#pG$9rj>IRL z1bT6yeSgXnk@@El@PA!|UrX!NPO~v4UqgxML;UT|J5c$_AJIb+iHRrFhe~f*;11v? z7c75VTcE6z-&fn25~@qwE{M1S7rwWaN*nW+w0F4j6YSr{4+SMIMDA$-Qs)}VZ{$~J z+`o9Ce|Uz}G3+dUj~k*BNz=XXaH6|oj?Y&g$YJ`%ZM%*wgz z(v%->-x_o_&<+olqhvDdYa>e#Sz_%|zs$wtK^F*b+2_L+z-lpo+2d2=HnThxj?V;( zz9T|7@-v}7&4#7nlLL&3WgJg+NJ~HITW<) z#|bF(lQVD!n$QPUFB|)va>!A6BD%{{Gg#ul5}KP?ID_Kpa7A(JdMLwViD&VGQ9rks zK6Jb%Dk$_bFqD6|CkDLoljf9Tx+gL-SQ5e}TAEn^&f<7F$UPH!&x{U5oou~rFjNm- zU~P;~GgdH%v}?a|m*--zB!Tf{FutvpGV#miOfVMd#&iBCS2lp(IK{H01xGK$r#UK^ zleRy{u$OB`Dm3Am63~DXMHnn8VZ-;tWfQ+s&V)B`;!%Vg;vk&Z4JQH%tf&cT?-k6c z?wP^AkY1Q_JrKNSN;6o}!dx=p%m7nAX|9Ced&y`y)qAGR^1UQyLRx}?Io&<6qXTKj zlDRMznMA= zmaJFI-KEhvO9#DWaVa4A3B9boXhv10CuhB@>?&D5g}JR0%vj;E@y^YBl&ed}Qz8~| zue-o3uJTxlxkJa?oVC0li&0I^{cl`TqIMUH^#-as-mDFw2^w7a@B1kAPNmA*#r|E(Or zue%Zd+l}Xmc|OG-<>FbJ)_a}bcB(e-g(PAF_{-z8M+foq=;|gm+yC~1Z2HF!U|)rH zUzgv8bW#6Q@Snz?{ROnIV*XQSxH8E-Eb4h#TtZ=ZH@vNs=@)u_x5MuWKK~Dn>F?qS z{ z@%Cwrl3(`?gSdxSXvV3zK{JA%OW;m)^vN=Au}98$v!?3{0)ZJ3)4+;}P+^Bexx~i}C@$v#xJ8vLI`9s!`$k)#2*(AO z!$^r4f#c1d-3Pj+_uE@R4mcwy?6`Hy*9-ad{jZ z3HR=)=TyYqrl8$w5;QgUD!Ao4c2{S{suKA!cfR*fLywXah8v? zS>BU(vIo<%(0Vf0tLprlkxYAi-{~FxtyInGE3Ye0PoMA8B1r|B5t=Y_zX45cj}XT} ztA>1oJM;`dWUvCevbKJD2D|yzywp(7(2hSp z{adM|86&D%gI&n#>GcaKfLz(oUFFHva2Fh&0@E??zX$? zh~I*ZbhPW{yiB9l(EfU3rA@VA*8OOtE&HQk<&N93r;qN`#p}Vl5s{TlV{BXOTD8;` z`>r-V+Mla84E4s`w{=IFHk85Fe*4Cr(fv$c!%HI&cJ&qpCNg3jK4Iw z!RqiDiQIg%q|3ff&1OiUmEYGoJDYtS(5a)kEgi2n6x~&%3={_cm}9lC^#rIq8a%kJ zdkE^Mwy%`Tz2Atj*abbIFCV(Co3`blQFcJ5Jhhkc(VBkTXTu$O@?PzVA^ z0x&lQw^8CQK0@(&@x|r69OPeVz52vn#;D;g>rZ?l`_J2D;$H6+K=D(QTwZC_v>nD5 zM|*P*82a`#fNL}~RO&-iQ_6#HJD%UPA5V!biLx7Xv6{p_#PARts8+8eOE4#~*M`JC zoGT@deuzkB(B!)S-z)g+~+F5%)=Z)|9zGtEW||M+%vhwrfsP@Y(-sCwS*^+ z`qn9N`*}xPYkR+$%E4vT73Gl)n4pX9MPA=$wXrhyit**T4{=P(H&2tGanmQQM3*eV z=mv*x%s|N#NSC~8{TMHdK8I_fno^sNp;e`BO-&}Rk+d8suIyEaUM*aQ?NNPYc zD*e0;;fP@|E0xs?P4lo=V|l@NnE)odDqam>!}$zu^EE8%+d>p2m<%b*sIKr_ym}mG zQ$_f#@qNIv*^H63uvktMENng-&5|||WVG|KGARKtQs|RS*VKZ%!gyPxqAmA#*gWzY z8b?wNn>yDT8X{Li;jh1wLTb(40aa$D8xD}kGV#YIrI?Falv2Jnbc$UFg<&mJl&B)b z8pt{%9jGkI{h#3np}ZoH2D5h>ZHpwX^LTC_*hvrGL$PGoOSQp~A#8%NK+vjq-yr3Se{z982+Q?PK zQ?xFdVr0ov#Z$5_+dST`@ylj(&(k{onK};zk#}(;1jBTN4UbHS1a;yO?7di+kb`2mk0yInsNin*V^K`@+sKPIT zYP1hu8m!Blazkkv?1!?}Rj|>>@`gGQz;7bR59V8!>7-Rlvb)b~R0w&I^B42SfsgR75)ZZGMX zTN7Q`ZCEd&EhJFESSSK7U8SAZI<0WV0lGEha-y1LG@b-LWM>DS#Gi42<-@B}3yPGYe{|6go!{3} z8w^%GjGgDwM@9Ya-}U4pZ7zOb7Pm;^fQNv7I8#SJ=`I#pOApLf1{->KtIT0(Q)iT( zRgJP(L(dUFA6z6-m+9Yu1v}~;~@U7oQS9J4L0Wn+ksOQ<118{S`JuOBCdVWK;J* zgE|UiKhHGXDEZ`|e=|s5v`I#E_-lIOmY7(^-P-)VbdWBYjC2Fl3DJJ!MK*9sNNS8$ zi1~TWt!pDurDXuZT`1O}J5+}NMM4nbdzei@yjy_i@WEgaI&es}&|rK%`mm=jP%I2J zst&Yu^CfPx(#7Onp3aHQ=rNR5j`D_2Q0|c~@S8z#j*%o~(b2?kI74Q%iah$De=jMT`=Y zv8&Nuhdpf(M;aSEZ1<3Bs$vF zmXR|A@g(#+dGCG_H__(dl48gxBy2_JMYLTltU`RHX8tv=Ts@0jue4m3P&OJvg`Zp* zIMF-l_Ik+dN$*(qxAy3j{wC_q@FTf0*CK#CC%0#eI>B}ek6U@mra3uxOADKaeIzriE4!GO&JYfPw^4oajxw}#YYO+(;-Oj!66No&v1s z#G$Y)`PKdi3I%bVdKX5?Y$4p{eM1nIJKUY8Mq)FRedJ+RF(N$gVi>=gN!6GqZl!s-R>nCK*k`|c8F>9QrKI>vkbQ6%=xP;ClwMdj8K7NQ~Y>s zWmN0axi*Zakis-}2>r0;Ap%y&WGUdShqhz>aJ>A3-{bg~6N9&C+?ubL9=0nlXQRl? zaFwT8r<0*Ri#GZNBdTq)og^?K6}FREE8xa1$sBRI{FzdeV6rzmSHEXKgWd2Eyo%xV zK0L-QJa${XTlLMEA1>rAeL-Jtb38&Z4(3VcJgOii;!?erguEt8{He(MULA9XEE-8DkaJ15-4 zBxI5Ou}XQm+I`bzYI7%W2koSd*E|#R@33lm^mVB&^GH)Y4%K}b7?XU|M9V|!9JCv3 zcIT(^#JtwuJs|moDAhgp(WUTZqC&Je{sMmf{Q4eDbboyNe=j1m}yO-zU;0#Hs?rYp2zhvEYqYRm!y^Gg0tP#=1Igyw&?w^Yr z{DbX|38|$VXzDS{HNiL%{u5fiyUk-wmT@W&mDT!#0;w^&S(V`3wbq=d)2c{3 z;%jTu-iX12mBmx@Sx7v^G#Uvm@uva!oBr$tg&)vU*bsg#-H2j0~BA9nO>MNn6+ry7Ap}EG{sohW7*YK}vcXu#)Fi!dS;{g;@ z)@5wHEJP4U23E!+3kVyPQ&87V5XiwlpQX2s=&~)m4g(qwVOzn?r~~UlIjY9y+o8t;AMC zh%tAEys(5?D_tVRD2A2c24(bdd@tBgC^w~QOs3VIs@fm8sGyhy#!TA|_e_!XQat;A z*5jjU=;ez*h%puviD&7BXDPb(v4^CbmvUpeaWqH(;(%0tOpSe9vsPJNrz6EW%;+AVMaYRixd~cKSu96fF0|k(H$GzP<=_>(>rG zN##V|d_ui|o42E~!>oVsDqpVFLFrg6Q&;w~?OU`+w-k+ET^KVBm84BOiBu~|l?xqC z)SROt8TFvb*V-g^sk=+%OK&3hE(u48VcXkdN~KaK*WX7f2Q-^^5F;kvJfz7>RHTsA zY!In`c}11f)~RI1fOj#bgLUyJ%om<_-`za`Da${AF@w>|efb+vu!b((9>~CNaKe)c zMi6Y_B`J*QB{n>{hrN71m_DxH)rr<*1@hG1(qN0=D=UPo0ix)#!W zbC$6!(33tBy>0i++rj2J4OKKYlcJbN=x334e0m*8f&OptBHuHApI$zWSgGVsZ_#3q z*LaL7=z}0B*6n*|TeG6n$)=^!NMG=M8A6Do#_&S%v2`_&ut%mx(2X$+p(`qgg>*0G z%$}R)zl+UAEctSpK}~$&=O`zPnegOUkWR4&!lyh-B-tsZ0cGx>7Bz2c=l}`3bDn)C z&YW>!qgv`p;VYXlY!3Q2y^MEBvLBTx9EBhP1yW=?u!#A;>V4aqq2 zBq0Jcwmo4W)JDD8m)>;>J*(^e>&zZ21&g7kX9rJtYe26It1Qp+2P1499Nyg3PrdV9 zKBnn@^8P6oNw`cr6;WH#YenZOQB;m1;KzL9W}GzGYn2xkVY|=yr1pW; zXZNSe$Ol|uWgNc{r`gAke0fj&N{L##s5=(>3wJ4ON~tcZkCw^}9Ob{Uyk^rCI;Xec zp?;&}uoLvvYiyUa6w#E)Gc?@W_>KQUD8mEO2NH8W*fQrn1l#m(C+ctSJ|KxuUN|qD ze6Y`a-vf~SawPvYC#HT# z-nfSC{M{q17$bkrR&s15&=2{mkc8AOkHIzX#wtJ@qQF%*uQg*)pVgdnAVW{~LT)LK z7~OU&P;S|g{YeC45rEgccF;U%^Tdyf|;P4c1RO_pkoRV zKa!UH@wi{UGW-+NDaERBQ(E#}_FSLg z@|_Oq0<|Lp^5e17XN;TA!BYsmgU1ga?<;WhIe^1@WThB0=V=GMCu_hc;pq>NCxsR8 z{D2C|0w;j)I5t>S4&X7)fz2@K?xzdnVJn6=RoTK^N2gG3QGKUGo}A^ksk&7!zU|a= z=w#)X8$W!SN3OKE>&olwi{D!pOKlh7zsyAe{ju>B0htDkZ{6rp&m(zeM$=l&oT+1R zH;P%_N+{>(!i)bz6R@zB{W`RL7hEo&-?C9g6Tk+EVPS0HPU}8s)r2-6+%F=O=SWW? zV#!t|njpg8r-$&ti|&5lVgSNmjp2zLIDvbymsqq^o)2skQ2Oced8S0w^I}R=i?QO7 zQEgr)LOre~`&r~P@n^dJj zJGUn<048eqIh)eJ^HGmuj7qd|m|xFx0ak_UbT;vuK=L$AoyEyXHHH=A*Si~T{UZCY92cue!$u!L(eZ`@-l*Ghfp!-hK1+Mj(H ztD7xhYD7?vxlVNUM%l>Cabh5erbNmgkT|7O~Gxr01E0G|=Vce@a&;gmmp(Taff-PswZGd#Q;3i2*&NgoBvL z{=41<0#W`8;13&C<|O;~oc^DHbr`h@Bl&$E{|;`}6&~gP7GPzDu``pxd{mebmSJC2 zG!PD8cPh#V`!Hoy2D1Moo8bGUf`9%hVNt42F~j(OZ~bz1@vt#-hB+z{kpDXm_$T9q z_+ME875VRx4DLn~{@mgI69bx%gqgk+#Zi|AflTd9l%4DyoY{>X9PW!I`}dRjPZ~RH Y{-p|{vph`f1rN+Z4d-Ei!u{?40rT~vaR2}S delta 10370 zcmb_?WmH_twlxxhOK>N+JHZ3NU4y%82b&nohqxPI@%~fl4?b==Sxd8gE2)gP6A`m_2DUb*a1vLf(1%(a;1?2%^b$4*K zHF0pTW$~~BMXGk&FS4Puqt6K=v{X8)HA)B2_0LpTvFcZw@2A%P)GA^kh{r6vxmMwh z_h`(dijO&rQ_@)`))_g+|8T5$JTK8r&@ybh(GdQyvIL~M;9~Kj&IqX8!cul>1NU`1 zfUgH|dY}2iKO&rm-c63&WZDS%xX1lxk?PI3=m$2C#2!pQG^&YBd8~vJvkqHy49dun zFmXqPLa=+sLjBJPY0O91v8idx;B4uFmJb1s$+(-+_{0+YNNR9Ohb=^z(N7}x@Hkt1 z&TSR^N!86sThF;#i1~^*a=hX4yh&^ zXl0U{I1C*w{aQ@^(V1O%lXM)Eo`2~>P7kln;l0$A{*6N}ENo_t#u|;*rMILJHAuWN zDawyn6ID(u`KZV;)d=Yx@s5NlrOPrSb1iTM`yO=eH_S}C*3HhIWBmaMB+YhU6kY zpcShJ4In;dF6Z$>00n_oBmyFpM-+S6Fxn`O(Pvh|-eRDuD|m?{dcFCk+|)Wm(?IB* z_e<2j(o%+~J8m(0ma~?#^p_OzsDLwC0)rMdHNHG*J^3%3wmoi5bfcQ4sTO}sjiWGv znO~dzCCAa!-s0>Gan5iCW_mj5L@{4C10>~Jw%_Mr1urcMaDYx8iDVr4v8on?#G)1mA=fX1?$0$YL#MTg0O$wVkp@)baZfRR(7&vtA$pn3iY@?A>(7@#};-^UU zPpjLD)~Q=JA7}Jf%qoKeO3OQ;e-F?O>K$UWWF71C$C|c=9HEf|x=KXaxRR?sTT@m>+mLNDsJ8m zj9s`(k%fK+*ZVc`D$-7Fs-BM6Bb%Hz(t>pX#Lge=yYp7NBZD# zHQSj1=s2u6ID{Gl?o(18a|Xn#2jG}W8p!?$xXBQtG!xS+w(4BFvcw9$8~EHhbne8- zRB@Mc(<+mtXbHLL-&yw%?kW8&_epDYsVu2?+UsiF&tq;Mejdd=LjSO{UH`ScY2D4H zTu7@SXa(@NeUt?3iM8o3mxB#`#y9eAHcJgxUYGGiGy?8-Zh)d&b!7Ej=qd`(sbfF0 z`0MjQK041l-rc^fPKwRG~k*O^D}V#L+QZ1Mrz?&lzIKarhw{-UuXFse!GK!YrFws%>dtm%yLvh$8FJk#g{ zr{I`V1Hj|geP7MjLTZmob^w0R1FjdVyxd!N3+;SiK%@rxKr>;(h#&NIm{QHGLB-)U z#@$%nO=8>>t>dw$p_^NKYki*5Nm~K;?hP5UFvxxP#&CdnMpo*_@!BsZxuwVl5TWnI04E8B8*z6|f;E|=x}~*O+lNY^ z2Zi&BI~9FH*R^>MBVfwE(ArDmel4iDGj)&rr?H?j_~Zj+a7=DT;ac!42b?hOC$UN7 zN(-a_rpSRG+qLt)0w8w>jq}o@R)j*RVNq9JU$0G85}KbihJvcJMsj0T0y&DY$ywv_ z0#;y{zB6$X{v1W4)T}1Kd_^=_W@5i;=a;t7dS%47I#6yfo1@BK{A=KpX_Xsz01g3v zXGyxPH}f#XSag;_k3Ul8cl^}K4UU)nkf9gs0NSP8hv&n%(wT3XDH3dRK>kyR35=r6 z|9jV)Ok6r$`~g0w&ByPTkDfx5?H@g<(kj~{{2yIVZWjJE!A=>l%2{x~-FSxlXAAh> zIv@MqWKO=B@8SIdO_%*g$`y9558)rDZ-Z)lMZT{>X+J4=8+2m*N43(6;lih|ElK~< z==rCA3t{vBZUG5@E<;c8Atx|LZVqKN_f zToR7%wzRbH$9^^5Y)PN++!0n}Jaj2)&%WPhjda3JO+XOxX^v#zMDeW999iEMqjDkh zM)w_Yqw}Kmtw4&fUcR_v5)nwrhkxzQ1AQ7`N`0OSna3gqkZHA3a+u{U5HD)`e2nAS z&cyvTMzNz4=R&b$dY_dWbLjGFn0Uw$(^#QF2zskAdv#CPM7&e-(O*NiQDb0ny&oD~ z_e)9$9^K>VAX{Wfxh`A z0V$gDm=RA*>?h_>|FeCQhuO-KzM~`~`EfQH&WH^r_BLt)thz{a7JIasq(r`wZQin9=n+D9Vr`i!SJ`zc>xME~>o`@&xA~z|c z{Ex(|0V?S2N8*o1B5;%xBtI@nQycTd6gLZ?;YjuW&7{Pti<9A>cw~xlh)|}Eia#>> zhN$SDnB2}!E>q;kB)piNA?-SX>D*;ZMYP4iUN3QN>51=P;GZ6EWmB zu}pqkgQhm&i3kLl2Ylj4E&k19#;Qy5RsW$iG`a3!sV%4Ut^iaqVL60VjJ@h@d750L zx|W$*KU$OYSQ}jeoVKav%&&80{oO5QI7W25C=$(>Ict-&XC|;psM`L*QLle4Gf%2N z3t~WYXb5M2go!2w@#qevJW}IiYm!m{?GYy1ZA5jvvjtp z>%)@TBPiuh7P!7#KtFU*J~_fuoZ+a&iT)p+H2D8mSZSZP8Tf5=qLoMY_-|k3Uca^f zLlbcQw?PoY5mXDEt)18M)VSBsPI1S_VpO`T^L{_lfkQA&T4 z3AG{MYsLJCFFfuiIe8UaW*+iaYE1aV{xo5pvQ+mwOT|>>u(LLrf0Q5njjUJvS2KvG zE=gi$Vsbq({L!RSj+i~8mf2I@{N4R$YEnvF<95Q-klG@yC2FMh!%bs#1JfBk?^_Ym@; zqMk{|cH7#=3EnF6iTxS!7M~W_UQSi={epz7BBDa!dfxbS>59akGJc}u zs6rk~Hrn-FJ?JkF?6&j2N5|jYbf#wLDF~RuPi5whupkDwl_>2I8r$tKwfK4vWQT|X z(nW*_C(baW!wn%Mrhps~AwtTC;sG<$TCV7X6PX94aLaR%@hO|`CG zmcvYTG`HW%{>C@s#mQ2%`7JfP5zSe{ijaM0kDu)yX?>4Y`p)l)llKJ9835nj2H~6I zn$a;@GS)HL5vSzr&f1Y;aOxRkXVf<(IeQ*_|6^3W*Q+@@dvxt*foXp?O4HCT z!+Jy0?uMkw zR+W%rqxjv8zXenCek-~;6A|4YJCv|*tClru%Sh>SmJdv%H?-LFG7);n0%GLFrevDs zoegTjuDXM+Ot1H|kE1nNO?tKLpv35DetfKGq+G<^4#5elx=c!ZSLUHk^-52}Ru{yW z#FQQyz62(r1*#&b7(XW&tC93}YnC#Zb7pnmmX+zohi}TD9!DrN;Dnb;$K*1`?`*o= zyx#1`rNhY2-zYLdk+ zE)rJG!8gP9YM@u_K>SzESNq#dU$<5x_r)t6q?_?FIsxf56FznlBMc_XV)-TM98c3i zrZIoIknp=%=TGtDE1c&y;l3-_KRY;*K#6TXeo?Mw)`HrLyHSOxm`+KVg)QXsU-HU> znmf!CJkhX^9I#Ve(GZf_c=lOzXNa!qaIQM=#L35*Qi`@xzjH;MsZX_CPDbrC>EJe+ z`Zt(5Z3B+D3)OE*O`Mp&@j;9Gfv5}ypv%Llh)EGgXNzFU!@nali3~h`_Y;uH%{>7T znRrgZgvIf+(9$Av)S0qyFlj%+4x^yiN$03j8A`wJ(wX)`<0nCJlXD{Gw-T zGtb#I2P}LecjmOoPF+DO13n}-(*rOh0*9u#(fViA(gQ3vT4ko1zL77DD_&vHyX5&x zr|F`KFDzNV#N0A~jpIireE;2Z>P`L_KkZ$|zLYm`(gZS+LXjzi0$x{A6f^&O!mGv)N7&!JTHC{hc4fU}} zCvNpNMBO^Z-(cStJpaIN2wg;vtsC^oSRUp|Y`S$OMfn{M;rqIFyV{fD7`3L|i2|z< z?KL}S0+zjO1TynR0CT^Ep=GF`SoRu5ADy4P4Yw~D^q4+;L@xd z?a2CQUWcu>TZb-}6IJ}f7Xb}W`8oHmuXip{$hxKI6M@d3b%1$z{e&}|cfP?rUE#!+ zS_s52hAD$DXMJhHVcNdFN!YVXF2l=PJ7{rzZ5H>aqTps+2s?h9{80vZfP}}wsykYx zxNX^a%Jf0OqS_`p22w*B!*qBBe=KqTO}V2Pwiargeq~{LSW-s7P<&hyH|F! zFmA$6b@T`GmhPus-y#2=MPTr{S7l+LpgIvC=@e8zn}(h3A{)lN&>VnqoyGrUF%6?I zUq%7hIH6%zh_Qhf*=$JKd6(mS)jj@gXP>n(+c|YKS*GIHYxkDZlaf(huUuJ9dYC;! z6!s4k@$6WkP!AqR@X7erV&d{m*j!x>Y8$1~v#cW-?b4^>=Nb0aJP5@a|V3S6*e zex>TN1*$Vm64(kpGgG}Ufxp@jH2A9>L2xerbkzudOdoaE0BIlc7l-$AnP#*alS6YD6oXZbaf-90rsrlRkWbH5ao3Q`qYyBy=WVA4wyqJg%Lp~`{83q=sVMvIKHFrMYH*YbhoT#^vxHSo!e zD)L-h({7x3k;i-dSk$ZDP+F98o%AzNp*uy~{_*#&%uM+EG6rKSHucG}g?a_HgbVs- z8Zna9OWbZLR#K&Jt)%MwKTB8?*0cxJaS7NhVc~?sUC#P&w;&ek0&L4=Qh_pDWaumo zJwry`B#Jz}+h&5R(S92?G_10~glzfD{$dmEJg=v{zsMzDFZY*X#`9 zJl>^T_)CqVsx0L&Wx>lt!0Z1Q41rFAfcV6Au2xxShnUblNuc#H8iK6Sc< zpS7-x4QL|3Te9A#ukFOmsfYinoLDUwW=xXZHB$412a%!hF&se`|0o=JR29S zDmM^NYW&pFXBRb5_i=DWu`_m>8NpF`W-8p6x(-OkHK+f!kS1dz)a*b_EdzYVa?XhPlAw#+h8EWNr6YhUIV@Z)V29;tj0Dl8dH z-)lggIIK_|ujdE}Wn-A_X)U^!-f+9MvRJCuD!_xw4)fA7>O(CdwSprxzOF@0F)VdQYRPO#)~WW#7q+&12|^)hNBDzAY`mxile=dv zc%Gfv=q>l|)8b+&FqeV>hpqzc_x@8W#OJ3yjb z3YF}&pB1aVTqS1+0iBxeor1TV9TVLb?v(YV0>GWK)X*#AR-S1)SgUDL&*7CCjI4l~ zmo0Vc@B4*Opku%9a4w1uyy~A&%6V?paP?uslnt5OV7N+K z`Z>EtT21G>FpD~5^1ih`dBHDRxL{L&G2#`6DXu|NP$kkgT*!z+kRWT>>;q8o>AZZjIL~>3vRsWN) zum-wP1|Ryzcf*9K#}HSa=BCbc9=MNE$&{2Z8>%f9ZD$>dd4pl9Hjb3Ka$@u45~x`f zO%VW65T(j4Lt5m(^SbQ8y}xFkwBSg7eb3VZr+fByL?DGd)vHvyp!^ z<(DVKKs5F&c*6siwl=6HU}9+FtzafqZyt%LK0~$Wc)T@+6(=b}YVS2uGh%(;jd7qn z4nek~1w!I+GUj-#M@~Lo@*C-~-8Svx{S=_uwyd}n7q>pku-ol;*OyCoDuOQ`+}b{l zww)s=eL%cj^j!Jp$No@LG}1ZJY1G~q11F`38uoy4AB2mwvyL zHP)=R^^0u=2tMvt9o7HLyw6L?cxVr$&p1KI2cP5oAHkr>ILAkve_7G^GU>uMfm2^?+y#(`oNuM!O|LRM|7ourW( z=(HeP=)w5NP3hc>LYw!MX;h^M3R9n<5k+wfmM-z~?L>)o%9lVZV~IM)uY`bHqFKba zM8tR{S1CFTE?SUmzVc6epOlFejCt@{)X@rv(Q~sCw$nU?ZB2Nw^;T#z4 zcF?$_D8t$?yGNY7)pCgCE{7R^O2Cd&j*No{nWUx%?lCG3XS)<0Z@GW*^VSos z`My!Y9k2SO+9a`21H0E*6;Jrq2v|JwT*YKw@WP{h?tUOG&J%n7YFTCD z%0~!4GrEF2XlTA4G{b6_p7_NL-zgZb8wtmGHV?$UEm>vI?J9IR)4>CHEf`!3uL{}2 zpIQsF-&71mZmtd?H3_=81o+ZomNjX3GO^+JWU>hYU_pnJb@)l~+G90Y3xv{0VU(W3 z?&pji?|ohJCijLDkct^)yRFCl-lN>CFC^?F#-u4Kt-;evSi`wZ8%qqw@%gv9bp|$N z6vAe`bK|2uJw5faRzL+RZs5GTE%W@UHzM)^PWR-w7V}N|2Mi8BGNs2CLNmO{g6NQ= zbGkmv*dR1IbR@dWgb0lI_i4GrT*FM2n48}MEiq%)yQFq!jAiUJo@|DleVEgyvq`pj zhavkgF$*MI;%e!NBzzTqJb)7Sq}CYHiQWtu{MpT8vzYvk21aN zak&mchJvDng0QO+LOfN_fj*5@hi|+Xe!|=L@QjD#!nqhPG~k9yyzMj@KxF5isbH($ z+kFAIY${%K9#WAf6u9~el%pX^TkNGed|Hhxd{__O`c9Bwq1u-;>&y&85l4?TGI!09 zKBpgHB_<*3LjSUXJEt5ya243CoUi4gOfzE(fx{Zjfe!c-6kR@=0=RwWB}~lNNzw~^ z^I4QZ5w)YFAa54Qs)Q4&*JZ$cIl7k~OT&&_b!#p*0#43|2@(*-1N_fvHKBY)EaYt;kh99b~KA(PK7WP>d;t zQi~AQ^Q+X}eSb|^m;J$B)SK>-IJOX<`T2?XDa_=SyY3)-P=~LB`_UcM96KW;6SQS8 zwqWL!-1@8c4#9x`CefhCT2eNda$}$(JwM{@izEbnbwn0_Q_(@b7kj*p6JnpGK*|Ji z&P}72(c8u{#wWzOlVxllxdQ$8{A_cVuz`6%=r$+$9qw2QX&mcr^nsc?*$8^1Ru&M;IB7B2MEn%TD1*BH>d z7`%v`We%#?#JtZQJ`>y9t4s+zC&+31#ZgGe!qE3o16;uI!S*F31KpSBTo1WMAqnOA zbWUguicSzGFCgbz;-o_WwMqiPY9pDs_o~`#US--u5h*r;C-wZn# zu3paafLZrE!E>2`ug^krNmfw2HP_9so0gBVEwX%=k9&Bqs4c_dby(yX-+c`0kA57mm$l K4{QonvOhQ{k;PYSDnk(^`>@Dj0zfvj8~C+JQgsp3fCz% zwm5dnX{`tPbV!6hTz}V#0o7Ka6cPc|tH4SLz7p5Mz^n!{#Qr*Rh zawN%Wpa}~i5=rWmWWT}k!S zayf4f2VRCV@+eP(PXfaLq^VW^bB19krvvr-){U3V^6;__f?jX@-v^-brwD0s*WQHM z1P?P&YcIW4HK$kDauos&Ki=;gf>06N((cHm)e}gQl=zsc!!`I}RvAK~X);jx@kt##j3VHvHg2+I^BTy*;#VRI#GZ)$|+n71GpF z>U6Q>!xH*Nxz#;y`f~yQ`^7qV-b9AM<7zlVA)<*Ze8sJ)YC{YIZuWW1<%%8Y3`>{e?fc;T0A zdYPFF#Mq{v(PO+{=@OgRH%i1@#M6! zPkGs?$>MT+MU78!(nsqS-O_#KrNb6ljj-%McsK0TS;a-#&8XMmQ7gdgk0PEPBICW5 zliqvvK9aA@miiuOgl1ZUXOR>$o~ z^lDdt6WcKBVnIVh3lEUAt>->}=1E|`eo)n6vgpe5aMB4ZzDAMt6s250-o(|HT<6Q~ zgN*QL(X<4haf?H(+-5$Td-u8jDoPAH)M^gnR%;E>F5?KnVGXs-lTW&upz8Pg{*o_T zNrB>>12#Yl&24n*{O&o%rKG);*0PR#TkC7OQBc@<3 z%O6|+Pp1BV+WJ3b4W*~tovnR?d_}{BSgK;w#>w?VBmMj68pKFJ0a^o6p}<4*&r?y4 z2ipFAsmCiyLMK9`6uF82J{eR11%>}N;HeRh23b|afmA5s5dVAo7Yi2nYA1_=rZ`yZfDh@%oM(bI#O|Kp~H>B>5&otzHdAV(tLb2dGVhZC<<{%oyu#BR7of(GY3;;X9q_YR%1uU iC(}g#oEZO;<^o|;Re_;YfW*jgK^j#to^vTaUH&hMpN)3_ diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize.rptdesign index 7f585daaa70..d33748abac1 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize.rptdesign @@ -18,6 +18,7 @@
in /templates/blank_report.gif + auto layout ltr 96 @@ -324,10516 +325,10516 @@ from join CLASSICMODELS.CUSTOMERS c3 on 1=1 ]]> - - - 2.0 - - - - - - - Col1 - 1 - - 4 - 11 - 0 - NotNullable - - Col1 - - - - Col1 - - 11 - - - - - - - Col2 - 2 - - 4 - 11 - 0 - NotNullable - - Col2 - - - - Col2 - - 11 - - - - - - - Col3 - 3 - - 4 - 11 - 0 - NotNullable - - Col3 - - - - Col3 - - 11 - - - - - - - Col4 - 4 - - 4 - 11 - 0 - NotNullable - - Col4 - - - - Col4 - - 11 - - - - - - - Col5 - 5 - - 4 - 11 - 0 - NotNullable - - Col5 - - - - Col5 - - 11 - - - - - - - Col6 - 6 - - 4 - 11 - 0 - NotNullable - - Col6 - - - - Col6 - - 11 - - - - - - - Col7 - 7 - - 4 - 11 - 0 - NotNullable - - Col7 - - - - Col7 - - 11 - - - - - - - Col8 - 8 - - 4 - 11 - 0 - NotNullable - - Col8 - - - - Col8 - - 11 - - - - - - - Col9 - 9 - - 4 - 11 - 0 - NotNullable - - Col9 - - - - Col9 - - 11 - - - - - - - Col10 - 10 - - 4 - 11 - 0 - NotNullable - - Col10 - - - - Col10 - - 11 - - - - - - - Col11 - 11 - - 4 - 11 - 0 - NotNullable - - Col11 - - - - Col11 - - 11 - - - - - - - Col12 - 12 - - 4 - 11 - 0 - NotNullable - - Col12 - - - - Col12 - - 11 - - - - - - - Col13 - 13 - - 4 - 11 - 0 - NotNullable - - Col13 - - - - Col13 - - 11 - - - - - - - Col14 - 14 - - 4 - 11 - 0 - NotNullable - - Col14 - - - - Col14 - - 11 - - - - - - - Col15 - 15 - - 4 - 11 - 0 - NotNullable - - Col15 - - - - Col15 - - 11 - - - - - - - Col16 - 16 - - 4 - 11 - 0 - NotNullable - - Col16 - - - - Col16 - - 11 - - - - - - - Col17 - 17 - - 4 - 11 - 0 - NotNullable - - Col17 - - - - Col17 - - 11 - - - - - - - Col18 - 18 - - 4 - 11 - 0 - NotNullable - - Col18 - - - - Col18 - - 11 - - - - - - - Col19 - 19 - - 4 - 11 - 0 - NotNullable - - Col19 - - - - Col19 - - 11 - - - - - - - Col20 - 20 - - 4 - 11 - 0 - NotNullable - - Col20 - - - - Col20 - - 11 - - - - - - - Col21 - 21 - - 4 - 11 - 0 - NotNullable - - Col21 - - - - Col21 - - 11 - - - - - - - Col22 - 22 - - 4 - 11 - 0 - NotNullable - - Col22 - - - - Col22 - - 11 - - - - - - - Col23 - 23 - - 4 - 11 - 0 - NotNullable - - Col23 - - - - Col23 - - 11 - - - - - - - Col24 - 24 - - 4 - 11 - 0 - NotNullable - - Col24 - - - - Col24 - - 11 - - - - - - - Col25 - 25 - - 4 - 11 - 0 - NotNullable - - Col25 - - - - Col25 - - 11 - - - - - - - Col26 - 26 - - 4 - 11 - 0 - NotNullable - - Col26 - - - - Col26 - - 11 - - - - - - - Col27 - 27 - - 4 - 11 - 0 - NotNullable - - Col27 - - - - Col27 - - 11 - - - - - - - Col28 - 28 - - 4 - 11 - 0 - NotNullable - - Col28 - - - - Col28 - - 11 - - - - - - - Col29 - 29 - - 4 - 11 - 0 - NotNullable - - Col29 - - - - Col29 - - 11 - - - - - - - Col30 - 30 - - 4 - 11 - 0 - NotNullable - - Col30 - - - - Col30 - - 11 - - - - - - - Col31 - 31 - - 4 - 11 - 0 - NotNullable - - Col31 - - - - Col31 - - 11 - - - - - - - Col32 - 32 - - 4 - 11 - 0 - NotNullable - - Col32 - - - - Col32 - - 11 - - - - - - - Col33 - 33 - - 4 - 11 - 0 - NotNullable - - Col33 - - - - Col33 - - 11 - - - - - - - Col34 - 34 - - 4 - 11 - 0 - NotNullable - - Col34 - - - - Col34 - - 11 - - - - - - - Col35 - 35 - - 4 - 11 - 0 - NotNullable - - Col35 - - - - Col35 - - 11 - - - - - - - Col36 - 36 - - 4 - 11 - 0 - NotNullable - - Col36 - - - - Col36 - - 11 - - - - - - - Col37 - 37 - - 4 - 11 - 0 - NotNullable - - Col37 - - - - Col37 - - 11 - - - - - - - Col38 - 38 - - 4 - 11 - 0 - NotNullable - - Col38 - - - - Col38 - - 11 - - - - - - - Col39 - 39 - - 4 - 11 - 0 - NotNullable - - Col39 - - - - Col39 - - 11 - - - - - - - Col40 - 40 - - 4 - 11 - 0 - NotNullable - - Col40 - - - - Col40 - - 11 - - - - - - - Col41 - 41 - - 4 - 11 - 0 - NotNullable - - Col41 - - - - Col41 - - 11 - - - - - - - Col42 - 42 - - 4 - 11 - 0 - NotNullable - - Col42 - - - - Col42 - - 11 - - - - - - - Col43 - 43 - - 4 - 11 - 0 - NotNullable - - Col43 - - - - Col43 - - 11 - - - - - - - Col44 - 44 - - 4 - 11 - 0 - NotNullable - - Col44 - - - - Col44 - - 11 - - - - - - - Col45 - 45 - - 4 - 11 - 0 - NotNullable - - Col45 - - - - Col45 - - 11 - - - - - - - Col46 - 46 - - 4 - 11 - 0 - NotNullable - - Col46 - - - - Col46 - - 11 - - - - - - - Col47 - 47 - - 4 - 11 - 0 - NotNullable - - Col47 - - - - Col47 - - 11 - - - - - - - Col48 - 48 - - 4 - 11 - 0 - NotNullable - - Col48 - - - - Col48 - - 11 - - - - - - - Col49 - 49 - - 4 - 11 - 0 - NotNullable - - Col49 - - - - Col49 - - 11 - - - - - - - Col50 - 50 - - 4 - 11 - 0 - NotNullable - - Col50 - - - - Col50 - - 11 - - - - - - - Col51 - 51 - - 4 - 11 - 0 - NotNullable - - Col51 - - - - Col51 - - 11 - - - - - - - Col52 - 52 - - 4 - 11 - 0 - NotNullable - - Col52 - - - - Col52 - - 11 - - - - - - - Col53 - 53 - - 4 - 11 - 0 - NotNullable - - Col53 - - - - Col53 - - 11 - - - - - - - Col54 - 54 - - 4 - 11 - 0 - NotNullable - - Col54 - - - - Col54 - - 11 - - - - - - - Col55 - 55 - - 4 - 11 - 0 - NotNullable - - Col55 - - - - Col55 - - 11 - - - - - - - Col56 - 56 - - 4 - 11 - 0 - NotNullable - - Col56 - - - - Col56 - - 11 - - - - - - - Col57 - 57 - - 4 - 11 - 0 - NotNullable - - Col57 - - - - Col57 - - 11 - - - - - - - Col58 - 58 - - 4 - 11 - 0 - NotNullable - - Col58 - - - - Col58 - - 11 - - - - - - - Col59 - 59 - - 4 - 11 - 0 - NotNullable - - Col59 - - - - Col59 - - 11 - - - - - - - Col60 - 60 - - 4 - 11 - 0 - NotNullable - - Col60 - - - - Col60 - - 11 - - - - - - - Col61 - 61 - - 4 - 11 - 0 - NotNullable - - Col61 - - - - Col61 - - 11 - - - - - - - Col62 - 62 - - 4 - 11 - 0 - NotNullable - - Col62 - - - - Col62 - - 11 - - - - - - - Col63 - 63 - - 4 - 11 - 0 - NotNullable - - Col63 - - - - Col63 - - 11 - - - - - - - Col64 - 64 - - 4 - 11 - 0 - NotNullable - - Col64 - - - - Col64 - - 11 - - - - - - - Col65 - 65 - - 4 - 11 - 0 - NotNullable - - Col65 - - - - Col65 - - 11 - - - - - - - Col66 - 66 - - 4 - 11 - 0 - NotNullable - - Col66 - - - - Col66 - - 11 - - - - - - - Col67 - 67 - - 4 - 11 - 0 - NotNullable - - Col67 - - - - Col67 - - 11 - - - - - - - Col68 - 68 - - 4 - 11 - 0 - NotNullable - - Col68 - - - - Col68 - - 11 - - - - - - - Col69 - 69 - - 4 - 11 - 0 - NotNullable - - Col69 - - - - Col69 - - 11 - - - - - - - Col70 - 70 - - 4 - 11 - 0 - NotNullable - - Col70 - - - - Col70 - - 11 - - - - - - - Col71 - 71 - - 4 - 11 - 0 - NotNullable - - Col71 - - - - Col71 - - 11 - - - - - - - Col72 - 72 - - 4 - 11 - 0 - NotNullable - - Col72 - - - - Col72 - - 11 - - - - - - - Col73 - 73 - - 4 - 11 - 0 - NotNullable - - Col73 - - - - Col73 - - 11 - - - - - - - Col74 - 74 - - 4 - 11 - 0 - NotNullable - - Col74 - - - - Col74 - - 11 - - - - - - - Col75 - 75 - - 4 - 11 - 0 - NotNullable - - Col75 - - - - Col75 - - 11 - - - - - - - Col76 - 76 - - 4 - 11 - 0 - NotNullable - - Col76 - - - - Col76 - - 11 - - - - - - - Col77 - 77 - - 4 - 11 - 0 - NotNullable - - Col77 - - - - Col77 - - 11 - - - - - - - Col78 - 78 - - 4 - 11 - 0 - NotNullable - - Col78 - - - - Col78 - - 11 - - - - - - - Col79 - 79 - - 4 - 11 - 0 - NotNullable - - Col79 - - - - Col79 - - 11 - - - - - - - Col80 - 80 - - 4 - 11 - 0 - NotNullable - - Col80 - - - - Col80 - - 11 - - - - - - - Col81 - 81 - - 4 - 11 - 0 - NotNullable - - Col81 - - - - Col81 - - 11 - - - - - - - Col82 - 82 - - 4 - 11 - 0 - NotNullable - - Col82 - - - - Col82 - - 11 - - - - - - - Col83 - 83 - - 4 - 11 - 0 - NotNullable - - Col83 - - - - Col83 - - 11 - - - - - - - Col84 - 84 - - 4 - 11 - 0 - NotNullable - - Col84 - - - - Col84 - - 11 - - - - - - - Col85 - 85 - - 4 - 11 - 0 - NotNullable - - Col85 - - - - Col85 - - 11 - - - - - - - Col86 - 86 - - 4 - 11 - 0 - NotNullable - - Col86 - - - - Col86 - - 11 - - - - - - - Col87 - 87 - - 4 - 11 - 0 - NotNullable - - Col87 - - - - Col87 - - 11 - - - - - - - Col88 - 88 - - 4 - 11 - 0 - NotNullable - - Col88 - - - - Col88 - - 11 - - - - - - - Col89 - 89 - - 4 - 11 - 0 - NotNullable - - Col89 - - - - Col89 - - 11 - - - - - - - Col90 - 90 - - 4 - 11 - 0 - NotNullable - - Col90 - - - - Col90 - - 11 - - - - - - - Col91 - 91 - - 4 - 11 - 0 - NotNullable - - Col91 - - - - Col91 - - 11 - - - - - - - Col92 - 92 - - 4 - 11 - 0 - NotNullable - - Col92 - - - - Col92 - - 11 - - - - - - - Col93 - 93 - - 4 - 11 - 0 - NotNullable - - Col93 - - - - Col93 - - 11 - - - - - - - Col94 - 94 - - 4 - 11 - 0 - NotNullable - - Col94 - - - - Col94 - - 11 - - - - - - - Col95 - 95 - - 4 - 11 - 0 - NotNullable - - Col95 - - - - Col95 - - 11 - - - - - - - Col96 - 96 - - 4 - 11 - 0 - NotNullable - - Col96 - - - - Col96 - - 11 - - - - - - - Col97 - 97 - - 4 - 11 - 0 - NotNullable - - Col97 - - - - Col97 - - 11 - - - - - - - Col98 - 98 - - 4 - 11 - 0 - NotNullable - - Col98 - - - - Col98 - - 11 - - - - - - - Col99 - 99 - - 4 - 11 - 0 - NotNullable - - Col99 - - - - Col99 - - 11 - - - - - - - Col100 - 100 - - 4 - 11 - 0 - NotNullable - - Col100 - - - - Col100 - - 11 - - - - - - - Col101 - 101 - - 4 - 11 - 0 - NotNullable - - Col101 - - - - Col101 - - 11 - - - - - - - Col102 - 102 - - 4 - 11 - 0 - NotNullable - - Col102 - - - - Col102 - - 11 - - - - - - - Col103 - 103 - - 4 - 11 - 0 - NotNullable - - Col103 - - - - Col103 - - 11 - - - - - - - Col104 - 104 - - 4 - 11 - 0 - NotNullable - - Col104 - - - - Col104 - - 11 - - - - - - - Col105 - 105 - - 4 - 11 - 0 - NotNullable - - Col105 - - - - Col105 - - 11 - - - - - - - Col106 - 106 - - 4 - 11 - 0 - NotNullable - - Col106 - - - - Col106 - - 11 - - - - - - - Col107 - 107 - - 4 - 11 - 0 - NotNullable - - Col107 - - - - Col107 - - 11 - - - - - - - Col108 - 108 - - 4 - 11 - 0 - NotNullable - - Col108 - - - - Col108 - - 11 - - - - - - - Col109 - 109 - - 4 - 11 - 0 - NotNullable - - Col109 - - - - Col109 - - 11 - - - - - - - Col110 - 110 - - 4 - 11 - 0 - NotNullable - - Col110 - - - - Col110 - - 11 - - - - - - - Col111 - 111 - - 4 - 11 - 0 - NotNullable - - Col111 - - - - Col111 - - 11 - - - - - - - Col112 - 112 - - 4 - 11 - 0 - NotNullable - - Col112 - - - - Col112 - - 11 - - - - - - - Col113 - 113 - - 4 - 11 - 0 - NotNullable - - Col113 - - - - Col113 - - 11 - - - - - - - Col114 - 114 - - 4 - 11 - 0 - NotNullable - - Col114 - - - - Col114 - - 11 - - - - - - - Col115 - 115 - - 4 - 11 - 0 - NotNullable - - Col115 - - - - Col115 - - 11 - - - - - - - Col116 - 116 - - 4 - 11 - 0 - NotNullable - - Col116 - - - - Col116 - - 11 - - - - - - - Col117 - 117 - - 4 - 11 - 0 - NotNullable - - Col117 - - - - Col117 - - 11 - - - - - - - Col118 - 118 - - 4 - 11 - 0 - NotNullable - - Col118 - - - - Col118 - - 11 - - - - - - - Col119 - 119 - - 4 - 11 - 0 - NotNullable - - Col119 - - - - Col119 - - 11 - - - - - - - Col120 - 120 - - 4 - 11 - 0 - NotNullable - - Col120 - - - - Col120 - - 11 - - - - - - - Col121 - 121 - - 4 - 11 - 0 - NotNullable - - Col121 - - - - Col121 - - 11 - - - - - - - Col122 - 122 - - 4 - 11 - 0 - NotNullable - - Col122 - - - - Col122 - - 11 - - - - - - - Col123 - 123 - - 4 - 11 - 0 - NotNullable - - Col123 - - - - Col123 - - 11 - - - - - - - Col124 - 124 - - 4 - 11 - 0 - NotNullable - - Col124 - - - - Col124 - - 11 - - - - - - - Col125 - 125 - - 4 - 11 - 0 - NotNullable - - Col125 - - - - Col125 - - 11 - - - - - - - Col126 - 126 - - 4 - 11 - 0 - NotNullable - - Col126 - - - - Col126 - - 11 - - - - - - - Col127 - 127 - - 4 - 11 - 0 - NotNullable - - Col127 - - - - Col127 - - 11 - - - - - - - Col128 - 128 - - 4 - 11 - 0 - NotNullable - - Col128 - - - - Col128 - - 11 - - - - - - - Col129 - 129 - - 4 - 11 - 0 - NotNullable - - Col129 - - - - Col129 - - 11 - - - - - - - Col130 - 130 - - 4 - 11 - 0 - NotNullable - - Col130 - - - - Col130 - - 11 - - - - - - - Col131 - 131 - - 4 - 11 - 0 - NotNullable - - Col131 - - - - Col131 - - 11 - - - - - - - Col132 - 132 - - 4 - 11 - 0 - NotNullable - - Col132 - - - - Col132 - - 11 - - - - - - - Col133 - 133 - - 4 - 11 - 0 - NotNullable - - Col133 - - - - Col133 - - 11 - - - - - - - Col134 - 134 - - 4 - 11 - 0 - NotNullable - - Col134 - - - - Col134 - - 11 - - - - - - - Col135 - 135 - - 4 - 11 - 0 - NotNullable - - Col135 - - - - Col135 - - 11 - - - - - - - Col136 - 136 - - 4 - 11 - 0 - NotNullable - - Col136 - - - - Col136 - - 11 - - - - - - - Col137 - 137 - - 4 - 11 - 0 - NotNullable - - Col137 - - - - Col137 - - 11 - - - - - - - Col138 - 138 - - 4 - 11 - 0 - NotNullable - - Col138 - - - - Col138 - - 11 - - - - - - - Col139 - 139 - - 4 - 11 - 0 - NotNullable - - Col139 - - - - Col139 - - 11 - - - - - - - Col140 - 140 - - 4 - 11 - 0 - NotNullable - - Col140 - - - - Col140 - - 11 - - - - - - - Col141 - 141 - - 4 - 11 - 0 - NotNullable - - Col141 - - - - Col141 - - 11 - - - - - - - Col142 - 142 - - 4 - 11 - 0 - NotNullable - - Col142 - - - - Col142 - - 11 - - - - - - - Col143 - 143 - - 4 - 11 - 0 - NotNullable - - Col143 - - - - Col143 - - 11 - - - - - - - Col144 - 144 - - 4 - 11 - 0 - NotNullable - - Col144 - - - - Col144 - - 11 - - - - - - - Col145 - 145 - - 4 - 11 - 0 - NotNullable - - Col145 - - - - Col145 - - 11 - - - - - - - Col146 - 146 - - 4 - 11 - 0 - NotNullable - - Col146 - - - - Col146 - - 11 - - - - - - - Col147 - 147 - - 4 - 11 - 0 - NotNullable - - Col147 - - - - Col147 - - 11 - - - - - - - Col148 - 148 - - 4 - 11 - 0 - NotNullable - - Col148 - - - - Col148 - - 11 - - - - - - - Col149 - 149 - - 4 - 11 - 0 - NotNullable - - Col149 - - - - Col149 - - 11 - - - - - - - Col150 - 150 - - 4 - 11 - 0 - NotNullable - - Col150 - - - - Col150 - - 11 - - - - - - - Col151 - 151 - - 4 - 11 - 0 - NotNullable - - Col151 - - - - Col151 - - 11 - - - - - - - Col152 - 152 - - 4 - 11 - 0 - NotNullable - - Col152 - - - - Col152 - - 11 - - - - - - - Col153 - 153 - - 4 - 11 - 0 - NotNullable - - Col153 - - - - Col153 - - 11 - - - - - - - Col154 - 154 - - 4 - 11 - 0 - NotNullable - - Col154 - - - - Col154 - - 11 - - - - - - - Col155 - 155 - - 4 - 11 - 0 - NotNullable - - Col155 - - - - Col155 - - 11 - - - - - - - Col156 - 156 - - 4 - 11 - 0 - NotNullable - - Col156 - - - - Col156 - - 11 - - - - - - - Col157 - 157 - - 4 - 11 - 0 - NotNullable - - Col157 - - - - Col157 - - 11 - - - - - - - Col158 - 158 - - 4 - 11 - 0 - NotNullable - - Col158 - - - - Col158 - - 11 - - - - - - - Col159 - 159 - - 4 - 11 - 0 - NotNullable - - Col159 - - - - Col159 - - 11 - - - - - - - Col160 - 160 - - 4 - 11 - 0 - NotNullable - - Col160 - - - - Col160 - - 11 - - - - - - - Col161 - 161 - - 4 - 11 - 0 - NotNullable - - Col161 - - - - Col161 - - 11 - - - - - - - Col162 - 162 - - 4 - 11 - 0 - NotNullable - - Col162 - - - - Col162 - - 11 - - - - - - - Col163 - 163 - - 4 - 11 - 0 - NotNullable - - Col163 - - - - Col163 - - 11 - - - - - - - Col164 - 164 - - 4 - 11 - 0 - NotNullable - - Col164 - - - - Col164 - - 11 - - - - - - - Col165 - 165 - - 4 - 11 - 0 - NotNullable - - Col165 - - - - Col165 - - 11 - - - - - - - Col166 - 166 - - 4 - 11 - 0 - NotNullable - - Col166 - - - - Col166 - - 11 - - - - - - - Col167 - 167 - - 4 - 11 - 0 - NotNullable - - Col167 - - - - Col167 - - 11 - - - - - - - Col168 - 168 - - 4 - 11 - 0 - NotNullable - - Col168 - - - - Col168 - - 11 - - - - - - - Col169 - 169 - - 4 - 11 - 0 - NotNullable - - Col169 - - - - Col169 - - 11 - - - - - - - Col170 - 170 - - 4 - 11 - 0 - NotNullable - - Col170 - - - - Col170 - - 11 - - - - - - - Col171 - 171 - - 4 - 11 - 0 - NotNullable - - Col171 - - - - Col171 - - 11 - - - - - - - Col172 - 172 - - 4 - 11 - 0 - NotNullable - - Col172 - - - - Col172 - - 11 - - - - - - - Col173 - 173 - - 4 - 11 - 0 - NotNullable - - Col173 - - - - Col173 - - 11 - - - - - - - Col174 - 174 - - 4 - 11 - 0 - NotNullable - - Col174 - - - - Col174 - - 11 - - - - - - - Col175 - 175 - - 4 - 11 - 0 - NotNullable - - Col175 - - - - Col175 - - 11 - - - - - - - Col176 - 176 - - 4 - 11 - 0 - NotNullable - - Col176 - - - - Col176 - - 11 - - - - - - - Col177 - 177 - - 4 - 11 - 0 - NotNullable - - Col177 - - - - Col177 - - 11 - - - - - - - Col178 - 178 - - 4 - 11 - 0 - NotNullable - - Col178 - - - - Col178 - - 11 - - - - - - - Col179 - 179 - - 4 - 11 - 0 - NotNullable - - Col179 - - - - Col179 - - 11 - - - - - - - Col180 - 180 - - 4 - 11 - 0 - NotNullable - - Col180 - - - - Col180 - - 11 - - - - - - - Col181 - 181 - - 4 - 11 - 0 - NotNullable - - Col181 - - - - Col181 - - 11 - - - - - - - Col182 - 182 - - 4 - 11 - 0 - NotNullable - - Col182 - - - - Col182 - - 11 - - - - - - - Col183 - 183 - - 4 - 11 - 0 - NotNullable - - Col183 - - - - Col183 - - 11 - - - - - - - Col184 - 184 - - 4 - 11 - 0 - NotNullable - - Col184 - - - - Col184 - - 11 - - - - - - - Col185 - 185 - - 4 - 11 - 0 - NotNullable - - Col185 - - - - Col185 - - 11 - - - - - - - Col186 - 186 - - 4 - 11 - 0 - NotNullable - - Col186 - - - - Col186 - - 11 - - - - - - - Col187 - 187 - - 4 - 11 - 0 - NotNullable - - Col187 - - - - Col187 - - 11 - - - - - - - Col188 - 188 - - 4 - 11 - 0 - NotNullable - - Col188 - - - - Col188 - - 11 - - - - - - - Col189 - 189 - - 4 - 11 - 0 - NotNullable - - Col189 - - - - Col189 - - 11 - - - - - - - Col190 - 190 - - 4 - 11 - 0 - NotNullable - - Col190 - - - - Col190 - - 11 - - - - - - - Col191 - 191 - - 4 - 11 - 0 - NotNullable - - Col191 - - - - Col191 - - 11 - - - - - - - Col192 - 192 - - 4 - 11 - 0 - NotNullable - - Col192 - - - - Col192 - - 11 - - - - - - - Col193 - 193 - - 4 - 11 - 0 - NotNullable - - Col193 - - - - Col193 - - 11 - - - - - - - Col194 - 194 - - 4 - 11 - 0 - NotNullable - - Col194 - - - - Col194 - - 11 - - - - - - - Col195 - 195 - - 4 - 11 - 0 - NotNullable - - Col195 - - - - Col195 - - 11 - - - - - - - Col196 - 196 - - 4 - 11 - 0 - NotNullable - - Col196 - - - - Col196 - - 11 - - - - - - - Col197 - 197 - - 4 - 11 - 0 - NotNullable - - Col197 - - - - Col197 - - 11 - - - - - - - Col198 - 198 - - 4 - 11 - 0 - NotNullable - - Col198 - - - - Col198 - - 11 - - - - - - - Col199 - 199 - - 4 - 11 - 0 - NotNullable - - Col199 - - - - Col199 - - 11 - - - - - - - Col200 - 200 - - 4 - 11 - 0 - NotNullable - - Col200 - - - - Col200 - - 11 - - - - - - - Col201 - 201 - - 4 - 11 - 0 - NotNullable - - Col201 - - - - Col201 - - 11 - - - - - - - Col202 - 202 - - 4 - 11 - 0 - NotNullable - - Col202 - - - - Col202 - - 11 - - - - - - - Col203 - 203 - - 4 - 11 - 0 - NotNullable - - Col203 - - - - Col203 - - 11 - - - - - - - Col204 - 204 - - 4 - 11 - 0 - NotNullable - - Col204 - - - - Col204 - - 11 - - - - - - - Col205 - 205 - - 4 - 11 - 0 - NotNullable - - Col205 - - - - Col205 - - 11 - - - - - - - Col206 - 206 - - 4 - 11 - 0 - NotNullable - - Col206 - - - - Col206 - - 11 - - - - - - - Col207 - 207 - - 4 - 11 - 0 - NotNullable - - Col207 - - - - Col207 - - 11 - - - - - - - Col208 - 208 - - 4 - 11 - 0 - NotNullable - - Col208 - - - - Col208 - - 11 - - - - - - - Col209 - 209 - - 4 - 11 - 0 - NotNullable - - Col209 - - - - Col209 - - 11 - - - - - - - Col210 - 210 - - 4 - 11 - 0 - NotNullable - - Col210 - - - - Col210 - - 11 - - - - - - - Col211 - 211 - - 4 - 11 - 0 - NotNullable - - Col211 - - - - Col211 - - 11 - - - - - - - Col212 - 212 - - 4 - 11 - 0 - NotNullable - - Col212 - - - - Col212 - - 11 - - - - - - - Col213 - 213 - - 4 - 11 - 0 - NotNullable - - Col213 - - - - Col213 - - 11 - - - - - - - Col214 - 214 - - 4 - 11 - 0 - NotNullable - - Col214 - - - - Col214 - - 11 - - - - - - - Col215 - 215 - - 4 - 11 - 0 - NotNullable - - Col215 - - - - Col215 - - 11 - - - - - - - Col216 - 216 - - 4 - 11 - 0 - NotNullable - - Col216 - - - - Col216 - - 11 - - - - - - - Col217 - 217 - - 4 - 11 - 0 - NotNullable - - Col217 - - - - Col217 - - 11 - - - - - - - Col218 - 218 - - 4 - 11 - 0 - NotNullable - - Col218 - - - - Col218 - - 11 - - - - - - - Col219 - 219 - - 4 - 11 - 0 - NotNullable - - Col219 - - - - Col219 - - 11 - - - - - - - Col220 - 220 - - 4 - 11 - 0 - NotNullable - - Col220 - - - - Col220 - - 11 - - - - - - - Col221 - 221 - - 4 - 11 - 0 - NotNullable - - Col221 - - - - Col221 - - 11 - - - - - - - Col222 - 222 - - 4 - 11 - 0 - NotNullable - - Col222 - - - - Col222 - - 11 - - - - - - - Col223 - 223 - - 4 - 11 - 0 - NotNullable - - Col223 - - - - Col223 - - 11 - - - - - - - Col224 - 224 - - 4 - 11 - 0 - NotNullable - - Col224 - - - - Col224 - - 11 - - - - - - - Col225 - 225 - - 4 - 11 - 0 - NotNullable - - Col225 - - - - Col225 - - 11 - - - - - - - Col226 - 226 - - 4 - 11 - 0 - NotNullable - - Col226 - - - - Col226 - - 11 - - - - - - - Col227 - 227 - - 4 - 11 - 0 - NotNullable - - Col227 - - - - Col227 - - 11 - - - - - - - Col228 - 228 - - 4 - 11 - 0 - NotNullable - - Col228 - - - - Col228 - - 11 - - - - - - - Col229 - 229 - - 4 - 11 - 0 - NotNullable - - Col229 - - - - Col229 - - 11 - - - - - - - Col230 - 230 - - 4 - 11 - 0 - NotNullable - - Col230 - - - - Col230 - - 11 - - - - - - - Col231 - 231 - - 4 - 11 - 0 - NotNullable - - Col231 - - - - Col231 - - 11 - - - - - - - Col232 - 232 - - 4 - 11 - 0 - NotNullable - - Col232 - - - - Col232 - - 11 - - - - - - - Col233 - 233 - - 4 - 11 - 0 - NotNullable - - Col233 - - - - Col233 - - 11 - - - - - - - Col234 - 234 - - 4 - 11 - 0 - NotNullable - - Col234 - - - - Col234 - - 11 - - - - - - - Col235 - 235 - - 4 - 11 - 0 - NotNullable - - Col235 - - - - Col235 - - 11 - - - - - - - Col236 - 236 - - 4 - 11 - 0 - NotNullable - - Col236 - - - - Col236 - - 11 - - - - - - - Col237 - 237 - - 4 - 11 - 0 - NotNullable - - Col237 - - - - Col237 - - 11 - - - - - - - Col238 - 238 - - 4 - 11 - 0 - NotNullable - - Col238 - - - - Col238 - - 11 - - - - - - - Col239 - 239 - - 4 - 11 - 0 - NotNullable - - Col239 - - - - Col239 - - 11 - - - - - - - Col240 - 240 - - 4 - 11 - 0 - NotNullable - - Col240 - - - - Col240 - - 11 - - - - - - - Col241 - 241 - - 4 - 11 - 0 - NotNullable - - Col241 - - - - Col241 - - 11 - - - - - - - Col242 - 242 - - 4 - 11 - 0 - NotNullable - - Col242 - - - - Col242 - - 11 - - - - - - - Col243 - 243 - - 4 - 11 - 0 - NotNullable - - Col243 - - - - Col243 - - 11 - - - - - - - Col244 - 244 - - 4 - 11 - 0 - NotNullable - - Col244 - - - - Col244 - - 11 - - - - - - - Col245 - 245 - - 4 - 11 - 0 - NotNullable - - Col245 - - - - Col245 - - 11 - - - - - - - Col246 - 246 - - 4 - 11 - 0 - NotNullable - - Col246 - - - - Col246 - - 11 - - - - - - - Col247 - 247 - - 4 - 11 - 0 - NotNullable - - Col247 - - - - Col247 - - 11 - - - - - - - Col248 - 248 - - 4 - 11 - 0 - NotNullable - - Col248 - - - - Col248 - - 11 - - - - - - - Col249 - 249 - - 4 - 11 - 0 - NotNullable - - Col249 - - - - Col249 - - 11 - - - - - - - Col250 - 250 - - 4 - 11 - 0 - NotNullable - - Col250 - - - - Col250 - - 11 - - - - - - - Col251 - 251 - - 4 - 11 - 0 - NotNullable - - Col251 - - - - Col251 - - 11 - - - - - - - Col252 - 252 - - 4 - 11 - 0 - NotNullable - - Col252 - - - - Col252 - - 11 - - - - - - - Col253 - 253 - - 4 - 11 - 0 - NotNullable - - Col253 - - - - Col253 - - 11 - - - - - - - Col254 - 254 - - 4 - 11 - 0 - NotNullable - - Col254 - - - - Col254 - - 11 - - - - - - - Col255 - 255 - - 4 - 11 - 0 - NotNullable - - Col255 - - - - Col255 - - 11 - - - - - - - Col256 - 256 - - 4 - 11 - 0 - NotNullable - - Col256 - - - - Col256 - - 11 - - - - - - - Col257 - 257 - - 4 - 11 - 0 - NotNullable - - Col257 - - - - Col257 - - 11 - - - - - - - Col258 - 258 - - 4 - 11 - 0 - NotNullable - - Col258 - - - - Col258 - - 11 - - - - - - - Col259 - 259 - - 4 - 11 - 0 - NotNullable - - Col259 - - - - Col259 - - 11 - - - - - - - Col260 - 260 - - 4 - 11 - 0 - NotNullable - - Col260 - - - - Col260 - - 11 - - - - - - - Col261 - 261 - - 4 - 11 - 0 - NotNullable - - Col261 - - - - Col261 - - 11 - - - - - - - Col262 - 262 - - 4 - 11 - 0 - NotNullable - - Col262 - - - - Col262 - - 11 - - - - - - - Col263 - 263 - - 4 - 11 - 0 - NotNullable - - Col263 - - - - Col263 - - 11 - - - - - - - Col264 - 264 - - 4 - 11 - 0 - NotNullable - - Col264 - - - - Col264 - - 11 - - - - - - - Col265 - 265 - - 4 - 11 - 0 - NotNullable - - Col265 - - - - Col265 - - 11 - - - - - - - Col266 - 266 - - 4 - 11 - 0 - NotNullable - - Col266 - - - - Col266 - - 11 - - - - - - - Col267 - 267 - - 4 - 11 - 0 - NotNullable - - Col267 - - - - Col267 - - 11 - - - - - - - Col268 - 268 - - 4 - 11 - 0 - NotNullable - - Col268 - - - - Col268 - - 11 - - - - - - - Col269 - 269 - - 4 - 11 - 0 - NotNullable - - Col269 - - - - Col269 - - 11 - - - - - - - Col270 - 270 - - 4 - 11 - 0 - NotNullable - - Col270 - - - - Col270 - - 11 - - - - - - - Col271 - 271 - - 4 - 11 - 0 - NotNullable - - Col271 - - - - Col271 - - 11 - - - - - - - Col272 - 272 - - 4 - 11 - 0 - NotNullable - - Col272 - - - - Col272 - - 11 - - - - - - - Col273 - 273 - - 4 - 11 - 0 - NotNullable - - Col273 - - - - Col273 - - 11 - - - - - - - Col274 - 274 - - 4 - 11 - 0 - NotNullable - - Col274 - - - - Col274 - - 11 - - - - - - - Col275 - 275 - - 4 - 11 - 0 - NotNullable - - Col275 - - - - Col275 - - 11 - - - - - - - Col276 - 276 - - 4 - 11 - 0 - NotNullable - - Col276 - - - - Col276 - - 11 - - - - - - - Col277 - 277 - - 4 - 11 - 0 - NotNullable - - Col277 - - - - Col277 - - 11 - - - - - - - Col278 - 278 - - 4 - 11 - 0 - NotNullable - - Col278 - - - - Col278 - - 11 - - - - - - - Col279 - 279 - - 4 - 11 - 0 - NotNullable - - Col279 - - - - Col279 - - 11 - - - - - - - Col280 - 280 - - 4 - 11 - 0 - NotNullable - - Col280 - - - - Col280 - - 11 - - - - - - - Col281 - 281 - - 4 - 11 - 0 - NotNullable - - Col281 - - - - Col281 - - 11 - - - - - - - Col282 - 282 - - 4 - 11 - 0 - NotNullable - - Col282 - - - - Col282 - - 11 - - - - - - - Col283 - 283 - - 4 - 11 - 0 - NotNullable - - Col283 - - - - Col283 - - 11 - - - - - - - Col284 - 284 - - 4 - 11 - 0 - NotNullable - - Col284 - - - - Col284 - - 11 - - - - - - - Col285 - 285 - - 4 - 11 - 0 - NotNullable - - Col285 - - - - Col285 - - 11 - - - - - - - Col286 - 286 - - 4 - 11 - 0 - NotNullable - - Col286 - - - - Col286 - - 11 - - - - - - - Col287 - 287 - - 4 - 11 - 0 - NotNullable - - Col287 - - - - Col287 - - 11 - - - - - - - Col288 - 288 - - 4 - 11 - 0 - NotNullable - - Col288 - - - - Col288 - - 11 - - - - - - - Col289 - 289 - - 4 - 11 - 0 - NotNullable - - Col289 - - - - Col289 - - 11 - - - - - - - Col290 - 290 - - 4 - 11 - 0 - NotNullable - - Col290 - - - - Col290 - - 11 - - - - - - - Col291 - 291 - - 4 - 11 - 0 - NotNullable - - Col291 - - - - Col291 - - 11 - - - - - - - Col292 - 292 - - 4 - 11 - 0 - NotNullable - - Col292 - - - - Col292 - - 11 - - - - - - - Col293 - 293 - - 4 - 11 - 0 - NotNullable - - Col293 - - - - Col293 - - 11 - - - - - - - Col294 - 294 - - 4 - 11 - 0 - NotNullable - - Col294 - - - - Col294 - - 11 - - - - - - - Col295 - 295 - - 4 - 11 - 0 - NotNullable - - Col295 - - - - Col295 - - 11 - - - - - - - Col296 - 296 - - 4 - 11 - 0 - NotNullable - - Col296 - - - - Col296 - - 11 - - - - - - - Col297 - 297 - - 4 - 11 - 0 - NotNullable - - Col297 - - - - Col297 - - 11 - - - - - - - Col298 - 298 - - 4 - 11 - 0 - NotNullable - - Col298 - - - - Col298 - - 11 - - - - - - - Col299 - 299 - - 4 - 11 - 0 - NotNullable - - Col299 - - - - Col299 - - 11 - - - - - - - Col300 - 300 - - 4 - 11 - 0 - NotNullable - - Col300 - - - - Col300 - - 11 - - - - - - - Col301 - 301 - - 4 - 11 - 0 - NotNullable - - Col301 - - - - Col301 - - 11 - - - - - - - Col302 - 302 - - 4 - 11 - 0 - NotNullable - - Col302 - - - - Col302 - - 11 - - - - - - - Col303 - 303 - - 4 - 11 - 0 - NotNullable - - Col303 - - - - Col303 - - 11 - - - - - - - Col304 - 304 - - 4 - 11 - 0 - NotNullable - - Col304 - - - - Col304 - - 11 - - - - - - - Col305 - 305 - - 4 - 11 - 0 - NotNullable - - Col305 - - - - Col305 - - 11 - - - - - - - Col306 - 306 - - 4 - 11 - 0 - NotNullable - - Col306 - - - - Col306 - - 11 - - - - - - - Col307 - 307 - - 4 - 11 - 0 - NotNullable - - Col307 - - - - Col307 - - 11 - - - - - - - Col308 - 308 - - 4 - 11 - 0 - NotNullable - - Col308 - - - - Col308 - - 11 - - - - - - - Col309 - 309 - - 4 - 11 - 0 - NotNullable - - Col309 - - - - Col309 - - 11 - - - - - - - Col310 - 310 - - 4 - 11 - 0 - NotNullable - - Col310 - - - - Col310 - - 11 - - - - - - - Col311 - 311 - - 4 - 11 - 0 - NotNullable - - Col311 - - - - Col311 - - 11 - - - - - - - Col312 - 312 - - 4 - 11 - 0 - NotNullable - - Col312 - - - - Col312 - - 11 - - - - - - - Col313 - 313 - - 4 - 11 - 0 - NotNullable - - Col313 - - - - Col313 - - 11 - - - - - - - Col314 - 314 - - 4 - 11 - 0 - NotNullable - - Col314 - - - - Col314 - - 11 - - - - - - - Col315 - 315 - - 4 - 11 - 0 - NotNullable - - Col315 - - - - Col315 - - 11 - - - - - - - Col316 - 316 - - 4 - 11 - 0 - NotNullable - - Col316 - - - - Col316 - - 11 - - - - - - - Col317 - 317 - - 4 - 11 - 0 - NotNullable - - Col317 - - - - Col317 - - 11 - - - - - - - Col318 - 318 - - 4 - 11 - 0 - NotNullable - - Col318 - - - - Col318 - - 11 - - - - - - - Col319 - 319 - - 4 - 11 - 0 - NotNullable - - Col319 - - - - Col319 - - 11 - - - - - - - Col320 - 320 - - 4 - 11 - 0 - NotNullable - - Col320 - - - - Col320 - - 11 - - - - - - - Col321 - 321 - - 4 - 11 - 0 - NotNullable - - Col321 - - - - Col321 - - 11 - - - - - - - Col322 - 322 - - 4 - 11 - 0 - NotNullable - - Col322 - - - - Col322 - - 11 - - - - - - - Col323 - 323 - - 4 - 11 - 0 - NotNullable - - Col323 - - - - Col323 - - 11 - - - - - - - Col324 - 324 - - 4 - 11 - 0 - NotNullable - - Col324 - - - - Col324 - - 11 - - - - - - - Col325 - 325 - - 4 - 11 - 0 - NotNullable - - Col325 - - - - Col325 - - 11 - - - - - - - Col326 - 326 - - 4 - 11 - 0 - NotNullable - - Col326 - - - - Col326 - - 11 - - - - - - - Col327 - 327 - - 4 - 11 - 0 - NotNullable - - Col327 - - - - Col327 - - 11 - - - - - - - Col328 - 328 - - 4 - 11 - 0 - NotNullable - - Col328 - - - - Col328 - - 11 - - - - - - - Col329 - 329 - - 4 - 11 - 0 - NotNullable - - Col329 - - - - Col329 - - 11 - - - - - - - Col330 - 330 - - 4 - 11 - 0 - NotNullable - - Col330 - - - - Col330 - - 11 - - - - - - - Col331 - 331 - - 4 - 11 - 0 - NotNullable - - Col331 - - - - Col331 - - 11 - - - - - - - Col332 - 332 - - 4 - 11 - 0 - NotNullable - - Col332 - - - - Col332 - - 11 - - - - - - - Col333 - 333 - - 4 - 11 - 0 - NotNullable - - Col333 - - - - Col333 - - 11 - - - - - - - Col334 - 334 - - 4 - 11 - 0 - NotNullable - - Col334 - - - - Col334 - - 11 - - - - - - - Col335 - 335 - - 4 - 11 - 0 - NotNullable - - Col335 - - - - Col335 - - 11 - - - - - - - Col336 - 336 - - 4 - 11 - 0 - NotNullable - - Col336 - - - - Col336 - - 11 - - - - - - - Col337 - 337 - - 4 - 11 - 0 - NotNullable - - Col337 - - - - Col337 - - 11 - - - - - - - Col338 - 338 - - 4 - 11 - 0 - NotNullable - - Col338 - - - - Col338 - - 11 - - - - - - - Col339 - 339 - - 4 - 11 - 0 - NotNullable - - Col339 - - - - Col339 - - 11 - - - - - - - Col340 - 340 - - 4 - 11 - 0 - NotNullable - - Col340 - - - - Col340 - - 11 - - - - - - - Col341 - 341 - - 4 - 11 - 0 - NotNullable - - Col341 - - - - Col341 - - 11 - - - - - - - Col342 - 342 - - 4 - 11 - 0 - NotNullable - - Col342 - - - - Col342 - - 11 - - - - - - - Col343 - 343 - - 4 - 11 - 0 - NotNullable - - Col343 - - - - Col343 - - 11 - - - - - - - Col344 - 344 - - 4 - 11 - 0 - NotNullable - - Col344 - - - - Col344 - - 11 - - - - - - - Col345 - 345 - - 4 - 11 - 0 - NotNullable - - Col345 - - - - Col345 - - 11 - - - - - - - Col346 - 346 - - 4 - 11 - 0 - NotNullable - - Col346 - - - - Col346 - - 11 - - - - - - - Col347 - 347 - - 4 - 11 - 0 - NotNullable - - Col347 - - - - Col347 - - 11 - - - - - - - Col348 - 348 - - 4 - 11 - 0 - NotNullable - - Col348 - - - - Col348 - - 11 - - - - - - - Col349 - 349 - - 4 - 11 - 0 - NotNullable - - Col349 - - - - Col349 - - 11 - - - - - - - Col350 - 350 - - 4 - 11 - 0 - NotNullable - - Col350 - - - - Col350 - - 11 - - - - - - - Col351 - 351 - - 4 - 11 - 0 - NotNullable - - Col351 - - - - Col351 - - 11 - - - - - - - Col352 - 352 - - 4 - 11 - 0 - NotNullable - - Col352 - - - - Col352 - - 11 - - - - - - - Col353 - 353 - - 4 - 11 - 0 - NotNullable - - Col353 - - - - Col353 - - 11 - - - - - - - Col354 - 354 - - 4 - 11 - 0 - NotNullable - - Col354 - - - - Col354 - - 11 - - - - - - - Col355 - 355 - - 4 - 11 - 0 - NotNullable - - Col355 - - - - Col355 - - 11 - - - - - - - Col356 - 356 - - 4 - 11 - 0 - NotNullable - - Col356 - - - - Col356 - - 11 - - - - - - - Col357 - 357 - - 4 - 11 - 0 - NotNullable - - Col357 - - - - Col357 - - 11 - - - - - - - Col358 - 358 - - 4 - 11 - 0 - NotNullable - - Col358 - - - - Col358 - - 11 - - - - - - - Col359 - 359 - - 4 - 11 - 0 - NotNullable - - Col359 - - - - Col359 - - 11 - - - - - - - Col360 - 360 - - 4 - 11 - 0 - NotNullable - - Col360 - - - - Col360 - - 11 - - - - - - - Col361 - 361 - - 4 - 11 - 0 - NotNullable - - Col361 - - - - Col361 - - 11 - - - - - - - Col362 - 362 - - 4 - 11 - 0 - NotNullable - - Col362 - - - - Col362 - - 11 - - - - - - - Col363 - 363 - - 4 - 11 - 0 - NotNullable - - Col363 - - - - Col363 - - 11 - - - - - - - Col364 - 364 - - 4 - 11 - 0 - NotNullable - - Col364 - - - - Col364 - - 11 - - - - - - - Col365 - 365 - - 4 - 11 - 0 - NotNullable - - Col365 - - - - Col365 - - 11 - - - - - - - Col366 - 366 - - 4 - 11 - 0 - NotNullable - - Col366 - - - - Col366 - - 11 - - - - - - - Col367 - 367 - - 4 - 11 - 0 - NotNullable - - Col367 - - - - Col367 - - 11 - - - - - - - Col368 - 368 - - 4 - 11 - 0 - NotNullable - - Col368 - - - - Col368 - - 11 - - - - - - - Col369 - 369 - - 4 - 11 - 0 - NotNullable - - Col369 - - - - Col369 - - 11 - - - - - - - Col370 - 370 - - 4 - 11 - 0 - NotNullable - - Col370 - - - - Col370 - - 11 - - - - - - - Col371 - 371 - - 4 - 11 - 0 - NotNullable - - Col371 - - - - Col371 - - 11 - - - - - - - Col372 - 372 - - 4 - 11 - 0 - NotNullable - - Col372 - - - - Col372 - - 11 - - - - - - - Col373 - 373 - - 4 - 11 - 0 - NotNullable - - Col373 - - - - Col373 - - 11 - - - - - - - Col374 - 374 - - 4 - 11 - 0 - NotNullable - - Col374 - - - - Col374 - - 11 - - - - - - - Col375 - 375 - - 4 - 11 - 0 - NotNullable - - Col375 - - - - Col375 - - 11 - - - - - - - Col376 - 376 - - 4 - 11 - 0 - NotNullable - - Col376 - - - - Col376 - - 11 - - - - - - - Col377 - 377 - - 4 - 11 - 0 - NotNullable - - Col377 - - - - Col377 - - 11 - - - - - - - Col378 - 378 - - 4 - 11 - 0 - NotNullable - - Col378 - - - - Col378 - - 11 - - - - - - - Col379 - 379 - - 4 - 11 - 0 - NotNullable - - Col379 - - - - Col379 - - 11 - - - - - - - Col380 - 380 - - 4 - 11 - 0 - NotNullable - - Col380 - - - - Col380 - - 11 - - - - - - - Col381 - 381 - - 4 - 11 - 0 - NotNullable - - Col381 - - - - Col381 - - 11 - - - - - - - Col382 - 382 - - 4 - 11 - 0 - NotNullable - - Col382 - - - - Col382 - - 11 - - - - - - - Col383 - 383 - - 4 - 11 - 0 - NotNullable - - Col383 - - - - Col383 - - 11 - - - - - - - Col384 - 384 - - 4 - 11 - 0 - NotNullable - - Col384 - - - - Col384 - - 11 - - - - - - - Col385 - 385 - - 4 - 11 - 0 - NotNullable - - Col385 - - - - Col385 - - 11 - - - - - - - Col386 - 386 - - 4 - 11 - 0 - NotNullable - - Col386 - - - - Col386 - - 11 - - - - - - - Col387 - 387 - - 4 - 11 - 0 - NotNullable - - Col387 - - - - Col387 - - 11 - - - - - - - Col388 - 388 - - 4 - 11 - 0 - NotNullable - - Col388 - - - - Col388 - - 11 - - - - - - - Col389 - 389 - - 4 - 11 - 0 - NotNullable - - Col389 - - - - Col389 - - 11 - - - - - - - Col390 - 390 - - 4 - 11 - 0 - NotNullable - - Col390 - - - - Col390 - - 11 - - - - - - - Col391 - 391 - - 4 - 11 - 0 - NotNullable - - Col391 - - - - Col391 - - 11 - - - - - - - Col392 - 392 - - 4 - 11 - 0 - NotNullable - - Col392 - - - - Col392 - - 11 - - - - - - - Col393 - 393 - - 4 - 11 - 0 - NotNullable - - Col393 - - - - Col393 - - 11 - - - - - - - Col394 - 394 - - 4 - 11 - 0 - NotNullable - - Col394 - - - - Col394 - - 11 - - - - - - - Col395 - 395 - - 4 - 11 - 0 - NotNullable - - Col395 - - - - Col395 - - 11 - - - - - - - Col396 - 396 - - 4 - 11 - 0 - NotNullable - - Col396 - - - - Col396 - - 11 - - - - - - - Col397 - 397 - - 4 - 11 - 0 - NotNullable - - Col397 - - - - Col397 - - 11 - - - - - - - Col398 - 398 - - 4 - 11 - 0 - NotNullable - - Col398 - - - - Col398 - - 11 - - - - - - - Col399 - 399 - - 4 - 11 - 0 - NotNullable - - Col399 - - - - Col399 - - 11 - - - - - - - Col400 - 400 - - 4 - 11 - 0 - NotNullable - - Col400 - - - - Col400 - - 11 - - - - - - - Col401 - 401 - - 4 - 11 - 0 - NotNullable - - Col401 - - - - Col401 - - 11 - - - - - - - Col402 - 402 - - 4 - 11 - 0 - NotNullable - - Col402 - - - - Col402 - - 11 - - - - - - - Col403 - 403 - - 4 - 11 - 0 - NotNullable - - Col403 - - - - Col403 - - 11 - - - - - - - Col404 - 404 - - 4 - 11 - 0 - NotNullable - - Col404 - - - - Col404 - - 11 - - - - - - - Col405 - 405 - - 4 - 11 - 0 - NotNullable - - Col405 - - - - Col405 - - 11 - - - - - - - Col406 - 406 - - 4 - 11 - 0 - NotNullable - - Col406 - - - - Col406 - - 11 - - - - - - - Col407 - 407 - - 4 - 11 - 0 - NotNullable - - Col407 - - - - Col407 - - 11 - - - - - - - Col408 - 408 - - 4 - 11 - 0 - NotNullable - - Col408 - - - - Col408 - - 11 - - - - - - - Col409 - 409 - - 4 - 11 - 0 - NotNullable - - Col409 - - - - Col409 - - 11 - - - - - - - Col410 - 410 - - 4 - 11 - 0 - NotNullable - - Col410 - - - - Col410 - - 11 - - - - - - - Col411 - 411 - - 4 - 11 - 0 - NotNullable - - Col411 - - - - Col411 - - 11 - - - - - - - Col412 - 412 - - 4 - 11 - 0 - NotNullable - - Col412 - - - - Col412 - - 11 - - - - - - - Col413 - 413 - - 4 - 11 - 0 - NotNullable - - Col413 - - - - Col413 - - 11 - - - - - - - Col414 - 414 - - 4 - 11 - 0 - NotNullable - - Col414 - - - - Col414 - - 11 - - - - - - - Col415 - 415 - - 4 - 11 - 0 - NotNullable - - Col415 - - - - Col415 - - 11 - - - - - - - Col416 - 416 - - 4 - 11 - 0 - NotNullable - - Col416 - - - - Col416 - - 11 - - - - - - - Col417 - 417 - - 4 - 11 - 0 - NotNullable - - Col417 - - - - Col417 - - 11 - - - - - - - Col418 - 418 - - 4 - 11 - 0 - NotNullable - - Col418 - - - - Col418 - - 11 - - - - - - - Col419 - 419 - - 4 - 11 - 0 - NotNullable - - Col419 - - - - Col419 - - 11 - - - - - - - Col420 - 420 - - 4 - 11 - 0 - NotNullable - - Col420 - - - - Col420 - - 11 - - - - - - - Col421 - 421 - - 4 - 11 - 0 - NotNullable - - Col421 - - - - Col421 - - 11 - - - - - - - Col422 - 422 - - 4 - 11 - 0 - NotNullable - - Col422 - - - - Col422 - - 11 - - - - - - - Col423 - 423 - - 4 - 11 - 0 - NotNullable - - Col423 - - - - Col423 - - 11 - - - - - - - Col424 - 424 - - 4 - 11 - 0 - NotNullable - - Col424 - - - - Col424 - - 11 - - - - - - - Col425 - 425 - - 4 - 11 - 0 - NotNullable - - Col425 - - - - Col425 - - 11 - - - - - - - Col426 - 426 - - 4 - 11 - 0 - NotNullable - - Col426 - - - - Col426 - - 11 - - - - - - - Col427 - 427 - - 4 - 11 - 0 - NotNullable - - Col427 - - - - Col427 - - 11 - - - - - - - Col428 - 428 - - 4 - 11 - 0 - NotNullable - - Col428 - - - - Col428 - - 11 - - - - - - - Col429 - 429 - - 4 - 11 - 0 - NotNullable - - Col429 - - - - Col429 - - 11 - - - - - - - Col430 - 430 - - 4 - 11 - 0 - NotNullable - - Col430 - - - - Col430 - - 11 - - - - - - - Col431 - 431 - - 4 - 11 - 0 - NotNullable - - Col431 - - - - Col431 - - 11 - - - - - - - Col432 - 432 - - 4 - 11 - 0 - NotNullable - - Col432 - - - - Col432 - - 11 - - - - - - - Col433 - 433 - - 4 - 11 - 0 - NotNullable - - Col433 - - - - Col433 - - 11 - - - - - - - Col434 - 434 - - 4 - 11 - 0 - NotNullable - - Col434 - - - - Col434 - - 11 - - - - - - - Col435 - 435 - - 4 - 11 - 0 - NotNullable - - Col435 - - - - Col435 - - 11 - - - - - - - Col436 - 436 - - 4 - 11 - 0 - NotNullable - - Col436 - - - - Col436 - - 11 - - - - - - - Col437 - 437 - - 4 - 11 - 0 - NotNullable - - Col437 - - - - Col437 - - 11 - - - - - - - Col438 - 438 - - 4 - 11 - 0 - NotNullable - - Col438 - - - - Col438 - - 11 - - - - - - - Col439 - 439 - - 4 - 11 - 0 - NotNullable - - Col439 - - - - Col439 - - 11 - - - - - - - Col440 - 440 - - 4 - 11 - 0 - NotNullable - - Col440 - - - - Col440 - - 11 - - - - - - - Col441 - 441 - - 4 - 11 - 0 - NotNullable - - Col441 - - - - Col441 - - 11 - - - - - - - Col442 - 442 - - 4 - 11 - 0 - NotNullable - - Col442 - - - - Col442 - - 11 - - - - - - - Col443 - 443 - - 4 - 11 - 0 - NotNullable - - Col443 - - - - Col443 - - 11 - - - - - - - Col444 - 444 - - 4 - 11 - 0 - NotNullable - - Col444 - - - - Col444 - - 11 - - - - - - - Col445 - 445 - - 4 - 11 - 0 - NotNullable - - Col445 - - - - Col445 - - 11 - - - - - - - Col446 - 446 - - 4 - 11 - 0 - NotNullable - - Col446 - - - - Col446 - - 11 - - - - - - - Col447 - 447 - - 4 - 11 - 0 - NotNullable - - Col447 - - - - Col447 - - 11 - - - - - - - Col448 - 448 - - 4 - 11 - 0 - NotNullable - - Col448 - - - - Col448 - - 11 - - - - - - - Col449 - 449 - - 4 - 11 - 0 - NotNullable - - Col449 - - - - Col449 - - 11 - - - - - - - Col450 - 450 - - 4 - 11 - 0 - NotNullable - - Col450 - - - - Col450 - - 11 - - - - - - - Col451 - 451 - - 4 - 11 - 0 - NotNullable - - Col451 - - - - Col451 - - 11 - - - - - - - Col452 - 452 - - 4 - 11 - 0 - NotNullable - - Col452 - - - - Col452 - - 11 - - - - - - - Col453 - 453 - - 4 - 11 - 0 - NotNullable - - Col453 - - - - Col453 - - 11 - - - - - - - Col454 - 454 - - 4 - 11 - 0 - NotNullable - - Col454 - - - - Col454 - - 11 - - - - - - - Col455 - 455 - - 4 - 11 - 0 - NotNullable - - Col455 - - - - Col455 - - 11 - - - - - - - Col456 - 456 - - 4 - 11 - 0 - NotNullable - - Col456 - - - - Col456 - - 11 - - - - - - - Col457 - 457 - - 4 - 11 - 0 - NotNullable - - Col457 - - - - Col457 - - 11 - - - - - - - Col458 - 458 - - 4 - 11 - 0 - NotNullable - - Col458 - - - - Col458 - - 11 - - - - - - - Col459 - 459 - - 4 - 11 - 0 - NotNullable - - Col459 - - - - Col459 - - 11 - - - - - - - Col460 - 460 - - 4 - 11 - 0 - NotNullable - - Col460 - - - - Col460 - - 11 - - - - - - - Col461 - 461 - - 4 - 11 - 0 - NotNullable - - Col461 - - - - Col461 - - 11 - - - - - - - Col462 - 462 - - 4 - 11 - 0 - NotNullable - - Col462 - - - - Col462 - - 11 - - - - - - - Col463 - 463 - - 4 - 11 - 0 - NotNullable - - Col463 - - - - Col463 - - 11 - - - - - - - Col464 - 464 - - 4 - 11 - 0 - NotNullable - - Col464 - - - - Col464 - - 11 - - - - - - - Col465 - 465 - - 4 - 11 - 0 - NotNullable - - Col465 - - - - Col465 - - 11 - - - - - - - Col466 - 466 - - 4 - 11 - 0 - NotNullable - - Col466 - - - - Col466 - - 11 - - - - - - - Col467 - 467 - - 4 - 11 - 0 - NotNullable - - Col467 - - - - Col467 - - 11 - - - - - - - Col468 - 468 - - 4 - 11 - 0 - NotNullable - - Col468 - - - - Col468 - - 11 - - - - - - - Col469 - 469 - - 4 - 11 - 0 - NotNullable - - Col469 - - - - Col469 - - 11 - - - - - - - Col470 - 470 - - 4 - 11 - 0 - NotNullable - - Col470 - - - - Col470 - - 11 - - - - - - - Col471 - 471 - - 4 - 11 - 0 - NotNullable - - Col471 - - - - Col471 - - 11 - - - - - - - Col472 - 472 - - 4 - 11 - 0 - NotNullable - - Col472 - - - - Col472 - - 11 - - - - - - - Col473 - 473 - - 4 - 11 - 0 - NotNullable - - Col473 - - - - Col473 - - 11 - - - - - - - Col474 - 474 - - 4 - 11 - 0 - NotNullable - - Col474 - - - - Col474 - - 11 - - - - - - - Col475 - 475 - - 4 - 11 - 0 - NotNullable - - Col475 - - - - Col475 - - 11 - - - - - - - Col476 - 476 - - 4 - 11 - 0 - NotNullable - - Col476 - - - - Col476 - - 11 - - - - - - - Col477 - 477 - - 4 - 11 - 0 - NotNullable - - Col477 - - - - Col477 - - 11 - - - - - - - Col478 - 478 - - 4 - 11 - 0 - NotNullable - - Col478 - - - - Col478 - - 11 - - - - - - - Col479 - 479 - - 4 - 11 - 0 - NotNullable - - Col479 - - - - Col479 - - 11 - - - - - - - Col480 - 480 - - 4 - 11 - 0 - NotNullable - - Col480 - - - - Col480 - - 11 - - - - - - - Col481 - 481 - - 4 - 11 - 0 - NotNullable - - Col481 - - - - Col481 - - 11 - - - - - - - Col482 - 482 - - 4 - 11 - 0 - NotNullable - - Col482 - - - - Col482 - - 11 - - - - - - - Col483 - 483 - - 4 - 11 - 0 - NotNullable - - Col483 - - - - Col483 - - 11 - - - - - - - Col484 - 484 - - 4 - 11 - 0 - NotNullable - - Col484 - - - - Col484 - - 11 - - - - - - - Col485 - 485 - - 4 - 11 - 0 - NotNullable - - Col485 - - - - Col485 - - 11 - - - - - - - Col486 - 486 - - 4 - 11 - 0 - NotNullable - - Col486 - - - - Col486 - - 11 - - - - - - - Col487 - 487 - - 4 - 11 - 0 - NotNullable - - Col487 - - - - Col487 - - 11 - - - - - - - Col488 - 488 - - 4 - 11 - 0 - NotNullable - - Col488 - - - - Col488 - - 11 - - - - - - - Col489 - 489 - - 4 - 11 - 0 - NotNullable - - Col489 - - - - Col489 - - 11 - - - - - - - Col490 - 490 - - 4 - 11 - 0 - NotNullable - - Col490 - - - - Col490 - - 11 - - - - - - - Col491 - 491 - - 4 - 11 - 0 - NotNullable - - Col491 - - - - Col491 - - 11 - - - - - - - Col492 - 492 - - 4 - 11 - 0 - NotNullable - - Col492 - - - - Col492 - - 11 - - - - - - - Col493 - 493 - - 4 - 11 - 0 - NotNullable - - Col493 - - - - Col493 - - 11 - - - - - - - Col494 - 494 - - 4 - 11 - 0 - NotNullable - - Col494 - - - - Col494 - - 11 - - - - - - - Col495 - 495 - - 4 - 11 - 0 - NotNullable - - Col495 - - - - Col495 - - 11 - - - - - - - Col496 - 496 - - 4 - 11 - 0 - NotNullable - - Col496 - - - - Col496 - - 11 - - - - - - - Col497 - 497 - - 4 - 11 - 0 - NotNullable - - Col497 - - - - Col497 - - 11 - - - - - - - Col498 - 498 - - 4 - 11 - 0 - NotNullable - - Col498 - - - - Col498 - - 11 - - - - - - - Col499 - 499 - - 4 - 11 - 0 - NotNullable - - Col499 - - - - Col499 - - 11 - - - - - - - Col500 - 500 - - 4 - 11 - 0 - NotNullable - - Col500 - - - - Col500 - - 11 - - - - - - - + + + 2.0 + + + + + + + Col1 + 1 + + 4 + 11 + 0 + NotNullable + + Col1 + + + + Col1 + + 11 + + + + + + + Col2 + 2 + + 4 + 11 + 0 + NotNullable + + Col2 + + + + Col2 + + 11 + + + + + + + Col3 + 3 + + 4 + 11 + 0 + NotNullable + + Col3 + + + + Col3 + + 11 + + + + + + + Col4 + 4 + + 4 + 11 + 0 + NotNullable + + Col4 + + + + Col4 + + 11 + + + + + + + Col5 + 5 + + 4 + 11 + 0 + NotNullable + + Col5 + + + + Col5 + + 11 + + + + + + + Col6 + 6 + + 4 + 11 + 0 + NotNullable + + Col6 + + + + Col6 + + 11 + + + + + + + Col7 + 7 + + 4 + 11 + 0 + NotNullable + + Col7 + + + + Col7 + + 11 + + + + + + + Col8 + 8 + + 4 + 11 + 0 + NotNullable + + Col8 + + + + Col8 + + 11 + + + + + + + Col9 + 9 + + 4 + 11 + 0 + NotNullable + + Col9 + + + + Col9 + + 11 + + + + + + + Col10 + 10 + + 4 + 11 + 0 + NotNullable + + Col10 + + + + Col10 + + 11 + + + + + + + Col11 + 11 + + 4 + 11 + 0 + NotNullable + + Col11 + + + + Col11 + + 11 + + + + + + + Col12 + 12 + + 4 + 11 + 0 + NotNullable + + Col12 + + + + Col12 + + 11 + + + + + + + Col13 + 13 + + 4 + 11 + 0 + NotNullable + + Col13 + + + + Col13 + + 11 + + + + + + + Col14 + 14 + + 4 + 11 + 0 + NotNullable + + Col14 + + + + Col14 + + 11 + + + + + + + Col15 + 15 + + 4 + 11 + 0 + NotNullable + + Col15 + + + + Col15 + + 11 + + + + + + + Col16 + 16 + + 4 + 11 + 0 + NotNullable + + Col16 + + + + Col16 + + 11 + + + + + + + Col17 + 17 + + 4 + 11 + 0 + NotNullable + + Col17 + + + + Col17 + + 11 + + + + + + + Col18 + 18 + + 4 + 11 + 0 + NotNullable + + Col18 + + + + Col18 + + 11 + + + + + + + Col19 + 19 + + 4 + 11 + 0 + NotNullable + + Col19 + + + + Col19 + + 11 + + + + + + + Col20 + 20 + + 4 + 11 + 0 + NotNullable + + Col20 + + + + Col20 + + 11 + + + + + + + Col21 + 21 + + 4 + 11 + 0 + NotNullable + + Col21 + + + + Col21 + + 11 + + + + + + + Col22 + 22 + + 4 + 11 + 0 + NotNullable + + Col22 + + + + Col22 + + 11 + + + + + + + Col23 + 23 + + 4 + 11 + 0 + NotNullable + + Col23 + + + + Col23 + + 11 + + + + + + + Col24 + 24 + + 4 + 11 + 0 + NotNullable + + Col24 + + + + Col24 + + 11 + + + + + + + Col25 + 25 + + 4 + 11 + 0 + NotNullable + + Col25 + + + + Col25 + + 11 + + + + + + + Col26 + 26 + + 4 + 11 + 0 + NotNullable + + Col26 + + + + Col26 + + 11 + + + + + + + Col27 + 27 + + 4 + 11 + 0 + NotNullable + + Col27 + + + + Col27 + + 11 + + + + + + + Col28 + 28 + + 4 + 11 + 0 + NotNullable + + Col28 + + + + Col28 + + 11 + + + + + + + Col29 + 29 + + 4 + 11 + 0 + NotNullable + + Col29 + + + + Col29 + + 11 + + + + + + + Col30 + 30 + + 4 + 11 + 0 + NotNullable + + Col30 + + + + Col30 + + 11 + + + + + + + Col31 + 31 + + 4 + 11 + 0 + NotNullable + + Col31 + + + + Col31 + + 11 + + + + + + + Col32 + 32 + + 4 + 11 + 0 + NotNullable + + Col32 + + + + Col32 + + 11 + + + + + + + Col33 + 33 + + 4 + 11 + 0 + NotNullable + + Col33 + + + + Col33 + + 11 + + + + + + + Col34 + 34 + + 4 + 11 + 0 + NotNullable + + Col34 + + + + Col34 + + 11 + + + + + + + Col35 + 35 + + 4 + 11 + 0 + NotNullable + + Col35 + + + + Col35 + + 11 + + + + + + + Col36 + 36 + + 4 + 11 + 0 + NotNullable + + Col36 + + + + Col36 + + 11 + + + + + + + Col37 + 37 + + 4 + 11 + 0 + NotNullable + + Col37 + + + + Col37 + + 11 + + + + + + + Col38 + 38 + + 4 + 11 + 0 + NotNullable + + Col38 + + + + Col38 + + 11 + + + + + + + Col39 + 39 + + 4 + 11 + 0 + NotNullable + + Col39 + + + + Col39 + + 11 + + + + + + + Col40 + 40 + + 4 + 11 + 0 + NotNullable + + Col40 + + + + Col40 + + 11 + + + + + + + Col41 + 41 + + 4 + 11 + 0 + NotNullable + + Col41 + + + + Col41 + + 11 + + + + + + + Col42 + 42 + + 4 + 11 + 0 + NotNullable + + Col42 + + + + Col42 + + 11 + + + + + + + Col43 + 43 + + 4 + 11 + 0 + NotNullable + + Col43 + + + + Col43 + + 11 + + + + + + + Col44 + 44 + + 4 + 11 + 0 + NotNullable + + Col44 + + + + Col44 + + 11 + + + + + + + Col45 + 45 + + 4 + 11 + 0 + NotNullable + + Col45 + + + + Col45 + + 11 + + + + + + + Col46 + 46 + + 4 + 11 + 0 + NotNullable + + Col46 + + + + Col46 + + 11 + + + + + + + Col47 + 47 + + 4 + 11 + 0 + NotNullable + + Col47 + + + + Col47 + + 11 + + + + + + + Col48 + 48 + + 4 + 11 + 0 + NotNullable + + Col48 + + + + Col48 + + 11 + + + + + + + Col49 + 49 + + 4 + 11 + 0 + NotNullable + + Col49 + + + + Col49 + + 11 + + + + + + + Col50 + 50 + + 4 + 11 + 0 + NotNullable + + Col50 + + + + Col50 + + 11 + + + + + + + Col51 + 51 + + 4 + 11 + 0 + NotNullable + + Col51 + + + + Col51 + + 11 + + + + + + + Col52 + 52 + + 4 + 11 + 0 + NotNullable + + Col52 + + + + Col52 + + 11 + + + + + + + Col53 + 53 + + 4 + 11 + 0 + NotNullable + + Col53 + + + + Col53 + + 11 + + + + + + + Col54 + 54 + + 4 + 11 + 0 + NotNullable + + Col54 + + + + Col54 + + 11 + + + + + + + Col55 + 55 + + 4 + 11 + 0 + NotNullable + + Col55 + + + + Col55 + + 11 + + + + + + + Col56 + 56 + + 4 + 11 + 0 + NotNullable + + Col56 + + + + Col56 + + 11 + + + + + + + Col57 + 57 + + 4 + 11 + 0 + NotNullable + + Col57 + + + + Col57 + + 11 + + + + + + + Col58 + 58 + + 4 + 11 + 0 + NotNullable + + Col58 + + + + Col58 + + 11 + + + + + + + Col59 + 59 + + 4 + 11 + 0 + NotNullable + + Col59 + + + + Col59 + + 11 + + + + + + + Col60 + 60 + + 4 + 11 + 0 + NotNullable + + Col60 + + + + Col60 + + 11 + + + + + + + Col61 + 61 + + 4 + 11 + 0 + NotNullable + + Col61 + + + + Col61 + + 11 + + + + + + + Col62 + 62 + + 4 + 11 + 0 + NotNullable + + Col62 + + + + Col62 + + 11 + + + + + + + Col63 + 63 + + 4 + 11 + 0 + NotNullable + + Col63 + + + + Col63 + + 11 + + + + + + + Col64 + 64 + + 4 + 11 + 0 + NotNullable + + Col64 + + + + Col64 + + 11 + + + + + + + Col65 + 65 + + 4 + 11 + 0 + NotNullable + + Col65 + + + + Col65 + + 11 + + + + + + + Col66 + 66 + + 4 + 11 + 0 + NotNullable + + Col66 + + + + Col66 + + 11 + + + + + + + Col67 + 67 + + 4 + 11 + 0 + NotNullable + + Col67 + + + + Col67 + + 11 + + + + + + + Col68 + 68 + + 4 + 11 + 0 + NotNullable + + Col68 + + + + Col68 + + 11 + + + + + + + Col69 + 69 + + 4 + 11 + 0 + NotNullable + + Col69 + + + + Col69 + + 11 + + + + + + + Col70 + 70 + + 4 + 11 + 0 + NotNullable + + Col70 + + + + Col70 + + 11 + + + + + + + Col71 + 71 + + 4 + 11 + 0 + NotNullable + + Col71 + + + + Col71 + + 11 + + + + + + + Col72 + 72 + + 4 + 11 + 0 + NotNullable + + Col72 + + + + Col72 + + 11 + + + + + + + Col73 + 73 + + 4 + 11 + 0 + NotNullable + + Col73 + + + + Col73 + + 11 + + + + + + + Col74 + 74 + + 4 + 11 + 0 + NotNullable + + Col74 + + + + Col74 + + 11 + + + + + + + Col75 + 75 + + 4 + 11 + 0 + NotNullable + + Col75 + + + + Col75 + + 11 + + + + + + + Col76 + 76 + + 4 + 11 + 0 + NotNullable + + Col76 + + + + Col76 + + 11 + + + + + + + Col77 + 77 + + 4 + 11 + 0 + NotNullable + + Col77 + + + + Col77 + + 11 + + + + + + + Col78 + 78 + + 4 + 11 + 0 + NotNullable + + Col78 + + + + Col78 + + 11 + + + + + + + Col79 + 79 + + 4 + 11 + 0 + NotNullable + + Col79 + + + + Col79 + + 11 + + + + + + + Col80 + 80 + + 4 + 11 + 0 + NotNullable + + Col80 + + + + Col80 + + 11 + + + + + + + Col81 + 81 + + 4 + 11 + 0 + NotNullable + + Col81 + + + + Col81 + + 11 + + + + + + + Col82 + 82 + + 4 + 11 + 0 + NotNullable + + Col82 + + + + Col82 + + 11 + + + + + + + Col83 + 83 + + 4 + 11 + 0 + NotNullable + + Col83 + + + + Col83 + + 11 + + + + + + + Col84 + 84 + + 4 + 11 + 0 + NotNullable + + Col84 + + + + Col84 + + 11 + + + + + + + Col85 + 85 + + 4 + 11 + 0 + NotNullable + + Col85 + + + + Col85 + + 11 + + + + + + + Col86 + 86 + + 4 + 11 + 0 + NotNullable + + Col86 + + + + Col86 + + 11 + + + + + + + Col87 + 87 + + 4 + 11 + 0 + NotNullable + + Col87 + + + + Col87 + + 11 + + + + + + + Col88 + 88 + + 4 + 11 + 0 + NotNullable + + Col88 + + + + Col88 + + 11 + + + + + + + Col89 + 89 + + 4 + 11 + 0 + NotNullable + + Col89 + + + + Col89 + + 11 + + + + + + + Col90 + 90 + + 4 + 11 + 0 + NotNullable + + Col90 + + + + Col90 + + 11 + + + + + + + Col91 + 91 + + 4 + 11 + 0 + NotNullable + + Col91 + + + + Col91 + + 11 + + + + + + + Col92 + 92 + + 4 + 11 + 0 + NotNullable + + Col92 + + + + Col92 + + 11 + + + + + + + Col93 + 93 + + 4 + 11 + 0 + NotNullable + + Col93 + + + + Col93 + + 11 + + + + + + + Col94 + 94 + + 4 + 11 + 0 + NotNullable + + Col94 + + + + Col94 + + 11 + + + + + + + Col95 + 95 + + 4 + 11 + 0 + NotNullable + + Col95 + + + + Col95 + + 11 + + + + + + + Col96 + 96 + + 4 + 11 + 0 + NotNullable + + Col96 + + + + Col96 + + 11 + + + + + + + Col97 + 97 + + 4 + 11 + 0 + NotNullable + + Col97 + + + + Col97 + + 11 + + + + + + + Col98 + 98 + + 4 + 11 + 0 + NotNullable + + Col98 + + + + Col98 + + 11 + + + + + + + Col99 + 99 + + 4 + 11 + 0 + NotNullable + + Col99 + + + + Col99 + + 11 + + + + + + + Col100 + 100 + + 4 + 11 + 0 + NotNullable + + Col100 + + + + Col100 + + 11 + + + + + + + Col101 + 101 + + 4 + 11 + 0 + NotNullable + + Col101 + + + + Col101 + + 11 + + + + + + + Col102 + 102 + + 4 + 11 + 0 + NotNullable + + Col102 + + + + Col102 + + 11 + + + + + + + Col103 + 103 + + 4 + 11 + 0 + NotNullable + + Col103 + + + + Col103 + + 11 + + + + + + + Col104 + 104 + + 4 + 11 + 0 + NotNullable + + Col104 + + + + Col104 + + 11 + + + + + + + Col105 + 105 + + 4 + 11 + 0 + NotNullable + + Col105 + + + + Col105 + + 11 + + + + + + + Col106 + 106 + + 4 + 11 + 0 + NotNullable + + Col106 + + + + Col106 + + 11 + + + + + + + Col107 + 107 + + 4 + 11 + 0 + NotNullable + + Col107 + + + + Col107 + + 11 + + + + + + + Col108 + 108 + + 4 + 11 + 0 + NotNullable + + Col108 + + + + Col108 + + 11 + + + + + + + Col109 + 109 + + 4 + 11 + 0 + NotNullable + + Col109 + + + + Col109 + + 11 + + + + + + + Col110 + 110 + + 4 + 11 + 0 + NotNullable + + Col110 + + + + Col110 + + 11 + + + + + + + Col111 + 111 + + 4 + 11 + 0 + NotNullable + + Col111 + + + + Col111 + + 11 + + + + + + + Col112 + 112 + + 4 + 11 + 0 + NotNullable + + Col112 + + + + Col112 + + 11 + + + + + + + Col113 + 113 + + 4 + 11 + 0 + NotNullable + + Col113 + + + + Col113 + + 11 + + + + + + + Col114 + 114 + + 4 + 11 + 0 + NotNullable + + Col114 + + + + Col114 + + 11 + + + + + + + Col115 + 115 + + 4 + 11 + 0 + NotNullable + + Col115 + + + + Col115 + + 11 + + + + + + + Col116 + 116 + + 4 + 11 + 0 + NotNullable + + Col116 + + + + Col116 + + 11 + + + + + + + Col117 + 117 + + 4 + 11 + 0 + NotNullable + + Col117 + + + + Col117 + + 11 + + + + + + + Col118 + 118 + + 4 + 11 + 0 + NotNullable + + Col118 + + + + Col118 + + 11 + + + + + + + Col119 + 119 + + 4 + 11 + 0 + NotNullable + + Col119 + + + + Col119 + + 11 + + + + + + + Col120 + 120 + + 4 + 11 + 0 + NotNullable + + Col120 + + + + Col120 + + 11 + + + + + + + Col121 + 121 + + 4 + 11 + 0 + NotNullable + + Col121 + + + + Col121 + + 11 + + + + + + + Col122 + 122 + + 4 + 11 + 0 + NotNullable + + Col122 + + + + Col122 + + 11 + + + + + + + Col123 + 123 + + 4 + 11 + 0 + NotNullable + + Col123 + + + + Col123 + + 11 + + + + + + + Col124 + 124 + + 4 + 11 + 0 + NotNullable + + Col124 + + + + Col124 + + 11 + + + + + + + Col125 + 125 + + 4 + 11 + 0 + NotNullable + + Col125 + + + + Col125 + + 11 + + + + + + + Col126 + 126 + + 4 + 11 + 0 + NotNullable + + Col126 + + + + Col126 + + 11 + + + + + + + Col127 + 127 + + 4 + 11 + 0 + NotNullable + + Col127 + + + + Col127 + + 11 + + + + + + + Col128 + 128 + + 4 + 11 + 0 + NotNullable + + Col128 + + + + Col128 + + 11 + + + + + + + Col129 + 129 + + 4 + 11 + 0 + NotNullable + + Col129 + + + + Col129 + + 11 + + + + + + + Col130 + 130 + + 4 + 11 + 0 + NotNullable + + Col130 + + + + Col130 + + 11 + + + + + + + Col131 + 131 + + 4 + 11 + 0 + NotNullable + + Col131 + + + + Col131 + + 11 + + + + + + + Col132 + 132 + + 4 + 11 + 0 + NotNullable + + Col132 + + + + Col132 + + 11 + + + + + + + Col133 + 133 + + 4 + 11 + 0 + NotNullable + + Col133 + + + + Col133 + + 11 + + + + + + + Col134 + 134 + + 4 + 11 + 0 + NotNullable + + Col134 + + + + Col134 + + 11 + + + + + + + Col135 + 135 + + 4 + 11 + 0 + NotNullable + + Col135 + + + + Col135 + + 11 + + + + + + + Col136 + 136 + + 4 + 11 + 0 + NotNullable + + Col136 + + + + Col136 + + 11 + + + + + + + Col137 + 137 + + 4 + 11 + 0 + NotNullable + + Col137 + + + + Col137 + + 11 + + + + + + + Col138 + 138 + + 4 + 11 + 0 + NotNullable + + Col138 + + + + Col138 + + 11 + + + + + + + Col139 + 139 + + 4 + 11 + 0 + NotNullable + + Col139 + + + + Col139 + + 11 + + + + + + + Col140 + 140 + + 4 + 11 + 0 + NotNullable + + Col140 + + + + Col140 + + 11 + + + + + + + Col141 + 141 + + 4 + 11 + 0 + NotNullable + + Col141 + + + + Col141 + + 11 + + + + + + + Col142 + 142 + + 4 + 11 + 0 + NotNullable + + Col142 + + + + Col142 + + 11 + + + + + + + Col143 + 143 + + 4 + 11 + 0 + NotNullable + + Col143 + + + + Col143 + + 11 + + + + + + + Col144 + 144 + + 4 + 11 + 0 + NotNullable + + Col144 + + + + Col144 + + 11 + + + + + + + Col145 + 145 + + 4 + 11 + 0 + NotNullable + + Col145 + + + + Col145 + + 11 + + + + + + + Col146 + 146 + + 4 + 11 + 0 + NotNullable + + Col146 + + + + Col146 + + 11 + + + + + + + Col147 + 147 + + 4 + 11 + 0 + NotNullable + + Col147 + + + + Col147 + + 11 + + + + + + + Col148 + 148 + + 4 + 11 + 0 + NotNullable + + Col148 + + + + Col148 + + 11 + + + + + + + Col149 + 149 + + 4 + 11 + 0 + NotNullable + + Col149 + + + + Col149 + + 11 + + + + + + + Col150 + 150 + + 4 + 11 + 0 + NotNullable + + Col150 + + + + Col150 + + 11 + + + + + + + Col151 + 151 + + 4 + 11 + 0 + NotNullable + + Col151 + + + + Col151 + + 11 + + + + + + + Col152 + 152 + + 4 + 11 + 0 + NotNullable + + Col152 + + + + Col152 + + 11 + + + + + + + Col153 + 153 + + 4 + 11 + 0 + NotNullable + + Col153 + + + + Col153 + + 11 + + + + + + + Col154 + 154 + + 4 + 11 + 0 + NotNullable + + Col154 + + + + Col154 + + 11 + + + + + + + Col155 + 155 + + 4 + 11 + 0 + NotNullable + + Col155 + + + + Col155 + + 11 + + + + + + + Col156 + 156 + + 4 + 11 + 0 + NotNullable + + Col156 + + + + Col156 + + 11 + + + + + + + Col157 + 157 + + 4 + 11 + 0 + NotNullable + + Col157 + + + + Col157 + + 11 + + + + + + + Col158 + 158 + + 4 + 11 + 0 + NotNullable + + Col158 + + + + Col158 + + 11 + + + + + + + Col159 + 159 + + 4 + 11 + 0 + NotNullable + + Col159 + + + + Col159 + + 11 + + + + + + + Col160 + 160 + + 4 + 11 + 0 + NotNullable + + Col160 + + + + Col160 + + 11 + + + + + + + Col161 + 161 + + 4 + 11 + 0 + NotNullable + + Col161 + + + + Col161 + + 11 + + + + + + + Col162 + 162 + + 4 + 11 + 0 + NotNullable + + Col162 + + + + Col162 + + 11 + + + + + + + Col163 + 163 + + 4 + 11 + 0 + NotNullable + + Col163 + + + + Col163 + + 11 + + + + + + + Col164 + 164 + + 4 + 11 + 0 + NotNullable + + Col164 + + + + Col164 + + 11 + + + + + + + Col165 + 165 + + 4 + 11 + 0 + NotNullable + + Col165 + + + + Col165 + + 11 + + + + + + + Col166 + 166 + + 4 + 11 + 0 + NotNullable + + Col166 + + + + Col166 + + 11 + + + + + + + Col167 + 167 + + 4 + 11 + 0 + NotNullable + + Col167 + + + + Col167 + + 11 + + + + + + + Col168 + 168 + + 4 + 11 + 0 + NotNullable + + Col168 + + + + Col168 + + 11 + + + + + + + Col169 + 169 + + 4 + 11 + 0 + NotNullable + + Col169 + + + + Col169 + + 11 + + + + + + + Col170 + 170 + + 4 + 11 + 0 + NotNullable + + Col170 + + + + Col170 + + 11 + + + + + + + Col171 + 171 + + 4 + 11 + 0 + NotNullable + + Col171 + + + + Col171 + + 11 + + + + + + + Col172 + 172 + + 4 + 11 + 0 + NotNullable + + Col172 + + + + Col172 + + 11 + + + + + + + Col173 + 173 + + 4 + 11 + 0 + NotNullable + + Col173 + + + + Col173 + + 11 + + + + + + + Col174 + 174 + + 4 + 11 + 0 + NotNullable + + Col174 + + + + Col174 + + 11 + + + + + + + Col175 + 175 + + 4 + 11 + 0 + NotNullable + + Col175 + + + + Col175 + + 11 + + + + + + + Col176 + 176 + + 4 + 11 + 0 + NotNullable + + Col176 + + + + Col176 + + 11 + + + + + + + Col177 + 177 + + 4 + 11 + 0 + NotNullable + + Col177 + + + + Col177 + + 11 + + + + + + + Col178 + 178 + + 4 + 11 + 0 + NotNullable + + Col178 + + + + Col178 + + 11 + + + + + + + Col179 + 179 + + 4 + 11 + 0 + NotNullable + + Col179 + + + + Col179 + + 11 + + + + + + + Col180 + 180 + + 4 + 11 + 0 + NotNullable + + Col180 + + + + Col180 + + 11 + + + + + + + Col181 + 181 + + 4 + 11 + 0 + NotNullable + + Col181 + + + + Col181 + + 11 + + + + + + + Col182 + 182 + + 4 + 11 + 0 + NotNullable + + Col182 + + + + Col182 + + 11 + + + + + + + Col183 + 183 + + 4 + 11 + 0 + NotNullable + + Col183 + + + + Col183 + + 11 + + + + + + + Col184 + 184 + + 4 + 11 + 0 + NotNullable + + Col184 + + + + Col184 + + 11 + + + + + + + Col185 + 185 + + 4 + 11 + 0 + NotNullable + + Col185 + + + + Col185 + + 11 + + + + + + + Col186 + 186 + + 4 + 11 + 0 + NotNullable + + Col186 + + + + Col186 + + 11 + + + + + + + Col187 + 187 + + 4 + 11 + 0 + NotNullable + + Col187 + + + + Col187 + + 11 + + + + + + + Col188 + 188 + + 4 + 11 + 0 + NotNullable + + Col188 + + + + Col188 + + 11 + + + + + + + Col189 + 189 + + 4 + 11 + 0 + NotNullable + + Col189 + + + + Col189 + + 11 + + + + + + + Col190 + 190 + + 4 + 11 + 0 + NotNullable + + Col190 + + + + Col190 + + 11 + + + + + + + Col191 + 191 + + 4 + 11 + 0 + NotNullable + + Col191 + + + + Col191 + + 11 + + + + + + + Col192 + 192 + + 4 + 11 + 0 + NotNullable + + Col192 + + + + Col192 + + 11 + + + + + + + Col193 + 193 + + 4 + 11 + 0 + NotNullable + + Col193 + + + + Col193 + + 11 + + + + + + + Col194 + 194 + + 4 + 11 + 0 + NotNullable + + Col194 + + + + Col194 + + 11 + + + + + + + Col195 + 195 + + 4 + 11 + 0 + NotNullable + + Col195 + + + + Col195 + + 11 + + + + + + + Col196 + 196 + + 4 + 11 + 0 + NotNullable + + Col196 + + + + Col196 + + 11 + + + + + + + Col197 + 197 + + 4 + 11 + 0 + NotNullable + + Col197 + + + + Col197 + + 11 + + + + + + + Col198 + 198 + + 4 + 11 + 0 + NotNullable + + Col198 + + + + Col198 + + 11 + + + + + + + Col199 + 199 + + 4 + 11 + 0 + NotNullable + + Col199 + + + + Col199 + + 11 + + + + + + + Col200 + 200 + + 4 + 11 + 0 + NotNullable + + Col200 + + + + Col200 + + 11 + + + + + + + Col201 + 201 + + 4 + 11 + 0 + NotNullable + + Col201 + + + + Col201 + + 11 + + + + + + + Col202 + 202 + + 4 + 11 + 0 + NotNullable + + Col202 + + + + Col202 + + 11 + + + + + + + Col203 + 203 + + 4 + 11 + 0 + NotNullable + + Col203 + + + + Col203 + + 11 + + + + + + + Col204 + 204 + + 4 + 11 + 0 + NotNullable + + Col204 + + + + Col204 + + 11 + + + + + + + Col205 + 205 + + 4 + 11 + 0 + NotNullable + + Col205 + + + + Col205 + + 11 + + + + + + + Col206 + 206 + + 4 + 11 + 0 + NotNullable + + Col206 + + + + Col206 + + 11 + + + + + + + Col207 + 207 + + 4 + 11 + 0 + NotNullable + + Col207 + + + + Col207 + + 11 + + + + + + + Col208 + 208 + + 4 + 11 + 0 + NotNullable + + Col208 + + + + Col208 + + 11 + + + + + + + Col209 + 209 + + 4 + 11 + 0 + NotNullable + + Col209 + + + + Col209 + + 11 + + + + + + + Col210 + 210 + + 4 + 11 + 0 + NotNullable + + Col210 + + + + Col210 + + 11 + + + + + + + Col211 + 211 + + 4 + 11 + 0 + NotNullable + + Col211 + + + + Col211 + + 11 + + + + + + + Col212 + 212 + + 4 + 11 + 0 + NotNullable + + Col212 + + + + Col212 + + 11 + + + + + + + Col213 + 213 + + 4 + 11 + 0 + NotNullable + + Col213 + + + + Col213 + + 11 + + + + + + + Col214 + 214 + + 4 + 11 + 0 + NotNullable + + Col214 + + + + Col214 + + 11 + + + + + + + Col215 + 215 + + 4 + 11 + 0 + NotNullable + + Col215 + + + + Col215 + + 11 + + + + + + + Col216 + 216 + + 4 + 11 + 0 + NotNullable + + Col216 + + + + Col216 + + 11 + + + + + + + Col217 + 217 + + 4 + 11 + 0 + NotNullable + + Col217 + + + + Col217 + + 11 + + + + + + + Col218 + 218 + + 4 + 11 + 0 + NotNullable + + Col218 + + + + Col218 + + 11 + + + + + + + Col219 + 219 + + 4 + 11 + 0 + NotNullable + + Col219 + + + + Col219 + + 11 + + + + + + + Col220 + 220 + + 4 + 11 + 0 + NotNullable + + Col220 + + + + Col220 + + 11 + + + + + + + Col221 + 221 + + 4 + 11 + 0 + NotNullable + + Col221 + + + + Col221 + + 11 + + + + + + + Col222 + 222 + + 4 + 11 + 0 + NotNullable + + Col222 + + + + Col222 + + 11 + + + + + + + Col223 + 223 + + 4 + 11 + 0 + NotNullable + + Col223 + + + + Col223 + + 11 + + + + + + + Col224 + 224 + + 4 + 11 + 0 + NotNullable + + Col224 + + + + Col224 + + 11 + + + + + + + Col225 + 225 + + 4 + 11 + 0 + NotNullable + + Col225 + + + + Col225 + + 11 + + + + + + + Col226 + 226 + + 4 + 11 + 0 + NotNullable + + Col226 + + + + Col226 + + 11 + + + + + + + Col227 + 227 + + 4 + 11 + 0 + NotNullable + + Col227 + + + + Col227 + + 11 + + + + + + + Col228 + 228 + + 4 + 11 + 0 + NotNullable + + Col228 + + + + Col228 + + 11 + + + + + + + Col229 + 229 + + 4 + 11 + 0 + NotNullable + + Col229 + + + + Col229 + + 11 + + + + + + + Col230 + 230 + + 4 + 11 + 0 + NotNullable + + Col230 + + + + Col230 + + 11 + + + + + + + Col231 + 231 + + 4 + 11 + 0 + NotNullable + + Col231 + + + + Col231 + + 11 + + + + + + + Col232 + 232 + + 4 + 11 + 0 + NotNullable + + Col232 + + + + Col232 + + 11 + + + + + + + Col233 + 233 + + 4 + 11 + 0 + NotNullable + + Col233 + + + + Col233 + + 11 + + + + + + + Col234 + 234 + + 4 + 11 + 0 + NotNullable + + Col234 + + + + Col234 + + 11 + + + + + + + Col235 + 235 + + 4 + 11 + 0 + NotNullable + + Col235 + + + + Col235 + + 11 + + + + + + + Col236 + 236 + + 4 + 11 + 0 + NotNullable + + Col236 + + + + Col236 + + 11 + + + + + + + Col237 + 237 + + 4 + 11 + 0 + NotNullable + + Col237 + + + + Col237 + + 11 + + + + + + + Col238 + 238 + + 4 + 11 + 0 + NotNullable + + Col238 + + + + Col238 + + 11 + + + + + + + Col239 + 239 + + 4 + 11 + 0 + NotNullable + + Col239 + + + + Col239 + + 11 + + + + + + + Col240 + 240 + + 4 + 11 + 0 + NotNullable + + Col240 + + + + Col240 + + 11 + + + + + + + Col241 + 241 + + 4 + 11 + 0 + NotNullable + + Col241 + + + + Col241 + + 11 + + + + + + + Col242 + 242 + + 4 + 11 + 0 + NotNullable + + Col242 + + + + Col242 + + 11 + + + + + + + Col243 + 243 + + 4 + 11 + 0 + NotNullable + + Col243 + + + + Col243 + + 11 + + + + + + + Col244 + 244 + + 4 + 11 + 0 + NotNullable + + Col244 + + + + Col244 + + 11 + + + + + + + Col245 + 245 + + 4 + 11 + 0 + NotNullable + + Col245 + + + + Col245 + + 11 + + + + + + + Col246 + 246 + + 4 + 11 + 0 + NotNullable + + Col246 + + + + Col246 + + 11 + + + + + + + Col247 + 247 + + 4 + 11 + 0 + NotNullable + + Col247 + + + + Col247 + + 11 + + + + + + + Col248 + 248 + + 4 + 11 + 0 + NotNullable + + Col248 + + + + Col248 + + 11 + + + + + + + Col249 + 249 + + 4 + 11 + 0 + NotNullable + + Col249 + + + + Col249 + + 11 + + + + + + + Col250 + 250 + + 4 + 11 + 0 + NotNullable + + Col250 + + + + Col250 + + 11 + + + + + + + Col251 + 251 + + 4 + 11 + 0 + NotNullable + + Col251 + + + + Col251 + + 11 + + + + + + + Col252 + 252 + + 4 + 11 + 0 + NotNullable + + Col252 + + + + Col252 + + 11 + + + + + + + Col253 + 253 + + 4 + 11 + 0 + NotNullable + + Col253 + + + + Col253 + + 11 + + + + + + + Col254 + 254 + + 4 + 11 + 0 + NotNullable + + Col254 + + + + Col254 + + 11 + + + + + + + Col255 + 255 + + 4 + 11 + 0 + NotNullable + + Col255 + + + + Col255 + + 11 + + + + + + + Col256 + 256 + + 4 + 11 + 0 + NotNullable + + Col256 + + + + Col256 + + 11 + + + + + + + Col257 + 257 + + 4 + 11 + 0 + NotNullable + + Col257 + + + + Col257 + + 11 + + + + + + + Col258 + 258 + + 4 + 11 + 0 + NotNullable + + Col258 + + + + Col258 + + 11 + + + + + + + Col259 + 259 + + 4 + 11 + 0 + NotNullable + + Col259 + + + + Col259 + + 11 + + + + + + + Col260 + 260 + + 4 + 11 + 0 + NotNullable + + Col260 + + + + Col260 + + 11 + + + + + + + Col261 + 261 + + 4 + 11 + 0 + NotNullable + + Col261 + + + + Col261 + + 11 + + + + + + + Col262 + 262 + + 4 + 11 + 0 + NotNullable + + Col262 + + + + Col262 + + 11 + + + + + + + Col263 + 263 + + 4 + 11 + 0 + NotNullable + + Col263 + + + + Col263 + + 11 + + + + + + + Col264 + 264 + + 4 + 11 + 0 + NotNullable + + Col264 + + + + Col264 + + 11 + + + + + + + Col265 + 265 + + 4 + 11 + 0 + NotNullable + + Col265 + + + + Col265 + + 11 + + + + + + + Col266 + 266 + + 4 + 11 + 0 + NotNullable + + Col266 + + + + Col266 + + 11 + + + + + + + Col267 + 267 + + 4 + 11 + 0 + NotNullable + + Col267 + + + + Col267 + + 11 + + + + + + + Col268 + 268 + + 4 + 11 + 0 + NotNullable + + Col268 + + + + Col268 + + 11 + + + + + + + Col269 + 269 + + 4 + 11 + 0 + NotNullable + + Col269 + + + + Col269 + + 11 + + + + + + + Col270 + 270 + + 4 + 11 + 0 + NotNullable + + Col270 + + + + Col270 + + 11 + + + + + + + Col271 + 271 + + 4 + 11 + 0 + NotNullable + + Col271 + + + + Col271 + + 11 + + + + + + + Col272 + 272 + + 4 + 11 + 0 + NotNullable + + Col272 + + + + Col272 + + 11 + + + + + + + Col273 + 273 + + 4 + 11 + 0 + NotNullable + + Col273 + + + + Col273 + + 11 + + + + + + + Col274 + 274 + + 4 + 11 + 0 + NotNullable + + Col274 + + + + Col274 + + 11 + + + + + + + Col275 + 275 + + 4 + 11 + 0 + NotNullable + + Col275 + + + + Col275 + + 11 + + + + + + + Col276 + 276 + + 4 + 11 + 0 + NotNullable + + Col276 + + + + Col276 + + 11 + + + + + + + Col277 + 277 + + 4 + 11 + 0 + NotNullable + + Col277 + + + + Col277 + + 11 + + + + + + + Col278 + 278 + + 4 + 11 + 0 + NotNullable + + Col278 + + + + Col278 + + 11 + + + + + + + Col279 + 279 + + 4 + 11 + 0 + NotNullable + + Col279 + + + + Col279 + + 11 + + + + + + + Col280 + 280 + + 4 + 11 + 0 + NotNullable + + Col280 + + + + Col280 + + 11 + + + + + + + Col281 + 281 + + 4 + 11 + 0 + NotNullable + + Col281 + + + + Col281 + + 11 + + + + + + + Col282 + 282 + + 4 + 11 + 0 + NotNullable + + Col282 + + + + Col282 + + 11 + + + + + + + Col283 + 283 + + 4 + 11 + 0 + NotNullable + + Col283 + + + + Col283 + + 11 + + + + + + + Col284 + 284 + + 4 + 11 + 0 + NotNullable + + Col284 + + + + Col284 + + 11 + + + + + + + Col285 + 285 + + 4 + 11 + 0 + NotNullable + + Col285 + + + + Col285 + + 11 + + + + + + + Col286 + 286 + + 4 + 11 + 0 + NotNullable + + Col286 + + + + Col286 + + 11 + + + + + + + Col287 + 287 + + 4 + 11 + 0 + NotNullable + + Col287 + + + + Col287 + + 11 + + + + + + + Col288 + 288 + + 4 + 11 + 0 + NotNullable + + Col288 + + + + Col288 + + 11 + + + + + + + Col289 + 289 + + 4 + 11 + 0 + NotNullable + + Col289 + + + + Col289 + + 11 + + + + + + + Col290 + 290 + + 4 + 11 + 0 + NotNullable + + Col290 + + + + Col290 + + 11 + + + + + + + Col291 + 291 + + 4 + 11 + 0 + NotNullable + + Col291 + + + + Col291 + + 11 + + + + + + + Col292 + 292 + + 4 + 11 + 0 + NotNullable + + Col292 + + + + Col292 + + 11 + + + + + + + Col293 + 293 + + 4 + 11 + 0 + NotNullable + + Col293 + + + + Col293 + + 11 + + + + + + + Col294 + 294 + + 4 + 11 + 0 + NotNullable + + Col294 + + + + Col294 + + 11 + + + + + + + Col295 + 295 + + 4 + 11 + 0 + NotNullable + + Col295 + + + + Col295 + + 11 + + + + + + + Col296 + 296 + + 4 + 11 + 0 + NotNullable + + Col296 + + + + Col296 + + 11 + + + + + + + Col297 + 297 + + 4 + 11 + 0 + NotNullable + + Col297 + + + + Col297 + + 11 + + + + + + + Col298 + 298 + + 4 + 11 + 0 + NotNullable + + Col298 + + + + Col298 + + 11 + + + + + + + Col299 + 299 + + 4 + 11 + 0 + NotNullable + + Col299 + + + + Col299 + + 11 + + + + + + + Col300 + 300 + + 4 + 11 + 0 + NotNullable + + Col300 + + + + Col300 + + 11 + + + + + + + Col301 + 301 + + 4 + 11 + 0 + NotNullable + + Col301 + + + + Col301 + + 11 + + + + + + + Col302 + 302 + + 4 + 11 + 0 + NotNullable + + Col302 + + + + Col302 + + 11 + + + + + + + Col303 + 303 + + 4 + 11 + 0 + NotNullable + + Col303 + + + + Col303 + + 11 + + + + + + + Col304 + 304 + + 4 + 11 + 0 + NotNullable + + Col304 + + + + Col304 + + 11 + + + + + + + Col305 + 305 + + 4 + 11 + 0 + NotNullable + + Col305 + + + + Col305 + + 11 + + + + + + + Col306 + 306 + + 4 + 11 + 0 + NotNullable + + Col306 + + + + Col306 + + 11 + + + + + + + Col307 + 307 + + 4 + 11 + 0 + NotNullable + + Col307 + + + + Col307 + + 11 + + + + + + + Col308 + 308 + + 4 + 11 + 0 + NotNullable + + Col308 + + + + Col308 + + 11 + + + + + + + Col309 + 309 + + 4 + 11 + 0 + NotNullable + + Col309 + + + + Col309 + + 11 + + + + + + + Col310 + 310 + + 4 + 11 + 0 + NotNullable + + Col310 + + + + Col310 + + 11 + + + + + + + Col311 + 311 + + 4 + 11 + 0 + NotNullable + + Col311 + + + + Col311 + + 11 + + + + + + + Col312 + 312 + + 4 + 11 + 0 + NotNullable + + Col312 + + + + Col312 + + 11 + + + + + + + Col313 + 313 + + 4 + 11 + 0 + NotNullable + + Col313 + + + + Col313 + + 11 + + + + + + + Col314 + 314 + + 4 + 11 + 0 + NotNullable + + Col314 + + + + Col314 + + 11 + + + + + + + Col315 + 315 + + 4 + 11 + 0 + NotNullable + + Col315 + + + + Col315 + + 11 + + + + + + + Col316 + 316 + + 4 + 11 + 0 + NotNullable + + Col316 + + + + Col316 + + 11 + + + + + + + Col317 + 317 + + 4 + 11 + 0 + NotNullable + + Col317 + + + + Col317 + + 11 + + + + + + + Col318 + 318 + + 4 + 11 + 0 + NotNullable + + Col318 + + + + Col318 + + 11 + + + + + + + Col319 + 319 + + 4 + 11 + 0 + NotNullable + + Col319 + + + + Col319 + + 11 + + + + + + + Col320 + 320 + + 4 + 11 + 0 + NotNullable + + Col320 + + + + Col320 + + 11 + + + + + + + Col321 + 321 + + 4 + 11 + 0 + NotNullable + + Col321 + + + + Col321 + + 11 + + + + + + + Col322 + 322 + + 4 + 11 + 0 + NotNullable + + Col322 + + + + Col322 + + 11 + + + + + + + Col323 + 323 + + 4 + 11 + 0 + NotNullable + + Col323 + + + + Col323 + + 11 + + + + + + + Col324 + 324 + + 4 + 11 + 0 + NotNullable + + Col324 + + + + Col324 + + 11 + + + + + + + Col325 + 325 + + 4 + 11 + 0 + NotNullable + + Col325 + + + + Col325 + + 11 + + + + + + + Col326 + 326 + + 4 + 11 + 0 + NotNullable + + Col326 + + + + Col326 + + 11 + + + + + + + Col327 + 327 + + 4 + 11 + 0 + NotNullable + + Col327 + + + + Col327 + + 11 + + + + + + + Col328 + 328 + + 4 + 11 + 0 + NotNullable + + Col328 + + + + Col328 + + 11 + + + + + + + Col329 + 329 + + 4 + 11 + 0 + NotNullable + + Col329 + + + + Col329 + + 11 + + + + + + + Col330 + 330 + + 4 + 11 + 0 + NotNullable + + Col330 + + + + Col330 + + 11 + + + + + + + Col331 + 331 + + 4 + 11 + 0 + NotNullable + + Col331 + + + + Col331 + + 11 + + + + + + + Col332 + 332 + + 4 + 11 + 0 + NotNullable + + Col332 + + + + Col332 + + 11 + + + + + + + Col333 + 333 + + 4 + 11 + 0 + NotNullable + + Col333 + + + + Col333 + + 11 + + + + + + + Col334 + 334 + + 4 + 11 + 0 + NotNullable + + Col334 + + + + Col334 + + 11 + + + + + + + Col335 + 335 + + 4 + 11 + 0 + NotNullable + + Col335 + + + + Col335 + + 11 + + + + + + + Col336 + 336 + + 4 + 11 + 0 + NotNullable + + Col336 + + + + Col336 + + 11 + + + + + + + Col337 + 337 + + 4 + 11 + 0 + NotNullable + + Col337 + + + + Col337 + + 11 + + + + + + + Col338 + 338 + + 4 + 11 + 0 + NotNullable + + Col338 + + + + Col338 + + 11 + + + + + + + Col339 + 339 + + 4 + 11 + 0 + NotNullable + + Col339 + + + + Col339 + + 11 + + + + + + + Col340 + 340 + + 4 + 11 + 0 + NotNullable + + Col340 + + + + Col340 + + 11 + + + + + + + Col341 + 341 + + 4 + 11 + 0 + NotNullable + + Col341 + + + + Col341 + + 11 + + + + + + + Col342 + 342 + + 4 + 11 + 0 + NotNullable + + Col342 + + + + Col342 + + 11 + + + + + + + Col343 + 343 + + 4 + 11 + 0 + NotNullable + + Col343 + + + + Col343 + + 11 + + + + + + + Col344 + 344 + + 4 + 11 + 0 + NotNullable + + Col344 + + + + Col344 + + 11 + + + + + + + Col345 + 345 + + 4 + 11 + 0 + NotNullable + + Col345 + + + + Col345 + + 11 + + + + + + + Col346 + 346 + + 4 + 11 + 0 + NotNullable + + Col346 + + + + Col346 + + 11 + + + + + + + Col347 + 347 + + 4 + 11 + 0 + NotNullable + + Col347 + + + + Col347 + + 11 + + + + + + + Col348 + 348 + + 4 + 11 + 0 + NotNullable + + Col348 + + + + Col348 + + 11 + + + + + + + Col349 + 349 + + 4 + 11 + 0 + NotNullable + + Col349 + + + + Col349 + + 11 + + + + + + + Col350 + 350 + + 4 + 11 + 0 + NotNullable + + Col350 + + + + Col350 + + 11 + + + + + + + Col351 + 351 + + 4 + 11 + 0 + NotNullable + + Col351 + + + + Col351 + + 11 + + + + + + + Col352 + 352 + + 4 + 11 + 0 + NotNullable + + Col352 + + + + Col352 + + 11 + + + + + + + Col353 + 353 + + 4 + 11 + 0 + NotNullable + + Col353 + + + + Col353 + + 11 + + + + + + + Col354 + 354 + + 4 + 11 + 0 + NotNullable + + Col354 + + + + Col354 + + 11 + + + + + + + Col355 + 355 + + 4 + 11 + 0 + NotNullable + + Col355 + + + + Col355 + + 11 + + + + + + + Col356 + 356 + + 4 + 11 + 0 + NotNullable + + Col356 + + + + Col356 + + 11 + + + + + + + Col357 + 357 + + 4 + 11 + 0 + NotNullable + + Col357 + + + + Col357 + + 11 + + + + + + + Col358 + 358 + + 4 + 11 + 0 + NotNullable + + Col358 + + + + Col358 + + 11 + + + + + + + Col359 + 359 + + 4 + 11 + 0 + NotNullable + + Col359 + + + + Col359 + + 11 + + + + + + + Col360 + 360 + + 4 + 11 + 0 + NotNullable + + Col360 + + + + Col360 + + 11 + + + + + + + Col361 + 361 + + 4 + 11 + 0 + NotNullable + + Col361 + + + + Col361 + + 11 + + + + + + + Col362 + 362 + + 4 + 11 + 0 + NotNullable + + Col362 + + + + Col362 + + 11 + + + + + + + Col363 + 363 + + 4 + 11 + 0 + NotNullable + + Col363 + + + + Col363 + + 11 + + + + + + + Col364 + 364 + + 4 + 11 + 0 + NotNullable + + Col364 + + + + Col364 + + 11 + + + + + + + Col365 + 365 + + 4 + 11 + 0 + NotNullable + + Col365 + + + + Col365 + + 11 + + + + + + + Col366 + 366 + + 4 + 11 + 0 + NotNullable + + Col366 + + + + Col366 + + 11 + + + + + + + Col367 + 367 + + 4 + 11 + 0 + NotNullable + + Col367 + + + + Col367 + + 11 + + + + + + + Col368 + 368 + + 4 + 11 + 0 + NotNullable + + Col368 + + + + Col368 + + 11 + + + + + + + Col369 + 369 + + 4 + 11 + 0 + NotNullable + + Col369 + + + + Col369 + + 11 + + + + + + + Col370 + 370 + + 4 + 11 + 0 + NotNullable + + Col370 + + + + Col370 + + 11 + + + + + + + Col371 + 371 + + 4 + 11 + 0 + NotNullable + + Col371 + + + + Col371 + + 11 + + + + + + + Col372 + 372 + + 4 + 11 + 0 + NotNullable + + Col372 + + + + Col372 + + 11 + + + + + + + Col373 + 373 + + 4 + 11 + 0 + NotNullable + + Col373 + + + + Col373 + + 11 + + + + + + + Col374 + 374 + + 4 + 11 + 0 + NotNullable + + Col374 + + + + Col374 + + 11 + + + + + + + Col375 + 375 + + 4 + 11 + 0 + NotNullable + + Col375 + + + + Col375 + + 11 + + + + + + + Col376 + 376 + + 4 + 11 + 0 + NotNullable + + Col376 + + + + Col376 + + 11 + + + + + + + Col377 + 377 + + 4 + 11 + 0 + NotNullable + + Col377 + + + + Col377 + + 11 + + + + + + + Col378 + 378 + + 4 + 11 + 0 + NotNullable + + Col378 + + + + Col378 + + 11 + + + + + + + Col379 + 379 + + 4 + 11 + 0 + NotNullable + + Col379 + + + + Col379 + + 11 + + + + + + + Col380 + 380 + + 4 + 11 + 0 + NotNullable + + Col380 + + + + Col380 + + 11 + + + + + + + Col381 + 381 + + 4 + 11 + 0 + NotNullable + + Col381 + + + + Col381 + + 11 + + + + + + + Col382 + 382 + + 4 + 11 + 0 + NotNullable + + Col382 + + + + Col382 + + 11 + + + + + + + Col383 + 383 + + 4 + 11 + 0 + NotNullable + + Col383 + + + + Col383 + + 11 + + + + + + + Col384 + 384 + + 4 + 11 + 0 + NotNullable + + Col384 + + + + Col384 + + 11 + + + + + + + Col385 + 385 + + 4 + 11 + 0 + NotNullable + + Col385 + + + + Col385 + + 11 + + + + + + + Col386 + 386 + + 4 + 11 + 0 + NotNullable + + Col386 + + + + Col386 + + 11 + + + + + + + Col387 + 387 + + 4 + 11 + 0 + NotNullable + + Col387 + + + + Col387 + + 11 + + + + + + + Col388 + 388 + + 4 + 11 + 0 + NotNullable + + Col388 + + + + Col388 + + 11 + + + + + + + Col389 + 389 + + 4 + 11 + 0 + NotNullable + + Col389 + + + + Col389 + + 11 + + + + + + + Col390 + 390 + + 4 + 11 + 0 + NotNullable + + Col390 + + + + Col390 + + 11 + + + + + + + Col391 + 391 + + 4 + 11 + 0 + NotNullable + + Col391 + + + + Col391 + + 11 + + + + + + + Col392 + 392 + + 4 + 11 + 0 + NotNullable + + Col392 + + + + Col392 + + 11 + + + + + + + Col393 + 393 + + 4 + 11 + 0 + NotNullable + + Col393 + + + + Col393 + + 11 + + + + + + + Col394 + 394 + + 4 + 11 + 0 + NotNullable + + Col394 + + + + Col394 + + 11 + + + + + + + Col395 + 395 + + 4 + 11 + 0 + NotNullable + + Col395 + + + + Col395 + + 11 + + + + + + + Col396 + 396 + + 4 + 11 + 0 + NotNullable + + Col396 + + + + Col396 + + 11 + + + + + + + Col397 + 397 + + 4 + 11 + 0 + NotNullable + + Col397 + + + + Col397 + + 11 + + + + + + + Col398 + 398 + + 4 + 11 + 0 + NotNullable + + Col398 + + + + Col398 + + 11 + + + + + + + Col399 + 399 + + 4 + 11 + 0 + NotNullable + + Col399 + + + + Col399 + + 11 + + + + + + + Col400 + 400 + + 4 + 11 + 0 + NotNullable + + Col400 + + + + Col400 + + 11 + + + + + + + Col401 + 401 + + 4 + 11 + 0 + NotNullable + + Col401 + + + + Col401 + + 11 + + + + + + + Col402 + 402 + + 4 + 11 + 0 + NotNullable + + Col402 + + + + Col402 + + 11 + + + + + + + Col403 + 403 + + 4 + 11 + 0 + NotNullable + + Col403 + + + + Col403 + + 11 + + + + + + + Col404 + 404 + + 4 + 11 + 0 + NotNullable + + Col404 + + + + Col404 + + 11 + + + + + + + Col405 + 405 + + 4 + 11 + 0 + NotNullable + + Col405 + + + + Col405 + + 11 + + + + + + + Col406 + 406 + + 4 + 11 + 0 + NotNullable + + Col406 + + + + Col406 + + 11 + + + + + + + Col407 + 407 + + 4 + 11 + 0 + NotNullable + + Col407 + + + + Col407 + + 11 + + + + + + + Col408 + 408 + + 4 + 11 + 0 + NotNullable + + Col408 + + + + Col408 + + 11 + + + + + + + Col409 + 409 + + 4 + 11 + 0 + NotNullable + + Col409 + + + + Col409 + + 11 + + + + + + + Col410 + 410 + + 4 + 11 + 0 + NotNullable + + Col410 + + + + Col410 + + 11 + + + + + + + Col411 + 411 + + 4 + 11 + 0 + NotNullable + + Col411 + + + + Col411 + + 11 + + + + + + + Col412 + 412 + + 4 + 11 + 0 + NotNullable + + Col412 + + + + Col412 + + 11 + + + + + + + Col413 + 413 + + 4 + 11 + 0 + NotNullable + + Col413 + + + + Col413 + + 11 + + + + + + + Col414 + 414 + + 4 + 11 + 0 + NotNullable + + Col414 + + + + Col414 + + 11 + + + + + + + Col415 + 415 + + 4 + 11 + 0 + NotNullable + + Col415 + + + + Col415 + + 11 + + + + + + + Col416 + 416 + + 4 + 11 + 0 + NotNullable + + Col416 + + + + Col416 + + 11 + + + + + + + Col417 + 417 + + 4 + 11 + 0 + NotNullable + + Col417 + + + + Col417 + + 11 + + + + + + + Col418 + 418 + + 4 + 11 + 0 + NotNullable + + Col418 + + + + Col418 + + 11 + + + + + + + Col419 + 419 + + 4 + 11 + 0 + NotNullable + + Col419 + + + + Col419 + + 11 + + + + + + + Col420 + 420 + + 4 + 11 + 0 + NotNullable + + Col420 + + + + Col420 + + 11 + + + + + + + Col421 + 421 + + 4 + 11 + 0 + NotNullable + + Col421 + + + + Col421 + + 11 + + + + + + + Col422 + 422 + + 4 + 11 + 0 + NotNullable + + Col422 + + + + Col422 + + 11 + + + + + + + Col423 + 423 + + 4 + 11 + 0 + NotNullable + + Col423 + + + + Col423 + + 11 + + + + + + + Col424 + 424 + + 4 + 11 + 0 + NotNullable + + Col424 + + + + Col424 + + 11 + + + + + + + Col425 + 425 + + 4 + 11 + 0 + NotNullable + + Col425 + + + + Col425 + + 11 + + + + + + + Col426 + 426 + + 4 + 11 + 0 + NotNullable + + Col426 + + + + Col426 + + 11 + + + + + + + Col427 + 427 + + 4 + 11 + 0 + NotNullable + + Col427 + + + + Col427 + + 11 + + + + + + + Col428 + 428 + + 4 + 11 + 0 + NotNullable + + Col428 + + + + Col428 + + 11 + + + + + + + Col429 + 429 + + 4 + 11 + 0 + NotNullable + + Col429 + + + + Col429 + + 11 + + + + + + + Col430 + 430 + + 4 + 11 + 0 + NotNullable + + Col430 + + + + Col430 + + 11 + + + + + + + Col431 + 431 + + 4 + 11 + 0 + NotNullable + + Col431 + + + + Col431 + + 11 + + + + + + + Col432 + 432 + + 4 + 11 + 0 + NotNullable + + Col432 + + + + Col432 + + 11 + + + + + + + Col433 + 433 + + 4 + 11 + 0 + NotNullable + + Col433 + + + + Col433 + + 11 + + + + + + + Col434 + 434 + + 4 + 11 + 0 + NotNullable + + Col434 + + + + Col434 + + 11 + + + + + + + Col435 + 435 + + 4 + 11 + 0 + NotNullable + + Col435 + + + + Col435 + + 11 + + + + + + + Col436 + 436 + + 4 + 11 + 0 + NotNullable + + Col436 + + + + Col436 + + 11 + + + + + + + Col437 + 437 + + 4 + 11 + 0 + NotNullable + + Col437 + + + + Col437 + + 11 + + + + + + + Col438 + 438 + + 4 + 11 + 0 + NotNullable + + Col438 + + + + Col438 + + 11 + + + + + + + Col439 + 439 + + 4 + 11 + 0 + NotNullable + + Col439 + + + + Col439 + + 11 + + + + + + + Col440 + 440 + + 4 + 11 + 0 + NotNullable + + Col440 + + + + Col440 + + 11 + + + + + + + Col441 + 441 + + 4 + 11 + 0 + NotNullable + + Col441 + + + + Col441 + + 11 + + + + + + + Col442 + 442 + + 4 + 11 + 0 + NotNullable + + Col442 + + + + Col442 + + 11 + + + + + + + Col443 + 443 + + 4 + 11 + 0 + NotNullable + + Col443 + + + + Col443 + + 11 + + + + + + + Col444 + 444 + + 4 + 11 + 0 + NotNullable + + Col444 + + + + Col444 + + 11 + + + + + + + Col445 + 445 + + 4 + 11 + 0 + NotNullable + + Col445 + + + + Col445 + + 11 + + + + + + + Col446 + 446 + + 4 + 11 + 0 + NotNullable + + Col446 + + + + Col446 + + 11 + + + + + + + Col447 + 447 + + 4 + 11 + 0 + NotNullable + + Col447 + + + + Col447 + + 11 + + + + + + + Col448 + 448 + + 4 + 11 + 0 + NotNullable + + Col448 + + + + Col448 + + 11 + + + + + + + Col449 + 449 + + 4 + 11 + 0 + NotNullable + + Col449 + + + + Col449 + + 11 + + + + + + + Col450 + 450 + + 4 + 11 + 0 + NotNullable + + Col450 + + + + Col450 + + 11 + + + + + + + Col451 + 451 + + 4 + 11 + 0 + NotNullable + + Col451 + + + + Col451 + + 11 + + + + + + + Col452 + 452 + + 4 + 11 + 0 + NotNullable + + Col452 + + + + Col452 + + 11 + + + + + + + Col453 + 453 + + 4 + 11 + 0 + NotNullable + + Col453 + + + + Col453 + + 11 + + + + + + + Col454 + 454 + + 4 + 11 + 0 + NotNullable + + Col454 + + + + Col454 + + 11 + + + + + + + Col455 + 455 + + 4 + 11 + 0 + NotNullable + + Col455 + + + + Col455 + + 11 + + + + + + + Col456 + 456 + + 4 + 11 + 0 + NotNullable + + Col456 + + + + Col456 + + 11 + + + + + + + Col457 + 457 + + 4 + 11 + 0 + NotNullable + + Col457 + + + + Col457 + + 11 + + + + + + + Col458 + 458 + + 4 + 11 + 0 + NotNullable + + Col458 + + + + Col458 + + 11 + + + + + + + Col459 + 459 + + 4 + 11 + 0 + NotNullable + + Col459 + + + + Col459 + + 11 + + + + + + + Col460 + 460 + + 4 + 11 + 0 + NotNullable + + Col460 + + + + Col460 + + 11 + + + + + + + Col461 + 461 + + 4 + 11 + 0 + NotNullable + + Col461 + + + + Col461 + + 11 + + + + + + + Col462 + 462 + + 4 + 11 + 0 + NotNullable + + Col462 + + + + Col462 + + 11 + + + + + + + Col463 + 463 + + 4 + 11 + 0 + NotNullable + + Col463 + + + + Col463 + + 11 + + + + + + + Col464 + 464 + + 4 + 11 + 0 + NotNullable + + Col464 + + + + Col464 + + 11 + + + + + + + Col465 + 465 + + 4 + 11 + 0 + NotNullable + + Col465 + + + + Col465 + + 11 + + + + + + + Col466 + 466 + + 4 + 11 + 0 + NotNullable + + Col466 + + + + Col466 + + 11 + + + + + + + Col467 + 467 + + 4 + 11 + 0 + NotNullable + + Col467 + + + + Col467 + + 11 + + + + + + + Col468 + 468 + + 4 + 11 + 0 + NotNullable + + Col468 + + + + Col468 + + 11 + + + + + + + Col469 + 469 + + 4 + 11 + 0 + NotNullable + + Col469 + + + + Col469 + + 11 + + + + + + + Col470 + 470 + + 4 + 11 + 0 + NotNullable + + Col470 + + + + Col470 + + 11 + + + + + + + Col471 + 471 + + 4 + 11 + 0 + NotNullable + + Col471 + + + + Col471 + + 11 + + + + + + + Col472 + 472 + + 4 + 11 + 0 + NotNullable + + Col472 + + + + Col472 + + 11 + + + + + + + Col473 + 473 + + 4 + 11 + 0 + NotNullable + + Col473 + + + + Col473 + + 11 + + + + + + + Col474 + 474 + + 4 + 11 + 0 + NotNullable + + Col474 + + + + Col474 + + 11 + + + + + + + Col475 + 475 + + 4 + 11 + 0 + NotNullable + + Col475 + + + + Col475 + + 11 + + + + + + + Col476 + 476 + + 4 + 11 + 0 + NotNullable + + Col476 + + + + Col476 + + 11 + + + + + + + Col477 + 477 + + 4 + 11 + 0 + NotNullable + + Col477 + + + + Col477 + + 11 + + + + + + + Col478 + 478 + + 4 + 11 + 0 + NotNullable + + Col478 + + + + Col478 + + 11 + + + + + + + Col479 + 479 + + 4 + 11 + 0 + NotNullable + + Col479 + + + + Col479 + + 11 + + + + + + + Col480 + 480 + + 4 + 11 + 0 + NotNullable + + Col480 + + + + Col480 + + 11 + + + + + + + Col481 + 481 + + 4 + 11 + 0 + NotNullable + + Col481 + + + + Col481 + + 11 + + + + + + + Col482 + 482 + + 4 + 11 + 0 + NotNullable + + Col482 + + + + Col482 + + 11 + + + + + + + Col483 + 483 + + 4 + 11 + 0 + NotNullable + + Col483 + + + + Col483 + + 11 + + + + + + + Col484 + 484 + + 4 + 11 + 0 + NotNullable + + Col484 + + + + Col484 + + 11 + + + + + + + Col485 + 485 + + 4 + 11 + 0 + NotNullable + + Col485 + + + + Col485 + + 11 + + + + + + + Col486 + 486 + + 4 + 11 + 0 + NotNullable + + Col486 + + + + Col486 + + 11 + + + + + + + Col487 + 487 + + 4 + 11 + 0 + NotNullable + + Col487 + + + + Col487 + + 11 + + + + + + + Col488 + 488 + + 4 + 11 + 0 + NotNullable + + Col488 + + + + Col488 + + 11 + + + + + + + Col489 + 489 + + 4 + 11 + 0 + NotNullable + + Col489 + + + + Col489 + + 11 + + + + + + + Col490 + 490 + + 4 + 11 + 0 + NotNullable + + Col490 + + + + Col490 + + 11 + + + + + + + Col491 + 491 + + 4 + 11 + 0 + NotNullable + + Col491 + + + + Col491 + + 11 + + + + + + + Col492 + 492 + + 4 + 11 + 0 + NotNullable + + Col492 + + + + Col492 + + 11 + + + + + + + Col493 + 493 + + 4 + 11 + 0 + NotNullable + + Col493 + + + + Col493 + + 11 + + + + + + + Col494 + 494 + + 4 + 11 + 0 + NotNullable + + Col494 + + + + Col494 + + 11 + + + + + + + Col495 + 495 + + 4 + 11 + 0 + NotNullable + + Col495 + + + + Col495 + + 11 + + + + + + + Col496 + 496 + + 4 + 11 + 0 + NotNullable + + Col496 + + + + Col496 + + 11 + + + + + + + Col497 + 497 + + 4 + 11 + 0 + NotNullable + + Col497 + + + + Col497 + + 11 + + + + + + + Col498 + 498 + + 4 + 11 + 0 + NotNullable + + Col498 + + + + Col498 + + 11 + + + + + + + Col499 + 499 + + 4 + 11 + 0 + NotNullable + + Col499 + + + + Col499 + + 11 + + + + + + + Col500 + 500 + + 4 + 11 + 0 + NotNullable + + Col500 + + + + Col500 + + 11 + + + + + + + ]]> @@ -10998,6 +10999,7 @@ from string + 0 diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize60000.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize60000.rptdesign new file mode 100644 index 00000000000..ea17f1895ff --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSize60000.rptdesign @@ -0,0 +1,11185 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + Number Formats Test Report + + + queryText + 15112 + + + queryTimeOut + 15112 + + + rowFetchSize + 15112 + + + in + /templates/blank_report.gif + auto layout + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + nulls lowest + + + COL1 + measure + COL1 + COL1 + + + COL2 + measure + COL2 + COL2 + + + COL3 + measure + COL3 + COL3 + + + COL4 + measure + COL4 + COL4 + + + COL5 + measure + COL5 + COL5 + + + COL6 + measure + COL6 + COL6 + + + COL7 + measure + COL7 + COL7 + + + COL8 + measure + COL8 + COL8 + + + COL9 + measure + COL9 + COL9 + + + COL10 + measure + COL10 + COL10 + + + COL11 + measure + COL11 + COL11 + + + COL12 + measure + COL12 + COL12 + + + COL13 + measure + COL13 + COL13 + + + COL14 + measure + COL14 + COL14 + + + + + + + 1 + COL1 + integer + + + 2 + COL2 + integer + + + 3 + COL3 + integer + + + 4 + COL4 + integer + + + 5 + COL5 + integer + + + 6 + COL6 + integer + + + 7 + COL7 + integer + + + 8 + COL8 + integer + + + 9 + COL9 + integer + + + 10 + COL10 + integer + + + 11 + COL11 + integer + + + 12 + COL12 + integer + + + 13 + COL13 + integer + + + 14 + COL14 + integer + + + + 100000 + Data Source + + + 1 + COL1 + COL1 + integer + 4 + + + 2 + COL2 + COL2 + integer + 4 + + + 3 + COL3 + COL3 + integer + 4 + + + 4 + COL4 + COL4 + integer + 4 + + + 5 + COL5 + COL5 + integer + 4 + + + 6 + COL6 + COL6 + integer + 4 + + + 7 + COL7 + COL7 + integer + 4 + + + 8 + COL8 + COL8 + integer + 4 + + + 9 + COL9 + COL9 + integer + 4 + + + 10 + COL10 + COL10 + integer + 4 + + + 11 + COL11 + COL11 + integer + 4 + + + 12 + COL12 + COL12 + integer + 4 + + + 13 + COL13 + COL13 + integer + 4 + + + 14 + COL14 + COL14 + integer + 4 + + + + + + 2.0 + + + + + + + Col1 + 1 + + 4 + 11 + 0 + NotNullable + + Col1 + + + + Col1 + + 11 + + + + + + + Col2 + 2 + + 4 + 11 + 0 + NotNullable + + Col2 + + + + Col2 + + 11 + + + + + + + Col3 + 3 + + 4 + 11 + 0 + NotNullable + + Col3 + + + + Col3 + + 11 + + + + + + + Col4 + 4 + + 4 + 11 + 0 + NotNullable + + Col4 + + + + Col4 + + 11 + + + + + + + Col5 + 5 + + 4 + 11 + 0 + NotNullable + + Col5 + + + + Col5 + + 11 + + + + + + + Col6 + 6 + + 4 + 11 + 0 + NotNullable + + Col6 + + + + Col6 + + 11 + + + + + + + Col7 + 7 + + 4 + 11 + 0 + NotNullable + + Col7 + + + + Col7 + + 11 + + + + + + + Col8 + 8 + + 4 + 11 + 0 + NotNullable + + Col8 + + + + Col8 + + 11 + + + + + + + Col9 + 9 + + 4 + 11 + 0 + NotNullable + + Col9 + + + + Col9 + + 11 + + + + + + + Col10 + 10 + + 4 + 11 + 0 + NotNullable + + Col10 + + + + Col10 + + 11 + + + + + + + Col11 + 11 + + 4 + 11 + 0 + NotNullable + + Col11 + + + + Col11 + + 11 + + + + + + + Col12 + 12 + + 4 + 11 + 0 + NotNullable + + Col12 + + + + Col12 + + 11 + + + + + + + Col13 + 13 + + 4 + 11 + 0 + NotNullable + + Col13 + + + + Col13 + + 11 + + + + + + + Col14 + 14 + + 4 + 11 + 0 + NotNullable + + Col14 + + + + Col14 + + 11 + + + + + + + Col15 + 15 + + 4 + 11 + 0 + NotNullable + + Col15 + + + + Col15 + + 11 + + + + + + + Col16 + 16 + + 4 + 11 + 0 + NotNullable + + Col16 + + + + Col16 + + 11 + + + + + + + Col17 + 17 + + 4 + 11 + 0 + NotNullable + + Col17 + + + + Col17 + + 11 + + + + + + + Col18 + 18 + + 4 + 11 + 0 + NotNullable + + Col18 + + + + Col18 + + 11 + + + + + + + Col19 + 19 + + 4 + 11 + 0 + NotNullable + + Col19 + + + + Col19 + + 11 + + + + + + + Col20 + 20 + + 4 + 11 + 0 + NotNullable + + Col20 + + + + Col20 + + 11 + + + + + + + Col21 + 21 + + 4 + 11 + 0 + NotNullable + + Col21 + + + + Col21 + + 11 + + + + + + + Col22 + 22 + + 4 + 11 + 0 + NotNullable + + Col22 + + + + Col22 + + 11 + + + + + + + Col23 + 23 + + 4 + 11 + 0 + NotNullable + + Col23 + + + + Col23 + + 11 + + + + + + + Col24 + 24 + + 4 + 11 + 0 + NotNullable + + Col24 + + + + Col24 + + 11 + + + + + + + Col25 + 25 + + 4 + 11 + 0 + NotNullable + + Col25 + + + + Col25 + + 11 + + + + + + + Col26 + 26 + + 4 + 11 + 0 + NotNullable + + Col26 + + + + Col26 + + 11 + + + + + + + Col27 + 27 + + 4 + 11 + 0 + NotNullable + + Col27 + + + + Col27 + + 11 + + + + + + + Col28 + 28 + + 4 + 11 + 0 + NotNullable + + Col28 + + + + Col28 + + 11 + + + + + + + Col29 + 29 + + 4 + 11 + 0 + NotNullable + + Col29 + + + + Col29 + + 11 + + + + + + + Col30 + 30 + + 4 + 11 + 0 + NotNullable + + Col30 + + + + Col30 + + 11 + + + + + + + Col31 + 31 + + 4 + 11 + 0 + NotNullable + + Col31 + + + + Col31 + + 11 + + + + + + + Col32 + 32 + + 4 + 11 + 0 + NotNullable + + Col32 + + + + Col32 + + 11 + + + + + + + Col33 + 33 + + 4 + 11 + 0 + NotNullable + + Col33 + + + + Col33 + + 11 + + + + + + + Col34 + 34 + + 4 + 11 + 0 + NotNullable + + Col34 + + + + Col34 + + 11 + + + + + + + Col35 + 35 + + 4 + 11 + 0 + NotNullable + + Col35 + + + + Col35 + + 11 + + + + + + + Col36 + 36 + + 4 + 11 + 0 + NotNullable + + Col36 + + + + Col36 + + 11 + + + + + + + Col37 + 37 + + 4 + 11 + 0 + NotNullable + + Col37 + + + + Col37 + + 11 + + + + + + + Col38 + 38 + + 4 + 11 + 0 + NotNullable + + Col38 + + + + Col38 + + 11 + + + + + + + Col39 + 39 + + 4 + 11 + 0 + NotNullable + + Col39 + + + + Col39 + + 11 + + + + + + + Col40 + 40 + + 4 + 11 + 0 + NotNullable + + Col40 + + + + Col40 + + 11 + + + + + + + Col41 + 41 + + 4 + 11 + 0 + NotNullable + + Col41 + + + + Col41 + + 11 + + + + + + + Col42 + 42 + + 4 + 11 + 0 + NotNullable + + Col42 + + + + Col42 + + 11 + + + + + + + Col43 + 43 + + 4 + 11 + 0 + NotNullable + + Col43 + + + + Col43 + + 11 + + + + + + + Col44 + 44 + + 4 + 11 + 0 + NotNullable + + Col44 + + + + Col44 + + 11 + + + + + + + Col45 + 45 + + 4 + 11 + 0 + NotNullable + + Col45 + + + + Col45 + + 11 + + + + + + + Col46 + 46 + + 4 + 11 + 0 + NotNullable + + Col46 + + + + Col46 + + 11 + + + + + + + Col47 + 47 + + 4 + 11 + 0 + NotNullable + + Col47 + + + + Col47 + + 11 + + + + + + + Col48 + 48 + + 4 + 11 + 0 + NotNullable + + Col48 + + + + Col48 + + 11 + + + + + + + Col49 + 49 + + 4 + 11 + 0 + NotNullable + + Col49 + + + + Col49 + + 11 + + + + + + + Col50 + 50 + + 4 + 11 + 0 + NotNullable + + Col50 + + + + Col50 + + 11 + + + + + + + Col51 + 51 + + 4 + 11 + 0 + NotNullable + + Col51 + + + + Col51 + + 11 + + + + + + + Col52 + 52 + + 4 + 11 + 0 + NotNullable + + Col52 + + + + Col52 + + 11 + + + + + + + Col53 + 53 + + 4 + 11 + 0 + NotNullable + + Col53 + + + + Col53 + + 11 + + + + + + + Col54 + 54 + + 4 + 11 + 0 + NotNullable + + Col54 + + + + Col54 + + 11 + + + + + + + Col55 + 55 + + 4 + 11 + 0 + NotNullable + + Col55 + + + + Col55 + + 11 + + + + + + + Col56 + 56 + + 4 + 11 + 0 + NotNullable + + Col56 + + + + Col56 + + 11 + + + + + + + Col57 + 57 + + 4 + 11 + 0 + NotNullable + + Col57 + + + + Col57 + + 11 + + + + + + + Col58 + 58 + + 4 + 11 + 0 + NotNullable + + Col58 + + + + Col58 + + 11 + + + + + + + Col59 + 59 + + 4 + 11 + 0 + NotNullable + + Col59 + + + + Col59 + + 11 + + + + + + + Col60 + 60 + + 4 + 11 + 0 + NotNullable + + Col60 + + + + Col60 + + 11 + + + + + + + Col61 + 61 + + 4 + 11 + 0 + NotNullable + + Col61 + + + + Col61 + + 11 + + + + + + + Col62 + 62 + + 4 + 11 + 0 + NotNullable + + Col62 + + + + Col62 + + 11 + + + + + + + Col63 + 63 + + 4 + 11 + 0 + NotNullable + + Col63 + + + + Col63 + + 11 + + + + + + + Col64 + 64 + + 4 + 11 + 0 + NotNullable + + Col64 + + + + Col64 + + 11 + + + + + + + Col65 + 65 + + 4 + 11 + 0 + NotNullable + + Col65 + + + + Col65 + + 11 + + + + + + + Col66 + 66 + + 4 + 11 + 0 + NotNullable + + Col66 + + + + Col66 + + 11 + + + + + + + Col67 + 67 + + 4 + 11 + 0 + NotNullable + + Col67 + + + + Col67 + + 11 + + + + + + + Col68 + 68 + + 4 + 11 + 0 + NotNullable + + Col68 + + + + Col68 + + 11 + + + + + + + Col69 + 69 + + 4 + 11 + 0 + NotNullable + + Col69 + + + + Col69 + + 11 + + + + + + + Col70 + 70 + + 4 + 11 + 0 + NotNullable + + Col70 + + + + Col70 + + 11 + + + + + + + Col71 + 71 + + 4 + 11 + 0 + NotNullable + + Col71 + + + + Col71 + + 11 + + + + + + + Col72 + 72 + + 4 + 11 + 0 + NotNullable + + Col72 + + + + Col72 + + 11 + + + + + + + Col73 + 73 + + 4 + 11 + 0 + NotNullable + + Col73 + + + + Col73 + + 11 + + + + + + + Col74 + 74 + + 4 + 11 + 0 + NotNullable + + Col74 + + + + Col74 + + 11 + + + + + + + Col75 + 75 + + 4 + 11 + 0 + NotNullable + + Col75 + + + + Col75 + + 11 + + + + + + + Col76 + 76 + + 4 + 11 + 0 + NotNullable + + Col76 + + + + Col76 + + 11 + + + + + + + Col77 + 77 + + 4 + 11 + 0 + NotNullable + + Col77 + + + + Col77 + + 11 + + + + + + + Col78 + 78 + + 4 + 11 + 0 + NotNullable + + Col78 + + + + Col78 + + 11 + + + + + + + Col79 + 79 + + 4 + 11 + 0 + NotNullable + + Col79 + + + + Col79 + + 11 + + + + + + + Col80 + 80 + + 4 + 11 + 0 + NotNullable + + Col80 + + + + Col80 + + 11 + + + + + + + Col81 + 81 + + 4 + 11 + 0 + NotNullable + + Col81 + + + + Col81 + + 11 + + + + + + + Col82 + 82 + + 4 + 11 + 0 + NotNullable + + Col82 + + + + Col82 + + 11 + + + + + + + Col83 + 83 + + 4 + 11 + 0 + NotNullable + + Col83 + + + + Col83 + + 11 + + + + + + + Col84 + 84 + + 4 + 11 + 0 + NotNullable + + Col84 + + + + Col84 + + 11 + + + + + + + Col85 + 85 + + 4 + 11 + 0 + NotNullable + + Col85 + + + + Col85 + + 11 + + + + + + + Col86 + 86 + + 4 + 11 + 0 + NotNullable + + Col86 + + + + Col86 + + 11 + + + + + + + Col87 + 87 + + 4 + 11 + 0 + NotNullable + + Col87 + + + + Col87 + + 11 + + + + + + + Col88 + 88 + + 4 + 11 + 0 + NotNullable + + Col88 + + + + Col88 + + 11 + + + + + + + Col89 + 89 + + 4 + 11 + 0 + NotNullable + + Col89 + + + + Col89 + + 11 + + + + + + + Col90 + 90 + + 4 + 11 + 0 + NotNullable + + Col90 + + + + Col90 + + 11 + + + + + + + Col91 + 91 + + 4 + 11 + 0 + NotNullable + + Col91 + + + + Col91 + + 11 + + + + + + + Col92 + 92 + + 4 + 11 + 0 + NotNullable + + Col92 + + + + Col92 + + 11 + + + + + + + Col93 + 93 + + 4 + 11 + 0 + NotNullable + + Col93 + + + + Col93 + + 11 + + + + + + + Col94 + 94 + + 4 + 11 + 0 + NotNullable + + Col94 + + + + Col94 + + 11 + + + + + + + Col95 + 95 + + 4 + 11 + 0 + NotNullable + + Col95 + + + + Col95 + + 11 + + + + + + + Col96 + 96 + + 4 + 11 + 0 + NotNullable + + Col96 + + + + Col96 + + 11 + + + + + + + Col97 + 97 + + 4 + 11 + 0 + NotNullable + + Col97 + + + + Col97 + + 11 + + + + + + + Col98 + 98 + + 4 + 11 + 0 + NotNullable + + Col98 + + + + Col98 + + 11 + + + + + + + Col99 + 99 + + 4 + 11 + 0 + NotNullable + + Col99 + + + + Col99 + + 11 + + + + + + + Col100 + 100 + + 4 + 11 + 0 + NotNullable + + Col100 + + + + Col100 + + 11 + + + + + + + Col101 + 101 + + 4 + 11 + 0 + NotNullable + + Col101 + + + + Col101 + + 11 + + + + + + + Col102 + 102 + + 4 + 11 + 0 + NotNullable + + Col102 + + + + Col102 + + 11 + + + + + + + Col103 + 103 + + 4 + 11 + 0 + NotNullable + + Col103 + + + + Col103 + + 11 + + + + + + + Col104 + 104 + + 4 + 11 + 0 + NotNullable + + Col104 + + + + Col104 + + 11 + + + + + + + Col105 + 105 + + 4 + 11 + 0 + NotNullable + + Col105 + + + + Col105 + + 11 + + + + + + + Col106 + 106 + + 4 + 11 + 0 + NotNullable + + Col106 + + + + Col106 + + 11 + + + + + + + Col107 + 107 + + 4 + 11 + 0 + NotNullable + + Col107 + + + + Col107 + + 11 + + + + + + + Col108 + 108 + + 4 + 11 + 0 + NotNullable + + Col108 + + + + Col108 + + 11 + + + + + + + Col109 + 109 + + 4 + 11 + 0 + NotNullable + + Col109 + + + + Col109 + + 11 + + + + + + + Col110 + 110 + + 4 + 11 + 0 + NotNullable + + Col110 + + + + Col110 + + 11 + + + + + + + Col111 + 111 + + 4 + 11 + 0 + NotNullable + + Col111 + + + + Col111 + + 11 + + + + + + + Col112 + 112 + + 4 + 11 + 0 + NotNullable + + Col112 + + + + Col112 + + 11 + + + + + + + Col113 + 113 + + 4 + 11 + 0 + NotNullable + + Col113 + + + + Col113 + + 11 + + + + + + + Col114 + 114 + + 4 + 11 + 0 + NotNullable + + Col114 + + + + Col114 + + 11 + + + + + + + Col115 + 115 + + 4 + 11 + 0 + NotNullable + + Col115 + + + + Col115 + + 11 + + + + + + + Col116 + 116 + + 4 + 11 + 0 + NotNullable + + Col116 + + + + Col116 + + 11 + + + + + + + Col117 + 117 + + 4 + 11 + 0 + NotNullable + + Col117 + + + + Col117 + + 11 + + + + + + + Col118 + 118 + + 4 + 11 + 0 + NotNullable + + Col118 + + + + Col118 + + 11 + + + + + + + Col119 + 119 + + 4 + 11 + 0 + NotNullable + + Col119 + + + + Col119 + + 11 + + + + + + + Col120 + 120 + + 4 + 11 + 0 + NotNullable + + Col120 + + + + Col120 + + 11 + + + + + + + Col121 + 121 + + 4 + 11 + 0 + NotNullable + + Col121 + + + + Col121 + + 11 + + + + + + + Col122 + 122 + + 4 + 11 + 0 + NotNullable + + Col122 + + + + Col122 + + 11 + + + + + + + Col123 + 123 + + 4 + 11 + 0 + NotNullable + + Col123 + + + + Col123 + + 11 + + + + + + + Col124 + 124 + + 4 + 11 + 0 + NotNullable + + Col124 + + + + Col124 + + 11 + + + + + + + Col125 + 125 + + 4 + 11 + 0 + NotNullable + + Col125 + + + + Col125 + + 11 + + + + + + + Col126 + 126 + + 4 + 11 + 0 + NotNullable + + Col126 + + + + Col126 + + 11 + + + + + + + Col127 + 127 + + 4 + 11 + 0 + NotNullable + + Col127 + + + + Col127 + + 11 + + + + + + + Col128 + 128 + + 4 + 11 + 0 + NotNullable + + Col128 + + + + Col128 + + 11 + + + + + + + Col129 + 129 + + 4 + 11 + 0 + NotNullable + + Col129 + + + + Col129 + + 11 + + + + + + + Col130 + 130 + + 4 + 11 + 0 + NotNullable + + Col130 + + + + Col130 + + 11 + + + + + + + Col131 + 131 + + 4 + 11 + 0 + NotNullable + + Col131 + + + + Col131 + + 11 + + + + + + + Col132 + 132 + + 4 + 11 + 0 + NotNullable + + Col132 + + + + Col132 + + 11 + + + + + + + Col133 + 133 + + 4 + 11 + 0 + NotNullable + + Col133 + + + + Col133 + + 11 + + + + + + + Col134 + 134 + + 4 + 11 + 0 + NotNullable + + Col134 + + + + Col134 + + 11 + + + + + + + Col135 + 135 + + 4 + 11 + 0 + NotNullable + + Col135 + + + + Col135 + + 11 + + + + + + + Col136 + 136 + + 4 + 11 + 0 + NotNullable + + Col136 + + + + Col136 + + 11 + + + + + + + Col137 + 137 + + 4 + 11 + 0 + NotNullable + + Col137 + + + + Col137 + + 11 + + + + + + + Col138 + 138 + + 4 + 11 + 0 + NotNullable + + Col138 + + + + Col138 + + 11 + + + + + + + Col139 + 139 + + 4 + 11 + 0 + NotNullable + + Col139 + + + + Col139 + + 11 + + + + + + + Col140 + 140 + + 4 + 11 + 0 + NotNullable + + Col140 + + + + Col140 + + 11 + + + + + + + Col141 + 141 + + 4 + 11 + 0 + NotNullable + + Col141 + + + + Col141 + + 11 + + + + + + + Col142 + 142 + + 4 + 11 + 0 + NotNullable + + Col142 + + + + Col142 + + 11 + + + + + + + Col143 + 143 + + 4 + 11 + 0 + NotNullable + + Col143 + + + + Col143 + + 11 + + + + + + + Col144 + 144 + + 4 + 11 + 0 + NotNullable + + Col144 + + + + Col144 + + 11 + + + + + + + Col145 + 145 + + 4 + 11 + 0 + NotNullable + + Col145 + + + + Col145 + + 11 + + + + + + + Col146 + 146 + + 4 + 11 + 0 + NotNullable + + Col146 + + + + Col146 + + 11 + + + + + + + Col147 + 147 + + 4 + 11 + 0 + NotNullable + + Col147 + + + + Col147 + + 11 + + + + + + + Col148 + 148 + + 4 + 11 + 0 + NotNullable + + Col148 + + + + Col148 + + 11 + + + + + + + Col149 + 149 + + 4 + 11 + 0 + NotNullable + + Col149 + + + + Col149 + + 11 + + + + + + + Col150 + 150 + + 4 + 11 + 0 + NotNullable + + Col150 + + + + Col150 + + 11 + + + + + + + Col151 + 151 + + 4 + 11 + 0 + NotNullable + + Col151 + + + + Col151 + + 11 + + + + + + + Col152 + 152 + + 4 + 11 + 0 + NotNullable + + Col152 + + + + Col152 + + 11 + + + + + + + Col153 + 153 + + 4 + 11 + 0 + NotNullable + + Col153 + + + + Col153 + + 11 + + + + + + + Col154 + 154 + + 4 + 11 + 0 + NotNullable + + Col154 + + + + Col154 + + 11 + + + + + + + Col155 + 155 + + 4 + 11 + 0 + NotNullable + + Col155 + + + + Col155 + + 11 + + + + + + + Col156 + 156 + + 4 + 11 + 0 + NotNullable + + Col156 + + + + Col156 + + 11 + + + + + + + Col157 + 157 + + 4 + 11 + 0 + NotNullable + + Col157 + + + + Col157 + + 11 + + + + + + + Col158 + 158 + + 4 + 11 + 0 + NotNullable + + Col158 + + + + Col158 + + 11 + + + + + + + Col159 + 159 + + 4 + 11 + 0 + NotNullable + + Col159 + + + + Col159 + + 11 + + + + + + + Col160 + 160 + + 4 + 11 + 0 + NotNullable + + Col160 + + + + Col160 + + 11 + + + + + + + Col161 + 161 + + 4 + 11 + 0 + NotNullable + + Col161 + + + + Col161 + + 11 + + + + + + + Col162 + 162 + + 4 + 11 + 0 + NotNullable + + Col162 + + + + Col162 + + 11 + + + + + + + Col163 + 163 + + 4 + 11 + 0 + NotNullable + + Col163 + + + + Col163 + + 11 + + + + + + + Col164 + 164 + + 4 + 11 + 0 + NotNullable + + Col164 + + + + Col164 + + 11 + + + + + + + Col165 + 165 + + 4 + 11 + 0 + NotNullable + + Col165 + + + + Col165 + + 11 + + + + + + + Col166 + 166 + + 4 + 11 + 0 + NotNullable + + Col166 + + + + Col166 + + 11 + + + + + + + Col167 + 167 + + 4 + 11 + 0 + NotNullable + + Col167 + + + + Col167 + + 11 + + + + + + + Col168 + 168 + + 4 + 11 + 0 + NotNullable + + Col168 + + + + Col168 + + 11 + + + + + + + Col169 + 169 + + 4 + 11 + 0 + NotNullable + + Col169 + + + + Col169 + + 11 + + + + + + + Col170 + 170 + + 4 + 11 + 0 + NotNullable + + Col170 + + + + Col170 + + 11 + + + + + + + Col171 + 171 + + 4 + 11 + 0 + NotNullable + + Col171 + + + + Col171 + + 11 + + + + + + + Col172 + 172 + + 4 + 11 + 0 + NotNullable + + Col172 + + + + Col172 + + 11 + + + + + + + Col173 + 173 + + 4 + 11 + 0 + NotNullable + + Col173 + + + + Col173 + + 11 + + + + + + + Col174 + 174 + + 4 + 11 + 0 + NotNullable + + Col174 + + + + Col174 + + 11 + + + + + + + Col175 + 175 + + 4 + 11 + 0 + NotNullable + + Col175 + + + + Col175 + + 11 + + + + + + + Col176 + 176 + + 4 + 11 + 0 + NotNullable + + Col176 + + + + Col176 + + 11 + + + + + + + Col177 + 177 + + 4 + 11 + 0 + NotNullable + + Col177 + + + + Col177 + + 11 + + + + + + + Col178 + 178 + + 4 + 11 + 0 + NotNullable + + Col178 + + + + Col178 + + 11 + + + + + + + Col179 + 179 + + 4 + 11 + 0 + NotNullable + + Col179 + + + + Col179 + + 11 + + + + + + + Col180 + 180 + + 4 + 11 + 0 + NotNullable + + Col180 + + + + Col180 + + 11 + + + + + + + Col181 + 181 + + 4 + 11 + 0 + NotNullable + + Col181 + + + + Col181 + + 11 + + + + + + + Col182 + 182 + + 4 + 11 + 0 + NotNullable + + Col182 + + + + Col182 + + 11 + + + + + + + Col183 + 183 + + 4 + 11 + 0 + NotNullable + + Col183 + + + + Col183 + + 11 + + + + + + + Col184 + 184 + + 4 + 11 + 0 + NotNullable + + Col184 + + + + Col184 + + 11 + + + + + + + Col185 + 185 + + 4 + 11 + 0 + NotNullable + + Col185 + + + + Col185 + + 11 + + + + + + + Col186 + 186 + + 4 + 11 + 0 + NotNullable + + Col186 + + + + Col186 + + 11 + + + + + + + Col187 + 187 + + 4 + 11 + 0 + NotNullable + + Col187 + + + + Col187 + + 11 + + + + + + + Col188 + 188 + + 4 + 11 + 0 + NotNullable + + Col188 + + + + Col188 + + 11 + + + + + + + Col189 + 189 + + 4 + 11 + 0 + NotNullable + + Col189 + + + + Col189 + + 11 + + + + + + + Col190 + 190 + + 4 + 11 + 0 + NotNullable + + Col190 + + + + Col190 + + 11 + + + + + + + Col191 + 191 + + 4 + 11 + 0 + NotNullable + + Col191 + + + + Col191 + + 11 + + + + + + + Col192 + 192 + + 4 + 11 + 0 + NotNullable + + Col192 + + + + Col192 + + 11 + + + + + + + Col193 + 193 + + 4 + 11 + 0 + NotNullable + + Col193 + + + + Col193 + + 11 + + + + + + + Col194 + 194 + + 4 + 11 + 0 + NotNullable + + Col194 + + + + Col194 + + 11 + + + + + + + Col195 + 195 + + 4 + 11 + 0 + NotNullable + + Col195 + + + + Col195 + + 11 + + + + + + + Col196 + 196 + + 4 + 11 + 0 + NotNullable + + Col196 + + + + Col196 + + 11 + + + + + + + Col197 + 197 + + 4 + 11 + 0 + NotNullable + + Col197 + + + + Col197 + + 11 + + + + + + + Col198 + 198 + + 4 + 11 + 0 + NotNullable + + Col198 + + + + Col198 + + 11 + + + + + + + Col199 + 199 + + 4 + 11 + 0 + NotNullable + + Col199 + + + + Col199 + + 11 + + + + + + + Col200 + 200 + + 4 + 11 + 0 + NotNullable + + Col200 + + + + Col200 + + 11 + + + + + + + Col201 + 201 + + 4 + 11 + 0 + NotNullable + + Col201 + + + + Col201 + + 11 + + + + + + + Col202 + 202 + + 4 + 11 + 0 + NotNullable + + Col202 + + + + Col202 + + 11 + + + + + + + Col203 + 203 + + 4 + 11 + 0 + NotNullable + + Col203 + + + + Col203 + + 11 + + + + + + + Col204 + 204 + + 4 + 11 + 0 + NotNullable + + Col204 + + + + Col204 + + 11 + + + + + + + Col205 + 205 + + 4 + 11 + 0 + NotNullable + + Col205 + + + + Col205 + + 11 + + + + + + + Col206 + 206 + + 4 + 11 + 0 + NotNullable + + Col206 + + + + Col206 + + 11 + + + + + + + Col207 + 207 + + 4 + 11 + 0 + NotNullable + + Col207 + + + + Col207 + + 11 + + + + + + + Col208 + 208 + + 4 + 11 + 0 + NotNullable + + Col208 + + + + Col208 + + 11 + + + + + + + Col209 + 209 + + 4 + 11 + 0 + NotNullable + + Col209 + + + + Col209 + + 11 + + + + + + + Col210 + 210 + + 4 + 11 + 0 + NotNullable + + Col210 + + + + Col210 + + 11 + + + + + + + Col211 + 211 + + 4 + 11 + 0 + NotNullable + + Col211 + + + + Col211 + + 11 + + + + + + + Col212 + 212 + + 4 + 11 + 0 + NotNullable + + Col212 + + + + Col212 + + 11 + + + + + + + Col213 + 213 + + 4 + 11 + 0 + NotNullable + + Col213 + + + + Col213 + + 11 + + + + + + + Col214 + 214 + + 4 + 11 + 0 + NotNullable + + Col214 + + + + Col214 + + 11 + + + + + + + Col215 + 215 + + 4 + 11 + 0 + NotNullable + + Col215 + + + + Col215 + + 11 + + + + + + + Col216 + 216 + + 4 + 11 + 0 + NotNullable + + Col216 + + + + Col216 + + 11 + + + + + + + Col217 + 217 + + 4 + 11 + 0 + NotNullable + + Col217 + + + + Col217 + + 11 + + + + + + + Col218 + 218 + + 4 + 11 + 0 + NotNullable + + Col218 + + + + Col218 + + 11 + + + + + + + Col219 + 219 + + 4 + 11 + 0 + NotNullable + + Col219 + + + + Col219 + + 11 + + + + + + + Col220 + 220 + + 4 + 11 + 0 + NotNullable + + Col220 + + + + Col220 + + 11 + + + + + + + Col221 + 221 + + 4 + 11 + 0 + NotNullable + + Col221 + + + + Col221 + + 11 + + + + + + + Col222 + 222 + + 4 + 11 + 0 + NotNullable + + Col222 + + + + Col222 + + 11 + + + + + + + Col223 + 223 + + 4 + 11 + 0 + NotNullable + + Col223 + + + + Col223 + + 11 + + + + + + + Col224 + 224 + + 4 + 11 + 0 + NotNullable + + Col224 + + + + Col224 + + 11 + + + + + + + Col225 + 225 + + 4 + 11 + 0 + NotNullable + + Col225 + + + + Col225 + + 11 + + + + + + + Col226 + 226 + + 4 + 11 + 0 + NotNullable + + Col226 + + + + Col226 + + 11 + + + + + + + Col227 + 227 + + 4 + 11 + 0 + NotNullable + + Col227 + + + + Col227 + + 11 + + + + + + + Col228 + 228 + + 4 + 11 + 0 + NotNullable + + Col228 + + + + Col228 + + 11 + + + + + + + Col229 + 229 + + 4 + 11 + 0 + NotNullable + + Col229 + + + + Col229 + + 11 + + + + + + + Col230 + 230 + + 4 + 11 + 0 + NotNullable + + Col230 + + + + Col230 + + 11 + + + + + + + Col231 + 231 + + 4 + 11 + 0 + NotNullable + + Col231 + + + + Col231 + + 11 + + + + + + + Col232 + 232 + + 4 + 11 + 0 + NotNullable + + Col232 + + + + Col232 + + 11 + + + + + + + Col233 + 233 + + 4 + 11 + 0 + NotNullable + + Col233 + + + + Col233 + + 11 + + + + + + + Col234 + 234 + + 4 + 11 + 0 + NotNullable + + Col234 + + + + Col234 + + 11 + + + + + + + Col235 + 235 + + 4 + 11 + 0 + NotNullable + + Col235 + + + + Col235 + + 11 + + + + + + + Col236 + 236 + + 4 + 11 + 0 + NotNullable + + Col236 + + + + Col236 + + 11 + + + + + + + Col237 + 237 + + 4 + 11 + 0 + NotNullable + + Col237 + + + + Col237 + + 11 + + + + + + + Col238 + 238 + + 4 + 11 + 0 + NotNullable + + Col238 + + + + Col238 + + 11 + + + + + + + Col239 + 239 + + 4 + 11 + 0 + NotNullable + + Col239 + + + + Col239 + + 11 + + + + + + + Col240 + 240 + + 4 + 11 + 0 + NotNullable + + Col240 + + + + Col240 + + 11 + + + + + + + Col241 + 241 + + 4 + 11 + 0 + NotNullable + + Col241 + + + + Col241 + + 11 + + + + + + + Col242 + 242 + + 4 + 11 + 0 + NotNullable + + Col242 + + + + Col242 + + 11 + + + + + + + Col243 + 243 + + 4 + 11 + 0 + NotNullable + + Col243 + + + + Col243 + + 11 + + + + + + + Col244 + 244 + + 4 + 11 + 0 + NotNullable + + Col244 + + + + Col244 + + 11 + + + + + + + Col245 + 245 + + 4 + 11 + 0 + NotNullable + + Col245 + + + + Col245 + + 11 + + + + + + + Col246 + 246 + + 4 + 11 + 0 + NotNullable + + Col246 + + + + Col246 + + 11 + + + + + + + Col247 + 247 + + 4 + 11 + 0 + NotNullable + + Col247 + + + + Col247 + + 11 + + + + + + + Col248 + 248 + + 4 + 11 + 0 + NotNullable + + Col248 + + + + Col248 + + 11 + + + + + + + Col249 + 249 + + 4 + 11 + 0 + NotNullable + + Col249 + + + + Col249 + + 11 + + + + + + + Col250 + 250 + + 4 + 11 + 0 + NotNullable + + Col250 + + + + Col250 + + 11 + + + + + + + Col251 + 251 + + 4 + 11 + 0 + NotNullable + + Col251 + + + + Col251 + + 11 + + + + + + + Col252 + 252 + + 4 + 11 + 0 + NotNullable + + Col252 + + + + Col252 + + 11 + + + + + + + Col253 + 253 + + 4 + 11 + 0 + NotNullable + + Col253 + + + + Col253 + + 11 + + + + + + + Col254 + 254 + + 4 + 11 + 0 + NotNullable + + Col254 + + + + Col254 + + 11 + + + + + + + Col255 + 255 + + 4 + 11 + 0 + NotNullable + + Col255 + + + + Col255 + + 11 + + + + + + + Col256 + 256 + + 4 + 11 + 0 + NotNullable + + Col256 + + + + Col256 + + 11 + + + + + + + Col257 + 257 + + 4 + 11 + 0 + NotNullable + + Col257 + + + + Col257 + + 11 + + + + + + + Col258 + 258 + + 4 + 11 + 0 + NotNullable + + Col258 + + + + Col258 + + 11 + + + + + + + Col259 + 259 + + 4 + 11 + 0 + NotNullable + + Col259 + + + + Col259 + + 11 + + + + + + + Col260 + 260 + + 4 + 11 + 0 + NotNullable + + Col260 + + + + Col260 + + 11 + + + + + + + Col261 + 261 + + 4 + 11 + 0 + NotNullable + + Col261 + + + + Col261 + + 11 + + + + + + + Col262 + 262 + + 4 + 11 + 0 + NotNullable + + Col262 + + + + Col262 + + 11 + + + + + + + Col263 + 263 + + 4 + 11 + 0 + NotNullable + + Col263 + + + + Col263 + + 11 + + + + + + + Col264 + 264 + + 4 + 11 + 0 + NotNullable + + Col264 + + + + Col264 + + 11 + + + + + + + Col265 + 265 + + 4 + 11 + 0 + NotNullable + + Col265 + + + + Col265 + + 11 + + + + + + + Col266 + 266 + + 4 + 11 + 0 + NotNullable + + Col266 + + + + Col266 + + 11 + + + + + + + Col267 + 267 + + 4 + 11 + 0 + NotNullable + + Col267 + + + + Col267 + + 11 + + + + + + + Col268 + 268 + + 4 + 11 + 0 + NotNullable + + Col268 + + + + Col268 + + 11 + + + + + + + Col269 + 269 + + 4 + 11 + 0 + NotNullable + + Col269 + + + + Col269 + + 11 + + + + + + + Col270 + 270 + + 4 + 11 + 0 + NotNullable + + Col270 + + + + Col270 + + 11 + + + + + + + Col271 + 271 + + 4 + 11 + 0 + NotNullable + + Col271 + + + + Col271 + + 11 + + + + + + + Col272 + 272 + + 4 + 11 + 0 + NotNullable + + Col272 + + + + Col272 + + 11 + + + + + + + Col273 + 273 + + 4 + 11 + 0 + NotNullable + + Col273 + + + + Col273 + + 11 + + + + + + + Col274 + 274 + + 4 + 11 + 0 + NotNullable + + Col274 + + + + Col274 + + 11 + + + + + + + Col275 + 275 + + 4 + 11 + 0 + NotNullable + + Col275 + + + + Col275 + + 11 + + + + + + + Col276 + 276 + + 4 + 11 + 0 + NotNullable + + Col276 + + + + Col276 + + 11 + + + + + + + Col277 + 277 + + 4 + 11 + 0 + NotNullable + + Col277 + + + + Col277 + + 11 + + + + + + + Col278 + 278 + + 4 + 11 + 0 + NotNullable + + Col278 + + + + Col278 + + 11 + + + + + + + Col279 + 279 + + 4 + 11 + 0 + NotNullable + + Col279 + + + + Col279 + + 11 + + + + + + + Col280 + 280 + + 4 + 11 + 0 + NotNullable + + Col280 + + + + Col280 + + 11 + + + + + + + Col281 + 281 + + 4 + 11 + 0 + NotNullable + + Col281 + + + + Col281 + + 11 + + + + + + + Col282 + 282 + + 4 + 11 + 0 + NotNullable + + Col282 + + + + Col282 + + 11 + + + + + + + Col283 + 283 + + 4 + 11 + 0 + NotNullable + + Col283 + + + + Col283 + + 11 + + + + + + + Col284 + 284 + + 4 + 11 + 0 + NotNullable + + Col284 + + + + Col284 + + 11 + + + + + + + Col285 + 285 + + 4 + 11 + 0 + NotNullable + + Col285 + + + + Col285 + + 11 + + + + + + + Col286 + 286 + + 4 + 11 + 0 + NotNullable + + Col286 + + + + Col286 + + 11 + + + + + + + Col287 + 287 + + 4 + 11 + 0 + NotNullable + + Col287 + + + + Col287 + + 11 + + + + + + + Col288 + 288 + + 4 + 11 + 0 + NotNullable + + Col288 + + + + Col288 + + 11 + + + + + + + Col289 + 289 + + 4 + 11 + 0 + NotNullable + + Col289 + + + + Col289 + + 11 + + + + + + + Col290 + 290 + + 4 + 11 + 0 + NotNullable + + Col290 + + + + Col290 + + 11 + + + + + + + Col291 + 291 + + 4 + 11 + 0 + NotNullable + + Col291 + + + + Col291 + + 11 + + + + + + + Col292 + 292 + + 4 + 11 + 0 + NotNullable + + Col292 + + + + Col292 + + 11 + + + + + + + Col293 + 293 + + 4 + 11 + 0 + NotNullable + + Col293 + + + + Col293 + + 11 + + + + + + + Col294 + 294 + + 4 + 11 + 0 + NotNullable + + Col294 + + + + Col294 + + 11 + + + + + + + Col295 + 295 + + 4 + 11 + 0 + NotNullable + + Col295 + + + + Col295 + + 11 + + + + + + + Col296 + 296 + + 4 + 11 + 0 + NotNullable + + Col296 + + + + Col296 + + 11 + + + + + + + Col297 + 297 + + 4 + 11 + 0 + NotNullable + + Col297 + + + + Col297 + + 11 + + + + + + + Col298 + 298 + + 4 + 11 + 0 + NotNullable + + Col298 + + + + Col298 + + 11 + + + + + + + Col299 + 299 + + 4 + 11 + 0 + NotNullable + + Col299 + + + + Col299 + + 11 + + + + + + + Col300 + 300 + + 4 + 11 + 0 + NotNullable + + Col300 + + + + Col300 + + 11 + + + + + + + Col301 + 301 + + 4 + 11 + 0 + NotNullable + + Col301 + + + + Col301 + + 11 + + + + + + + Col302 + 302 + + 4 + 11 + 0 + NotNullable + + Col302 + + + + Col302 + + 11 + + + + + + + Col303 + 303 + + 4 + 11 + 0 + NotNullable + + Col303 + + + + Col303 + + 11 + + + + + + + Col304 + 304 + + 4 + 11 + 0 + NotNullable + + Col304 + + + + Col304 + + 11 + + + + + + + Col305 + 305 + + 4 + 11 + 0 + NotNullable + + Col305 + + + + Col305 + + 11 + + + + + + + Col306 + 306 + + 4 + 11 + 0 + NotNullable + + Col306 + + + + Col306 + + 11 + + + + + + + Col307 + 307 + + 4 + 11 + 0 + NotNullable + + Col307 + + + + Col307 + + 11 + + + + + + + Col308 + 308 + + 4 + 11 + 0 + NotNullable + + Col308 + + + + Col308 + + 11 + + + + + + + Col309 + 309 + + 4 + 11 + 0 + NotNullable + + Col309 + + + + Col309 + + 11 + + + + + + + Col310 + 310 + + 4 + 11 + 0 + NotNullable + + Col310 + + + + Col310 + + 11 + + + + + + + Col311 + 311 + + 4 + 11 + 0 + NotNullable + + Col311 + + + + Col311 + + 11 + + + + + + + Col312 + 312 + + 4 + 11 + 0 + NotNullable + + Col312 + + + + Col312 + + 11 + + + + + + + Col313 + 313 + + 4 + 11 + 0 + NotNullable + + Col313 + + + + Col313 + + 11 + + + + + + + Col314 + 314 + + 4 + 11 + 0 + NotNullable + + Col314 + + + + Col314 + + 11 + + + + + + + Col315 + 315 + + 4 + 11 + 0 + NotNullable + + Col315 + + + + Col315 + + 11 + + + + + + + Col316 + 316 + + 4 + 11 + 0 + NotNullable + + Col316 + + + + Col316 + + 11 + + + + + + + Col317 + 317 + + 4 + 11 + 0 + NotNullable + + Col317 + + + + Col317 + + 11 + + + + + + + Col318 + 318 + + 4 + 11 + 0 + NotNullable + + Col318 + + + + Col318 + + 11 + + + + + + + Col319 + 319 + + 4 + 11 + 0 + NotNullable + + Col319 + + + + Col319 + + 11 + + + + + + + Col320 + 320 + + 4 + 11 + 0 + NotNullable + + Col320 + + + + Col320 + + 11 + + + + + + + Col321 + 321 + + 4 + 11 + 0 + NotNullable + + Col321 + + + + Col321 + + 11 + + + + + + + Col322 + 322 + + 4 + 11 + 0 + NotNullable + + Col322 + + + + Col322 + + 11 + + + + + + + Col323 + 323 + + 4 + 11 + 0 + NotNullable + + Col323 + + + + Col323 + + 11 + + + + + + + Col324 + 324 + + 4 + 11 + 0 + NotNullable + + Col324 + + + + Col324 + + 11 + + + + + + + Col325 + 325 + + 4 + 11 + 0 + NotNullable + + Col325 + + + + Col325 + + 11 + + + + + + + Col326 + 326 + + 4 + 11 + 0 + NotNullable + + Col326 + + + + Col326 + + 11 + + + + + + + Col327 + 327 + + 4 + 11 + 0 + NotNullable + + Col327 + + + + Col327 + + 11 + + + + + + + Col328 + 328 + + 4 + 11 + 0 + NotNullable + + Col328 + + + + Col328 + + 11 + + + + + + + Col329 + 329 + + 4 + 11 + 0 + NotNullable + + Col329 + + + + Col329 + + 11 + + + + + + + Col330 + 330 + + 4 + 11 + 0 + NotNullable + + Col330 + + + + Col330 + + 11 + + + + + + + Col331 + 331 + + 4 + 11 + 0 + NotNullable + + Col331 + + + + Col331 + + 11 + + + + + + + Col332 + 332 + + 4 + 11 + 0 + NotNullable + + Col332 + + + + Col332 + + 11 + + + + + + + Col333 + 333 + + 4 + 11 + 0 + NotNullable + + Col333 + + + + Col333 + + 11 + + + + + + + Col334 + 334 + + 4 + 11 + 0 + NotNullable + + Col334 + + + + Col334 + + 11 + + + + + + + Col335 + 335 + + 4 + 11 + 0 + NotNullable + + Col335 + + + + Col335 + + 11 + + + + + + + Col336 + 336 + + 4 + 11 + 0 + NotNullable + + Col336 + + + + Col336 + + 11 + + + + + + + Col337 + 337 + + 4 + 11 + 0 + NotNullable + + Col337 + + + + Col337 + + 11 + + + + + + + Col338 + 338 + + 4 + 11 + 0 + NotNullable + + Col338 + + + + Col338 + + 11 + + + + + + + Col339 + 339 + + 4 + 11 + 0 + NotNullable + + Col339 + + + + Col339 + + 11 + + + + + + + Col340 + 340 + + 4 + 11 + 0 + NotNullable + + Col340 + + + + Col340 + + 11 + + + + + + + Col341 + 341 + + 4 + 11 + 0 + NotNullable + + Col341 + + + + Col341 + + 11 + + + + + + + Col342 + 342 + + 4 + 11 + 0 + NotNullable + + Col342 + + + + Col342 + + 11 + + + + + + + Col343 + 343 + + 4 + 11 + 0 + NotNullable + + Col343 + + + + Col343 + + 11 + + + + + + + Col344 + 344 + + 4 + 11 + 0 + NotNullable + + Col344 + + + + Col344 + + 11 + + + + + + + Col345 + 345 + + 4 + 11 + 0 + NotNullable + + Col345 + + + + Col345 + + 11 + + + + + + + Col346 + 346 + + 4 + 11 + 0 + NotNullable + + Col346 + + + + Col346 + + 11 + + + + + + + Col347 + 347 + + 4 + 11 + 0 + NotNullable + + Col347 + + + + Col347 + + 11 + + + + + + + Col348 + 348 + + 4 + 11 + 0 + NotNullable + + Col348 + + + + Col348 + + 11 + + + + + + + Col349 + 349 + + 4 + 11 + 0 + NotNullable + + Col349 + + + + Col349 + + 11 + + + + + + + Col350 + 350 + + 4 + 11 + 0 + NotNullable + + Col350 + + + + Col350 + + 11 + + + + + + + Col351 + 351 + + 4 + 11 + 0 + NotNullable + + Col351 + + + + Col351 + + 11 + + + + + + + Col352 + 352 + + 4 + 11 + 0 + NotNullable + + Col352 + + + + Col352 + + 11 + + + + + + + Col353 + 353 + + 4 + 11 + 0 + NotNullable + + Col353 + + + + Col353 + + 11 + + + + + + + Col354 + 354 + + 4 + 11 + 0 + NotNullable + + Col354 + + + + Col354 + + 11 + + + + + + + Col355 + 355 + + 4 + 11 + 0 + NotNullable + + Col355 + + + + Col355 + + 11 + + + + + + + Col356 + 356 + + 4 + 11 + 0 + NotNullable + + Col356 + + + + Col356 + + 11 + + + + + + + Col357 + 357 + + 4 + 11 + 0 + NotNullable + + Col357 + + + + Col357 + + 11 + + + + + + + Col358 + 358 + + 4 + 11 + 0 + NotNullable + + Col358 + + + + Col358 + + 11 + + + + + + + Col359 + 359 + + 4 + 11 + 0 + NotNullable + + Col359 + + + + Col359 + + 11 + + + + + + + Col360 + 360 + + 4 + 11 + 0 + NotNullable + + Col360 + + + + Col360 + + 11 + + + + + + + Col361 + 361 + + 4 + 11 + 0 + NotNullable + + Col361 + + + + Col361 + + 11 + + + + + + + Col362 + 362 + + 4 + 11 + 0 + NotNullable + + Col362 + + + + Col362 + + 11 + + + + + + + Col363 + 363 + + 4 + 11 + 0 + NotNullable + + Col363 + + + + Col363 + + 11 + + + + + + + Col364 + 364 + + 4 + 11 + 0 + NotNullable + + Col364 + + + + Col364 + + 11 + + + + + + + Col365 + 365 + + 4 + 11 + 0 + NotNullable + + Col365 + + + + Col365 + + 11 + + + + + + + Col366 + 366 + + 4 + 11 + 0 + NotNullable + + Col366 + + + + Col366 + + 11 + + + + + + + Col367 + 367 + + 4 + 11 + 0 + NotNullable + + Col367 + + + + Col367 + + 11 + + + + + + + Col368 + 368 + + 4 + 11 + 0 + NotNullable + + Col368 + + + + Col368 + + 11 + + + + + + + Col369 + 369 + + 4 + 11 + 0 + NotNullable + + Col369 + + + + Col369 + + 11 + + + + + + + Col370 + 370 + + 4 + 11 + 0 + NotNullable + + Col370 + + + + Col370 + + 11 + + + + + + + Col371 + 371 + + 4 + 11 + 0 + NotNullable + + Col371 + + + + Col371 + + 11 + + + + + + + Col372 + 372 + + 4 + 11 + 0 + NotNullable + + Col372 + + + + Col372 + + 11 + + + + + + + Col373 + 373 + + 4 + 11 + 0 + NotNullable + + Col373 + + + + Col373 + + 11 + + + + + + + Col374 + 374 + + 4 + 11 + 0 + NotNullable + + Col374 + + + + Col374 + + 11 + + + + + + + Col375 + 375 + + 4 + 11 + 0 + NotNullable + + Col375 + + + + Col375 + + 11 + + + + + + + Col376 + 376 + + 4 + 11 + 0 + NotNullable + + Col376 + + + + Col376 + + 11 + + + + + + + Col377 + 377 + + 4 + 11 + 0 + NotNullable + + Col377 + + + + Col377 + + 11 + + + + + + + Col378 + 378 + + 4 + 11 + 0 + NotNullable + + Col378 + + + + Col378 + + 11 + + + + + + + Col379 + 379 + + 4 + 11 + 0 + NotNullable + + Col379 + + + + Col379 + + 11 + + + + + + + Col380 + 380 + + 4 + 11 + 0 + NotNullable + + Col380 + + + + Col380 + + 11 + + + + + + + Col381 + 381 + + 4 + 11 + 0 + NotNullable + + Col381 + + + + Col381 + + 11 + + + + + + + Col382 + 382 + + 4 + 11 + 0 + NotNullable + + Col382 + + + + Col382 + + 11 + + + + + + + Col383 + 383 + + 4 + 11 + 0 + NotNullable + + Col383 + + + + Col383 + + 11 + + + + + + + Col384 + 384 + + 4 + 11 + 0 + NotNullable + + Col384 + + + + Col384 + + 11 + + + + + + + Col385 + 385 + + 4 + 11 + 0 + NotNullable + + Col385 + + + + Col385 + + 11 + + + + + + + Col386 + 386 + + 4 + 11 + 0 + NotNullable + + Col386 + + + + Col386 + + 11 + + + + + + + Col387 + 387 + + 4 + 11 + 0 + NotNullable + + Col387 + + + + Col387 + + 11 + + + + + + + Col388 + 388 + + 4 + 11 + 0 + NotNullable + + Col388 + + + + Col388 + + 11 + + + + + + + Col389 + 389 + + 4 + 11 + 0 + NotNullable + + Col389 + + + + Col389 + + 11 + + + + + + + Col390 + 390 + + 4 + 11 + 0 + NotNullable + + Col390 + + + + Col390 + + 11 + + + + + + + Col391 + 391 + + 4 + 11 + 0 + NotNullable + + Col391 + + + + Col391 + + 11 + + + + + + + Col392 + 392 + + 4 + 11 + 0 + NotNullable + + Col392 + + + + Col392 + + 11 + + + + + + + Col393 + 393 + + 4 + 11 + 0 + NotNullable + + Col393 + + + + Col393 + + 11 + + + + + + + Col394 + 394 + + 4 + 11 + 0 + NotNullable + + Col394 + + + + Col394 + + 11 + + + + + + + Col395 + 395 + + 4 + 11 + 0 + NotNullable + + Col395 + + + + Col395 + + 11 + + + + + + + Col396 + 396 + + 4 + 11 + 0 + NotNullable + + Col396 + + + + Col396 + + 11 + + + + + + + Col397 + 397 + + 4 + 11 + 0 + NotNullable + + Col397 + + + + Col397 + + 11 + + + + + + + Col398 + 398 + + 4 + 11 + 0 + NotNullable + + Col398 + + + + Col398 + + 11 + + + + + + + Col399 + 399 + + 4 + 11 + 0 + NotNullable + + Col399 + + + + Col399 + + 11 + + + + + + + Col400 + 400 + + 4 + 11 + 0 + NotNullable + + Col400 + + + + Col400 + + 11 + + + + + + + Col401 + 401 + + 4 + 11 + 0 + NotNullable + + Col401 + + + + Col401 + + 11 + + + + + + + Col402 + 402 + + 4 + 11 + 0 + NotNullable + + Col402 + + + + Col402 + + 11 + + + + + + + Col403 + 403 + + 4 + 11 + 0 + NotNullable + + Col403 + + + + Col403 + + 11 + + + + + + + Col404 + 404 + + 4 + 11 + 0 + NotNullable + + Col404 + + + + Col404 + + 11 + + + + + + + Col405 + 405 + + 4 + 11 + 0 + NotNullable + + Col405 + + + + Col405 + + 11 + + + + + + + Col406 + 406 + + 4 + 11 + 0 + NotNullable + + Col406 + + + + Col406 + + 11 + + + + + + + Col407 + 407 + + 4 + 11 + 0 + NotNullable + + Col407 + + + + Col407 + + 11 + + + + + + + Col408 + 408 + + 4 + 11 + 0 + NotNullable + + Col408 + + + + Col408 + + 11 + + + + + + + Col409 + 409 + + 4 + 11 + 0 + NotNullable + + Col409 + + + + Col409 + + 11 + + + + + + + Col410 + 410 + + 4 + 11 + 0 + NotNullable + + Col410 + + + + Col410 + + 11 + + + + + + + Col411 + 411 + + 4 + 11 + 0 + NotNullable + + Col411 + + + + Col411 + + 11 + + + + + + + Col412 + 412 + + 4 + 11 + 0 + NotNullable + + Col412 + + + + Col412 + + 11 + + + + + + + Col413 + 413 + + 4 + 11 + 0 + NotNullable + + Col413 + + + + Col413 + + 11 + + + + + + + Col414 + 414 + + 4 + 11 + 0 + NotNullable + + Col414 + + + + Col414 + + 11 + + + + + + + Col415 + 415 + + 4 + 11 + 0 + NotNullable + + Col415 + + + + Col415 + + 11 + + + + + + + Col416 + 416 + + 4 + 11 + 0 + NotNullable + + Col416 + + + + Col416 + + 11 + + + + + + + Col417 + 417 + + 4 + 11 + 0 + NotNullable + + Col417 + + + + Col417 + + 11 + + + + + + + Col418 + 418 + + 4 + 11 + 0 + NotNullable + + Col418 + + + + Col418 + + 11 + + + + + + + Col419 + 419 + + 4 + 11 + 0 + NotNullable + + Col419 + + + + Col419 + + 11 + + + + + + + Col420 + 420 + + 4 + 11 + 0 + NotNullable + + Col420 + + + + Col420 + + 11 + + + + + + + Col421 + 421 + + 4 + 11 + 0 + NotNullable + + Col421 + + + + Col421 + + 11 + + + + + + + Col422 + 422 + + 4 + 11 + 0 + NotNullable + + Col422 + + + + Col422 + + 11 + + + + + + + Col423 + 423 + + 4 + 11 + 0 + NotNullable + + Col423 + + + + Col423 + + 11 + + + + + + + Col424 + 424 + + 4 + 11 + 0 + NotNullable + + Col424 + + + + Col424 + + 11 + + + + + + + Col425 + 425 + + 4 + 11 + 0 + NotNullable + + Col425 + + + + Col425 + + 11 + + + + + + + Col426 + 426 + + 4 + 11 + 0 + NotNullable + + Col426 + + + + Col426 + + 11 + + + + + + + Col427 + 427 + + 4 + 11 + 0 + NotNullable + + Col427 + + + + Col427 + + 11 + + + + + + + Col428 + 428 + + 4 + 11 + 0 + NotNullable + + Col428 + + + + Col428 + + 11 + + + + + + + Col429 + 429 + + 4 + 11 + 0 + NotNullable + + Col429 + + + + Col429 + + 11 + + + + + + + Col430 + 430 + + 4 + 11 + 0 + NotNullable + + Col430 + + + + Col430 + + 11 + + + + + + + Col431 + 431 + + 4 + 11 + 0 + NotNullable + + Col431 + + + + Col431 + + 11 + + + + + + + Col432 + 432 + + 4 + 11 + 0 + NotNullable + + Col432 + + + + Col432 + + 11 + + + + + + + Col433 + 433 + + 4 + 11 + 0 + NotNullable + + Col433 + + + + Col433 + + 11 + + + + + + + Col434 + 434 + + 4 + 11 + 0 + NotNullable + + Col434 + + + + Col434 + + 11 + + + + + + + Col435 + 435 + + 4 + 11 + 0 + NotNullable + + Col435 + + + + Col435 + + 11 + + + + + + + Col436 + 436 + + 4 + 11 + 0 + NotNullable + + Col436 + + + + Col436 + + 11 + + + + + + + Col437 + 437 + + 4 + 11 + 0 + NotNullable + + Col437 + + + + Col437 + + 11 + + + + + + + Col438 + 438 + + 4 + 11 + 0 + NotNullable + + Col438 + + + + Col438 + + 11 + + + + + + + Col439 + 439 + + 4 + 11 + 0 + NotNullable + + Col439 + + + + Col439 + + 11 + + + + + + + Col440 + 440 + + 4 + 11 + 0 + NotNullable + + Col440 + + + + Col440 + + 11 + + + + + + + Col441 + 441 + + 4 + 11 + 0 + NotNullable + + Col441 + + + + Col441 + + 11 + + + + + + + Col442 + 442 + + 4 + 11 + 0 + NotNullable + + Col442 + + + + Col442 + + 11 + + + + + + + Col443 + 443 + + 4 + 11 + 0 + NotNullable + + Col443 + + + + Col443 + + 11 + + + + + + + Col444 + 444 + + 4 + 11 + 0 + NotNullable + + Col444 + + + + Col444 + + 11 + + + + + + + Col445 + 445 + + 4 + 11 + 0 + NotNullable + + Col445 + + + + Col445 + + 11 + + + + + + + Col446 + 446 + + 4 + 11 + 0 + NotNullable + + Col446 + + + + Col446 + + 11 + + + + + + + Col447 + 447 + + 4 + 11 + 0 + NotNullable + + Col447 + + + + Col447 + + 11 + + + + + + + Col448 + 448 + + 4 + 11 + 0 + NotNullable + + Col448 + + + + Col448 + + 11 + + + + + + + Col449 + 449 + + 4 + 11 + 0 + NotNullable + + Col449 + + + + Col449 + + 11 + + + + + + + Col450 + 450 + + 4 + 11 + 0 + NotNullable + + Col450 + + + + Col450 + + 11 + + + + + + + Col451 + 451 + + 4 + 11 + 0 + NotNullable + + Col451 + + + + Col451 + + 11 + + + + + + + Col452 + 452 + + 4 + 11 + 0 + NotNullable + + Col452 + + + + Col452 + + 11 + + + + + + + Col453 + 453 + + 4 + 11 + 0 + NotNullable + + Col453 + + + + Col453 + + 11 + + + + + + + Col454 + 454 + + 4 + 11 + 0 + NotNullable + + Col454 + + + + Col454 + + 11 + + + + + + + Col455 + 455 + + 4 + 11 + 0 + NotNullable + + Col455 + + + + Col455 + + 11 + + + + + + + Col456 + 456 + + 4 + 11 + 0 + NotNullable + + Col456 + + + + Col456 + + 11 + + + + + + + Col457 + 457 + + 4 + 11 + 0 + NotNullable + + Col457 + + + + Col457 + + 11 + + + + + + + Col458 + 458 + + 4 + 11 + 0 + NotNullable + + Col458 + + + + Col458 + + 11 + + + + + + + Col459 + 459 + + 4 + 11 + 0 + NotNullable + + Col459 + + + + Col459 + + 11 + + + + + + + Col460 + 460 + + 4 + 11 + 0 + NotNullable + + Col460 + + + + Col460 + + 11 + + + + + + + Col461 + 461 + + 4 + 11 + 0 + NotNullable + + Col461 + + + + Col461 + + 11 + + + + + + + Col462 + 462 + + 4 + 11 + 0 + NotNullable + + Col462 + + + + Col462 + + 11 + + + + + + + Col463 + 463 + + 4 + 11 + 0 + NotNullable + + Col463 + + + + Col463 + + 11 + + + + + + + Col464 + 464 + + 4 + 11 + 0 + NotNullable + + Col464 + + + + Col464 + + 11 + + + + + + + Col465 + 465 + + 4 + 11 + 0 + NotNullable + + Col465 + + + + Col465 + + 11 + + + + + + + Col466 + 466 + + 4 + 11 + 0 + NotNullable + + Col466 + + + + Col466 + + 11 + + + + + + + Col467 + 467 + + 4 + 11 + 0 + NotNullable + + Col467 + + + + Col467 + + 11 + + + + + + + Col468 + 468 + + 4 + 11 + 0 + NotNullable + + Col468 + + + + Col468 + + 11 + + + + + + + Col469 + 469 + + 4 + 11 + 0 + NotNullable + + Col469 + + + + Col469 + + 11 + + + + + + + Col470 + 470 + + 4 + 11 + 0 + NotNullable + + Col470 + + + + Col470 + + 11 + + + + + + + Col471 + 471 + + 4 + 11 + 0 + NotNullable + + Col471 + + + + Col471 + + 11 + + + + + + + Col472 + 472 + + 4 + 11 + 0 + NotNullable + + Col472 + + + + Col472 + + 11 + + + + + + + Col473 + 473 + + 4 + 11 + 0 + NotNullable + + Col473 + + + + Col473 + + 11 + + + + + + + Col474 + 474 + + 4 + 11 + 0 + NotNullable + + Col474 + + + + Col474 + + 11 + + + + + + + Col475 + 475 + + 4 + 11 + 0 + NotNullable + + Col475 + + + + Col475 + + 11 + + + + + + + Col476 + 476 + + 4 + 11 + 0 + NotNullable + + Col476 + + + + Col476 + + 11 + + + + + + + Col477 + 477 + + 4 + 11 + 0 + NotNullable + + Col477 + + + + Col477 + + 11 + + + + + + + Col478 + 478 + + 4 + 11 + 0 + NotNullable + + Col478 + + + + Col478 + + 11 + + + + + + + Col479 + 479 + + 4 + 11 + 0 + NotNullable + + Col479 + + + + Col479 + + 11 + + + + + + + Col480 + 480 + + 4 + 11 + 0 + NotNullable + + Col480 + + + + Col480 + + 11 + + + + + + + Col481 + 481 + + 4 + 11 + 0 + NotNullable + + Col481 + + + + Col481 + + 11 + + + + + + + Col482 + 482 + + 4 + 11 + 0 + NotNullable + + Col482 + + + + Col482 + + 11 + + + + + + + Col483 + 483 + + 4 + 11 + 0 + NotNullable + + Col483 + + + + Col483 + + 11 + + + + + + + Col484 + 484 + + 4 + 11 + 0 + NotNullable + + Col484 + + + + Col484 + + 11 + + + + + + + Col485 + 485 + + 4 + 11 + 0 + NotNullable + + Col485 + + + + Col485 + + 11 + + + + + + + Col486 + 486 + + 4 + 11 + 0 + NotNullable + + Col486 + + + + Col486 + + 11 + + + + + + + Col487 + 487 + + 4 + 11 + 0 + NotNullable + + Col487 + + + + Col487 + + 11 + + + + + + + Col488 + 488 + + 4 + 11 + 0 + NotNullable + + Col488 + + + + Col488 + + 11 + + + + + + + Col489 + 489 + + 4 + 11 + 0 + NotNullable + + Col489 + + + + Col489 + + 11 + + + + + + + Col490 + 490 + + 4 + 11 + 0 + NotNullable + + Col490 + + + + Col490 + + 11 + + + + + + + Col491 + 491 + + 4 + 11 + 0 + NotNullable + + Col491 + + + + Col491 + + 11 + + + + + + + Col492 + 492 + + 4 + 11 + 0 + NotNullable + + Col492 + + + + Col492 + + 11 + + + + + + + Col493 + 493 + + 4 + 11 + 0 + NotNullable + + Col493 + + + + Col493 + + 11 + + + + + + + Col494 + 494 + + 4 + 11 + 0 + NotNullable + + Col494 + + + + Col494 + + 11 + + + + + + + Col495 + 495 + + 4 + 11 + 0 + NotNullable + + Col495 + + + + Col495 + + 11 + + + + + + + Col496 + 496 + + 4 + 11 + 0 + NotNullable + + Col496 + + + + Col496 + + 11 + + + + + + + Col497 + 497 + + 4 + 11 + 0 + NotNullable + + Col497 + + + + Col497 + + 11 + + + + + + + Col498 + 498 + + 4 + 11 + 0 + NotNullable + + Col498 + + + + Col498 + + 11 + + + + + + + Col499 + 499 + + 4 + 11 + 0 + NotNullable + + Col499 + + + + Col499 + + 11 + + + + + + + Col500 + 500 + + 4 + 11 + 0 + NotNullable + + Col500 + + + + Col500 + + 11 + + + + + + + +]]> + + + + + + + + + + + + + a4 + landscape + 0.5cm + 0.5cm + 0.5cm + 0.5cm + + + html + new Date()]]> + + + + + + + Mega Data Set + + + COL1 + COL1 + dataSetRow["COL1"] + integer + + + COL2 + COL2 + dataSetRow["COL2"] + string + + + COL3 + COL3 + dataSetRow["COL3"] + string + + + COL4 + COL4 + dataSetRow["COL4"] + string + + + COL5 + COL5 + dataSetRow["COL5"] + string + + + COL6 + COL6 + dataSetRow["COL6"] + integer + + + COL7 + COL7 + dataSetRow["COL7"] + string + + + COL8 + COL8 + dataSetRow["COL8"] + string + + + COL9 + COL9 + dataSetRow["COL9"] + string + + + COL10 + COL10 + dataSetRow["COL10"] + string + + + COL11 + COL11 + dataSetRow["COL11"] + integer + + + COL12 + COL12 + dataSetRow["COL12"] + string + + + COL13 + COL13 + dataSetRow["COL13"] + string + + + COL14 + COL14 + dataSetRow["COL14"] + string + + + 60000 + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + COL1 + + + + + COL2 + + + + + COL3 + + + + + COL4 + + + + + COL5 + + + + + COL6 + + + + + COL7 + + + + + COL8 + + + + + COL9 + + + + + COL10 + + + + + COL11 + + + + + COL12 + + + + + COL13 + + + + + COL14 + + + + +
+ + + + + + + + + + + + + + + + +
+
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeFixedLayout.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeFixedLayout.rptdesign new file mode 100644 index 00000000000..f7555d6547b --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeFixedLayout.rptdesign @@ -0,0 +1,11185 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + Number Formats Test Report + + + queryText + 15112 + + + queryTimeOut + 15112 + + + rowFetchSize + 15112 + + + in + /templates/blank_report.gif + fixed layout + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + nulls lowest + + + COL1 + measure + COL1 + COL1 + + + COL2 + measure + COL2 + COL2 + + + COL3 + measure + COL3 + COL3 + + + COL4 + measure + COL4 + COL4 + + + COL5 + measure + COL5 + COL5 + + + COL6 + measure + COL6 + COL6 + + + COL7 + measure + COL7 + COL7 + + + COL8 + measure + COL8 + COL8 + + + COL9 + measure + COL9 + COL9 + + + COL10 + measure + COL10 + COL10 + + + COL11 + measure + COL11 + COL11 + + + COL12 + measure + COL12 + COL12 + + + COL13 + measure + COL13 + COL13 + + + COL14 + measure + COL14 + COL14 + + + + + + + 1 + COL1 + integer + + + 2 + COL2 + integer + + + 3 + COL3 + integer + + + 4 + COL4 + integer + + + 5 + COL5 + integer + + + 6 + COL6 + integer + + + 7 + COL7 + integer + + + 8 + COL8 + integer + + + 9 + COL9 + integer + + + 10 + COL10 + integer + + + 11 + COL11 + integer + + + 12 + COL12 + integer + + + 13 + COL13 + integer + + + 14 + COL14 + integer + + + + 100000 + Data Source + + + 1 + COL1 + COL1 + integer + 4 + + + 2 + COL2 + COL2 + integer + 4 + + + 3 + COL3 + COL3 + integer + 4 + + + 4 + COL4 + COL4 + integer + 4 + + + 5 + COL5 + COL5 + integer + 4 + + + 6 + COL6 + COL6 + integer + 4 + + + 7 + COL7 + COL7 + integer + 4 + + + 8 + COL8 + COL8 + integer + 4 + + + 9 + COL9 + COL9 + integer + 4 + + + 10 + COL10 + COL10 + integer + 4 + + + 11 + COL11 + COL11 + integer + 4 + + + 12 + COL12 + COL12 + integer + 4 + + + 13 + COL13 + COL13 + integer + 4 + + + 14 + COL14 + COL14 + integer + 4 + + + + + + 2.0 + + + + + + + Col1 + 1 + + 4 + 11 + 0 + NotNullable + + Col1 + + + + Col1 + + 11 + + + + + + + Col2 + 2 + + 4 + 11 + 0 + NotNullable + + Col2 + + + + Col2 + + 11 + + + + + + + Col3 + 3 + + 4 + 11 + 0 + NotNullable + + Col3 + + + + Col3 + + 11 + + + + + + + Col4 + 4 + + 4 + 11 + 0 + NotNullable + + Col4 + + + + Col4 + + 11 + + + + + + + Col5 + 5 + + 4 + 11 + 0 + NotNullable + + Col5 + + + + Col5 + + 11 + + + + + + + Col6 + 6 + + 4 + 11 + 0 + NotNullable + + Col6 + + + + Col6 + + 11 + + + + + + + Col7 + 7 + + 4 + 11 + 0 + NotNullable + + Col7 + + + + Col7 + + 11 + + + + + + + Col8 + 8 + + 4 + 11 + 0 + NotNullable + + Col8 + + + + Col8 + + 11 + + + + + + + Col9 + 9 + + 4 + 11 + 0 + NotNullable + + Col9 + + + + Col9 + + 11 + + + + + + + Col10 + 10 + + 4 + 11 + 0 + NotNullable + + Col10 + + + + Col10 + + 11 + + + + + + + Col11 + 11 + + 4 + 11 + 0 + NotNullable + + Col11 + + + + Col11 + + 11 + + + + + + + Col12 + 12 + + 4 + 11 + 0 + NotNullable + + Col12 + + + + Col12 + + 11 + + + + + + + Col13 + 13 + + 4 + 11 + 0 + NotNullable + + Col13 + + + + Col13 + + 11 + + + + + + + Col14 + 14 + + 4 + 11 + 0 + NotNullable + + Col14 + + + + Col14 + + 11 + + + + + + + Col15 + 15 + + 4 + 11 + 0 + NotNullable + + Col15 + + + + Col15 + + 11 + + + + + + + Col16 + 16 + + 4 + 11 + 0 + NotNullable + + Col16 + + + + Col16 + + 11 + + + + + + + Col17 + 17 + + 4 + 11 + 0 + NotNullable + + Col17 + + + + Col17 + + 11 + + + + + + + Col18 + 18 + + 4 + 11 + 0 + NotNullable + + Col18 + + + + Col18 + + 11 + + + + + + + Col19 + 19 + + 4 + 11 + 0 + NotNullable + + Col19 + + + + Col19 + + 11 + + + + + + + Col20 + 20 + + 4 + 11 + 0 + NotNullable + + Col20 + + + + Col20 + + 11 + + + + + + + Col21 + 21 + + 4 + 11 + 0 + NotNullable + + Col21 + + + + Col21 + + 11 + + + + + + + Col22 + 22 + + 4 + 11 + 0 + NotNullable + + Col22 + + + + Col22 + + 11 + + + + + + + Col23 + 23 + + 4 + 11 + 0 + NotNullable + + Col23 + + + + Col23 + + 11 + + + + + + + Col24 + 24 + + 4 + 11 + 0 + NotNullable + + Col24 + + + + Col24 + + 11 + + + + + + + Col25 + 25 + + 4 + 11 + 0 + NotNullable + + Col25 + + + + Col25 + + 11 + + + + + + + Col26 + 26 + + 4 + 11 + 0 + NotNullable + + Col26 + + + + Col26 + + 11 + + + + + + + Col27 + 27 + + 4 + 11 + 0 + NotNullable + + Col27 + + + + Col27 + + 11 + + + + + + + Col28 + 28 + + 4 + 11 + 0 + NotNullable + + Col28 + + + + Col28 + + 11 + + + + + + + Col29 + 29 + + 4 + 11 + 0 + NotNullable + + Col29 + + + + Col29 + + 11 + + + + + + + Col30 + 30 + + 4 + 11 + 0 + NotNullable + + Col30 + + + + Col30 + + 11 + + + + + + + Col31 + 31 + + 4 + 11 + 0 + NotNullable + + Col31 + + + + Col31 + + 11 + + + + + + + Col32 + 32 + + 4 + 11 + 0 + NotNullable + + Col32 + + + + Col32 + + 11 + + + + + + + Col33 + 33 + + 4 + 11 + 0 + NotNullable + + Col33 + + + + Col33 + + 11 + + + + + + + Col34 + 34 + + 4 + 11 + 0 + NotNullable + + Col34 + + + + Col34 + + 11 + + + + + + + Col35 + 35 + + 4 + 11 + 0 + NotNullable + + Col35 + + + + Col35 + + 11 + + + + + + + Col36 + 36 + + 4 + 11 + 0 + NotNullable + + Col36 + + + + Col36 + + 11 + + + + + + + Col37 + 37 + + 4 + 11 + 0 + NotNullable + + Col37 + + + + Col37 + + 11 + + + + + + + Col38 + 38 + + 4 + 11 + 0 + NotNullable + + Col38 + + + + Col38 + + 11 + + + + + + + Col39 + 39 + + 4 + 11 + 0 + NotNullable + + Col39 + + + + Col39 + + 11 + + + + + + + Col40 + 40 + + 4 + 11 + 0 + NotNullable + + Col40 + + + + Col40 + + 11 + + + + + + + Col41 + 41 + + 4 + 11 + 0 + NotNullable + + Col41 + + + + Col41 + + 11 + + + + + + + Col42 + 42 + + 4 + 11 + 0 + NotNullable + + Col42 + + + + Col42 + + 11 + + + + + + + Col43 + 43 + + 4 + 11 + 0 + NotNullable + + Col43 + + + + Col43 + + 11 + + + + + + + Col44 + 44 + + 4 + 11 + 0 + NotNullable + + Col44 + + + + Col44 + + 11 + + + + + + + Col45 + 45 + + 4 + 11 + 0 + NotNullable + + Col45 + + + + Col45 + + 11 + + + + + + + Col46 + 46 + + 4 + 11 + 0 + NotNullable + + Col46 + + + + Col46 + + 11 + + + + + + + Col47 + 47 + + 4 + 11 + 0 + NotNullable + + Col47 + + + + Col47 + + 11 + + + + + + + Col48 + 48 + + 4 + 11 + 0 + NotNullable + + Col48 + + + + Col48 + + 11 + + + + + + + Col49 + 49 + + 4 + 11 + 0 + NotNullable + + Col49 + + + + Col49 + + 11 + + + + + + + Col50 + 50 + + 4 + 11 + 0 + NotNullable + + Col50 + + + + Col50 + + 11 + + + + + + + Col51 + 51 + + 4 + 11 + 0 + NotNullable + + Col51 + + + + Col51 + + 11 + + + + + + + Col52 + 52 + + 4 + 11 + 0 + NotNullable + + Col52 + + + + Col52 + + 11 + + + + + + + Col53 + 53 + + 4 + 11 + 0 + NotNullable + + Col53 + + + + Col53 + + 11 + + + + + + + Col54 + 54 + + 4 + 11 + 0 + NotNullable + + Col54 + + + + Col54 + + 11 + + + + + + + Col55 + 55 + + 4 + 11 + 0 + NotNullable + + Col55 + + + + Col55 + + 11 + + + + + + + Col56 + 56 + + 4 + 11 + 0 + NotNullable + + Col56 + + + + Col56 + + 11 + + + + + + + Col57 + 57 + + 4 + 11 + 0 + NotNullable + + Col57 + + + + Col57 + + 11 + + + + + + + Col58 + 58 + + 4 + 11 + 0 + NotNullable + + Col58 + + + + Col58 + + 11 + + + + + + + Col59 + 59 + + 4 + 11 + 0 + NotNullable + + Col59 + + + + Col59 + + 11 + + + + + + + Col60 + 60 + + 4 + 11 + 0 + NotNullable + + Col60 + + + + Col60 + + 11 + + + + + + + Col61 + 61 + + 4 + 11 + 0 + NotNullable + + Col61 + + + + Col61 + + 11 + + + + + + + Col62 + 62 + + 4 + 11 + 0 + NotNullable + + Col62 + + + + Col62 + + 11 + + + + + + + Col63 + 63 + + 4 + 11 + 0 + NotNullable + + Col63 + + + + Col63 + + 11 + + + + + + + Col64 + 64 + + 4 + 11 + 0 + NotNullable + + Col64 + + + + Col64 + + 11 + + + + + + + Col65 + 65 + + 4 + 11 + 0 + NotNullable + + Col65 + + + + Col65 + + 11 + + + + + + + Col66 + 66 + + 4 + 11 + 0 + NotNullable + + Col66 + + + + Col66 + + 11 + + + + + + + Col67 + 67 + + 4 + 11 + 0 + NotNullable + + Col67 + + + + Col67 + + 11 + + + + + + + Col68 + 68 + + 4 + 11 + 0 + NotNullable + + Col68 + + + + Col68 + + 11 + + + + + + + Col69 + 69 + + 4 + 11 + 0 + NotNullable + + Col69 + + + + Col69 + + 11 + + + + + + + Col70 + 70 + + 4 + 11 + 0 + NotNullable + + Col70 + + + + Col70 + + 11 + + + + + + + Col71 + 71 + + 4 + 11 + 0 + NotNullable + + Col71 + + + + Col71 + + 11 + + + + + + + Col72 + 72 + + 4 + 11 + 0 + NotNullable + + Col72 + + + + Col72 + + 11 + + + + + + + Col73 + 73 + + 4 + 11 + 0 + NotNullable + + Col73 + + + + Col73 + + 11 + + + + + + + Col74 + 74 + + 4 + 11 + 0 + NotNullable + + Col74 + + + + Col74 + + 11 + + + + + + + Col75 + 75 + + 4 + 11 + 0 + NotNullable + + Col75 + + + + Col75 + + 11 + + + + + + + Col76 + 76 + + 4 + 11 + 0 + NotNullable + + Col76 + + + + Col76 + + 11 + + + + + + + Col77 + 77 + + 4 + 11 + 0 + NotNullable + + Col77 + + + + Col77 + + 11 + + + + + + + Col78 + 78 + + 4 + 11 + 0 + NotNullable + + Col78 + + + + Col78 + + 11 + + + + + + + Col79 + 79 + + 4 + 11 + 0 + NotNullable + + Col79 + + + + Col79 + + 11 + + + + + + + Col80 + 80 + + 4 + 11 + 0 + NotNullable + + Col80 + + + + Col80 + + 11 + + + + + + + Col81 + 81 + + 4 + 11 + 0 + NotNullable + + Col81 + + + + Col81 + + 11 + + + + + + + Col82 + 82 + + 4 + 11 + 0 + NotNullable + + Col82 + + + + Col82 + + 11 + + + + + + + Col83 + 83 + + 4 + 11 + 0 + NotNullable + + Col83 + + + + Col83 + + 11 + + + + + + + Col84 + 84 + + 4 + 11 + 0 + NotNullable + + Col84 + + + + Col84 + + 11 + + + + + + + Col85 + 85 + + 4 + 11 + 0 + NotNullable + + Col85 + + + + Col85 + + 11 + + + + + + + Col86 + 86 + + 4 + 11 + 0 + NotNullable + + Col86 + + + + Col86 + + 11 + + + + + + + Col87 + 87 + + 4 + 11 + 0 + NotNullable + + Col87 + + + + Col87 + + 11 + + + + + + + Col88 + 88 + + 4 + 11 + 0 + NotNullable + + Col88 + + + + Col88 + + 11 + + + + + + + Col89 + 89 + + 4 + 11 + 0 + NotNullable + + Col89 + + + + Col89 + + 11 + + + + + + + Col90 + 90 + + 4 + 11 + 0 + NotNullable + + Col90 + + + + Col90 + + 11 + + + + + + + Col91 + 91 + + 4 + 11 + 0 + NotNullable + + Col91 + + + + Col91 + + 11 + + + + + + + Col92 + 92 + + 4 + 11 + 0 + NotNullable + + Col92 + + + + Col92 + + 11 + + + + + + + Col93 + 93 + + 4 + 11 + 0 + NotNullable + + Col93 + + + + Col93 + + 11 + + + + + + + Col94 + 94 + + 4 + 11 + 0 + NotNullable + + Col94 + + + + Col94 + + 11 + + + + + + + Col95 + 95 + + 4 + 11 + 0 + NotNullable + + Col95 + + + + Col95 + + 11 + + + + + + + Col96 + 96 + + 4 + 11 + 0 + NotNullable + + Col96 + + + + Col96 + + 11 + + + + + + + Col97 + 97 + + 4 + 11 + 0 + NotNullable + + Col97 + + + + Col97 + + 11 + + + + + + + Col98 + 98 + + 4 + 11 + 0 + NotNullable + + Col98 + + + + Col98 + + 11 + + + + + + + Col99 + 99 + + 4 + 11 + 0 + NotNullable + + Col99 + + + + Col99 + + 11 + + + + + + + Col100 + 100 + + 4 + 11 + 0 + NotNullable + + Col100 + + + + Col100 + + 11 + + + + + + + Col101 + 101 + + 4 + 11 + 0 + NotNullable + + Col101 + + + + Col101 + + 11 + + + + + + + Col102 + 102 + + 4 + 11 + 0 + NotNullable + + Col102 + + + + Col102 + + 11 + + + + + + + Col103 + 103 + + 4 + 11 + 0 + NotNullable + + Col103 + + + + Col103 + + 11 + + + + + + + Col104 + 104 + + 4 + 11 + 0 + NotNullable + + Col104 + + + + Col104 + + 11 + + + + + + + Col105 + 105 + + 4 + 11 + 0 + NotNullable + + Col105 + + + + Col105 + + 11 + + + + + + + Col106 + 106 + + 4 + 11 + 0 + NotNullable + + Col106 + + + + Col106 + + 11 + + + + + + + Col107 + 107 + + 4 + 11 + 0 + NotNullable + + Col107 + + + + Col107 + + 11 + + + + + + + Col108 + 108 + + 4 + 11 + 0 + NotNullable + + Col108 + + + + Col108 + + 11 + + + + + + + Col109 + 109 + + 4 + 11 + 0 + NotNullable + + Col109 + + + + Col109 + + 11 + + + + + + + Col110 + 110 + + 4 + 11 + 0 + NotNullable + + Col110 + + + + Col110 + + 11 + + + + + + + Col111 + 111 + + 4 + 11 + 0 + NotNullable + + Col111 + + + + Col111 + + 11 + + + + + + + Col112 + 112 + + 4 + 11 + 0 + NotNullable + + Col112 + + + + Col112 + + 11 + + + + + + + Col113 + 113 + + 4 + 11 + 0 + NotNullable + + Col113 + + + + Col113 + + 11 + + + + + + + Col114 + 114 + + 4 + 11 + 0 + NotNullable + + Col114 + + + + Col114 + + 11 + + + + + + + Col115 + 115 + + 4 + 11 + 0 + NotNullable + + Col115 + + + + Col115 + + 11 + + + + + + + Col116 + 116 + + 4 + 11 + 0 + NotNullable + + Col116 + + + + Col116 + + 11 + + + + + + + Col117 + 117 + + 4 + 11 + 0 + NotNullable + + Col117 + + + + Col117 + + 11 + + + + + + + Col118 + 118 + + 4 + 11 + 0 + NotNullable + + Col118 + + + + Col118 + + 11 + + + + + + + Col119 + 119 + + 4 + 11 + 0 + NotNullable + + Col119 + + + + Col119 + + 11 + + + + + + + Col120 + 120 + + 4 + 11 + 0 + NotNullable + + Col120 + + + + Col120 + + 11 + + + + + + + Col121 + 121 + + 4 + 11 + 0 + NotNullable + + Col121 + + + + Col121 + + 11 + + + + + + + Col122 + 122 + + 4 + 11 + 0 + NotNullable + + Col122 + + + + Col122 + + 11 + + + + + + + Col123 + 123 + + 4 + 11 + 0 + NotNullable + + Col123 + + + + Col123 + + 11 + + + + + + + Col124 + 124 + + 4 + 11 + 0 + NotNullable + + Col124 + + + + Col124 + + 11 + + + + + + + Col125 + 125 + + 4 + 11 + 0 + NotNullable + + Col125 + + + + Col125 + + 11 + + + + + + + Col126 + 126 + + 4 + 11 + 0 + NotNullable + + Col126 + + + + Col126 + + 11 + + + + + + + Col127 + 127 + + 4 + 11 + 0 + NotNullable + + Col127 + + + + Col127 + + 11 + + + + + + + Col128 + 128 + + 4 + 11 + 0 + NotNullable + + Col128 + + + + Col128 + + 11 + + + + + + + Col129 + 129 + + 4 + 11 + 0 + NotNullable + + Col129 + + + + Col129 + + 11 + + + + + + + Col130 + 130 + + 4 + 11 + 0 + NotNullable + + Col130 + + + + Col130 + + 11 + + + + + + + Col131 + 131 + + 4 + 11 + 0 + NotNullable + + Col131 + + + + Col131 + + 11 + + + + + + + Col132 + 132 + + 4 + 11 + 0 + NotNullable + + Col132 + + + + Col132 + + 11 + + + + + + + Col133 + 133 + + 4 + 11 + 0 + NotNullable + + Col133 + + + + Col133 + + 11 + + + + + + + Col134 + 134 + + 4 + 11 + 0 + NotNullable + + Col134 + + + + Col134 + + 11 + + + + + + + Col135 + 135 + + 4 + 11 + 0 + NotNullable + + Col135 + + + + Col135 + + 11 + + + + + + + Col136 + 136 + + 4 + 11 + 0 + NotNullable + + Col136 + + + + Col136 + + 11 + + + + + + + Col137 + 137 + + 4 + 11 + 0 + NotNullable + + Col137 + + + + Col137 + + 11 + + + + + + + Col138 + 138 + + 4 + 11 + 0 + NotNullable + + Col138 + + + + Col138 + + 11 + + + + + + + Col139 + 139 + + 4 + 11 + 0 + NotNullable + + Col139 + + + + Col139 + + 11 + + + + + + + Col140 + 140 + + 4 + 11 + 0 + NotNullable + + Col140 + + + + Col140 + + 11 + + + + + + + Col141 + 141 + + 4 + 11 + 0 + NotNullable + + Col141 + + + + Col141 + + 11 + + + + + + + Col142 + 142 + + 4 + 11 + 0 + NotNullable + + Col142 + + + + Col142 + + 11 + + + + + + + Col143 + 143 + + 4 + 11 + 0 + NotNullable + + Col143 + + + + Col143 + + 11 + + + + + + + Col144 + 144 + + 4 + 11 + 0 + NotNullable + + Col144 + + + + Col144 + + 11 + + + + + + + Col145 + 145 + + 4 + 11 + 0 + NotNullable + + Col145 + + + + Col145 + + 11 + + + + + + + Col146 + 146 + + 4 + 11 + 0 + NotNullable + + Col146 + + + + Col146 + + 11 + + + + + + + Col147 + 147 + + 4 + 11 + 0 + NotNullable + + Col147 + + + + Col147 + + 11 + + + + + + + Col148 + 148 + + 4 + 11 + 0 + NotNullable + + Col148 + + + + Col148 + + 11 + + + + + + + Col149 + 149 + + 4 + 11 + 0 + NotNullable + + Col149 + + + + Col149 + + 11 + + + + + + + Col150 + 150 + + 4 + 11 + 0 + NotNullable + + Col150 + + + + Col150 + + 11 + + + + + + + Col151 + 151 + + 4 + 11 + 0 + NotNullable + + Col151 + + + + Col151 + + 11 + + + + + + + Col152 + 152 + + 4 + 11 + 0 + NotNullable + + Col152 + + + + Col152 + + 11 + + + + + + + Col153 + 153 + + 4 + 11 + 0 + NotNullable + + Col153 + + + + Col153 + + 11 + + + + + + + Col154 + 154 + + 4 + 11 + 0 + NotNullable + + Col154 + + + + Col154 + + 11 + + + + + + + Col155 + 155 + + 4 + 11 + 0 + NotNullable + + Col155 + + + + Col155 + + 11 + + + + + + + Col156 + 156 + + 4 + 11 + 0 + NotNullable + + Col156 + + + + Col156 + + 11 + + + + + + + Col157 + 157 + + 4 + 11 + 0 + NotNullable + + Col157 + + + + Col157 + + 11 + + + + + + + Col158 + 158 + + 4 + 11 + 0 + NotNullable + + Col158 + + + + Col158 + + 11 + + + + + + + Col159 + 159 + + 4 + 11 + 0 + NotNullable + + Col159 + + + + Col159 + + 11 + + + + + + + Col160 + 160 + + 4 + 11 + 0 + NotNullable + + Col160 + + + + Col160 + + 11 + + + + + + + Col161 + 161 + + 4 + 11 + 0 + NotNullable + + Col161 + + + + Col161 + + 11 + + + + + + + Col162 + 162 + + 4 + 11 + 0 + NotNullable + + Col162 + + + + Col162 + + 11 + + + + + + + Col163 + 163 + + 4 + 11 + 0 + NotNullable + + Col163 + + + + Col163 + + 11 + + + + + + + Col164 + 164 + + 4 + 11 + 0 + NotNullable + + Col164 + + + + Col164 + + 11 + + + + + + + Col165 + 165 + + 4 + 11 + 0 + NotNullable + + Col165 + + + + Col165 + + 11 + + + + + + + Col166 + 166 + + 4 + 11 + 0 + NotNullable + + Col166 + + + + Col166 + + 11 + + + + + + + Col167 + 167 + + 4 + 11 + 0 + NotNullable + + Col167 + + + + Col167 + + 11 + + + + + + + Col168 + 168 + + 4 + 11 + 0 + NotNullable + + Col168 + + + + Col168 + + 11 + + + + + + + Col169 + 169 + + 4 + 11 + 0 + NotNullable + + Col169 + + + + Col169 + + 11 + + + + + + + Col170 + 170 + + 4 + 11 + 0 + NotNullable + + Col170 + + + + Col170 + + 11 + + + + + + + Col171 + 171 + + 4 + 11 + 0 + NotNullable + + Col171 + + + + Col171 + + 11 + + + + + + + Col172 + 172 + + 4 + 11 + 0 + NotNullable + + Col172 + + + + Col172 + + 11 + + + + + + + Col173 + 173 + + 4 + 11 + 0 + NotNullable + + Col173 + + + + Col173 + + 11 + + + + + + + Col174 + 174 + + 4 + 11 + 0 + NotNullable + + Col174 + + + + Col174 + + 11 + + + + + + + Col175 + 175 + + 4 + 11 + 0 + NotNullable + + Col175 + + + + Col175 + + 11 + + + + + + + Col176 + 176 + + 4 + 11 + 0 + NotNullable + + Col176 + + + + Col176 + + 11 + + + + + + + Col177 + 177 + + 4 + 11 + 0 + NotNullable + + Col177 + + + + Col177 + + 11 + + + + + + + Col178 + 178 + + 4 + 11 + 0 + NotNullable + + Col178 + + + + Col178 + + 11 + + + + + + + Col179 + 179 + + 4 + 11 + 0 + NotNullable + + Col179 + + + + Col179 + + 11 + + + + + + + Col180 + 180 + + 4 + 11 + 0 + NotNullable + + Col180 + + + + Col180 + + 11 + + + + + + + Col181 + 181 + + 4 + 11 + 0 + NotNullable + + Col181 + + + + Col181 + + 11 + + + + + + + Col182 + 182 + + 4 + 11 + 0 + NotNullable + + Col182 + + + + Col182 + + 11 + + + + + + + Col183 + 183 + + 4 + 11 + 0 + NotNullable + + Col183 + + + + Col183 + + 11 + + + + + + + Col184 + 184 + + 4 + 11 + 0 + NotNullable + + Col184 + + + + Col184 + + 11 + + + + + + + Col185 + 185 + + 4 + 11 + 0 + NotNullable + + Col185 + + + + Col185 + + 11 + + + + + + + Col186 + 186 + + 4 + 11 + 0 + NotNullable + + Col186 + + + + Col186 + + 11 + + + + + + + Col187 + 187 + + 4 + 11 + 0 + NotNullable + + Col187 + + + + Col187 + + 11 + + + + + + + Col188 + 188 + + 4 + 11 + 0 + NotNullable + + Col188 + + + + Col188 + + 11 + + + + + + + Col189 + 189 + + 4 + 11 + 0 + NotNullable + + Col189 + + + + Col189 + + 11 + + + + + + + Col190 + 190 + + 4 + 11 + 0 + NotNullable + + Col190 + + + + Col190 + + 11 + + + + + + + Col191 + 191 + + 4 + 11 + 0 + NotNullable + + Col191 + + + + Col191 + + 11 + + + + + + + Col192 + 192 + + 4 + 11 + 0 + NotNullable + + Col192 + + + + Col192 + + 11 + + + + + + + Col193 + 193 + + 4 + 11 + 0 + NotNullable + + Col193 + + + + Col193 + + 11 + + + + + + + Col194 + 194 + + 4 + 11 + 0 + NotNullable + + Col194 + + + + Col194 + + 11 + + + + + + + Col195 + 195 + + 4 + 11 + 0 + NotNullable + + Col195 + + + + Col195 + + 11 + + + + + + + Col196 + 196 + + 4 + 11 + 0 + NotNullable + + Col196 + + + + Col196 + + 11 + + + + + + + Col197 + 197 + + 4 + 11 + 0 + NotNullable + + Col197 + + + + Col197 + + 11 + + + + + + + Col198 + 198 + + 4 + 11 + 0 + NotNullable + + Col198 + + + + Col198 + + 11 + + + + + + + Col199 + 199 + + 4 + 11 + 0 + NotNullable + + Col199 + + + + Col199 + + 11 + + + + + + + Col200 + 200 + + 4 + 11 + 0 + NotNullable + + Col200 + + + + Col200 + + 11 + + + + + + + Col201 + 201 + + 4 + 11 + 0 + NotNullable + + Col201 + + + + Col201 + + 11 + + + + + + + Col202 + 202 + + 4 + 11 + 0 + NotNullable + + Col202 + + + + Col202 + + 11 + + + + + + + Col203 + 203 + + 4 + 11 + 0 + NotNullable + + Col203 + + + + Col203 + + 11 + + + + + + + Col204 + 204 + + 4 + 11 + 0 + NotNullable + + Col204 + + + + Col204 + + 11 + + + + + + + Col205 + 205 + + 4 + 11 + 0 + NotNullable + + Col205 + + + + Col205 + + 11 + + + + + + + Col206 + 206 + + 4 + 11 + 0 + NotNullable + + Col206 + + + + Col206 + + 11 + + + + + + + Col207 + 207 + + 4 + 11 + 0 + NotNullable + + Col207 + + + + Col207 + + 11 + + + + + + + Col208 + 208 + + 4 + 11 + 0 + NotNullable + + Col208 + + + + Col208 + + 11 + + + + + + + Col209 + 209 + + 4 + 11 + 0 + NotNullable + + Col209 + + + + Col209 + + 11 + + + + + + + Col210 + 210 + + 4 + 11 + 0 + NotNullable + + Col210 + + + + Col210 + + 11 + + + + + + + Col211 + 211 + + 4 + 11 + 0 + NotNullable + + Col211 + + + + Col211 + + 11 + + + + + + + Col212 + 212 + + 4 + 11 + 0 + NotNullable + + Col212 + + + + Col212 + + 11 + + + + + + + Col213 + 213 + + 4 + 11 + 0 + NotNullable + + Col213 + + + + Col213 + + 11 + + + + + + + Col214 + 214 + + 4 + 11 + 0 + NotNullable + + Col214 + + + + Col214 + + 11 + + + + + + + Col215 + 215 + + 4 + 11 + 0 + NotNullable + + Col215 + + + + Col215 + + 11 + + + + + + + Col216 + 216 + + 4 + 11 + 0 + NotNullable + + Col216 + + + + Col216 + + 11 + + + + + + + Col217 + 217 + + 4 + 11 + 0 + NotNullable + + Col217 + + + + Col217 + + 11 + + + + + + + Col218 + 218 + + 4 + 11 + 0 + NotNullable + + Col218 + + + + Col218 + + 11 + + + + + + + Col219 + 219 + + 4 + 11 + 0 + NotNullable + + Col219 + + + + Col219 + + 11 + + + + + + + Col220 + 220 + + 4 + 11 + 0 + NotNullable + + Col220 + + + + Col220 + + 11 + + + + + + + Col221 + 221 + + 4 + 11 + 0 + NotNullable + + Col221 + + + + Col221 + + 11 + + + + + + + Col222 + 222 + + 4 + 11 + 0 + NotNullable + + Col222 + + + + Col222 + + 11 + + + + + + + Col223 + 223 + + 4 + 11 + 0 + NotNullable + + Col223 + + + + Col223 + + 11 + + + + + + + Col224 + 224 + + 4 + 11 + 0 + NotNullable + + Col224 + + + + Col224 + + 11 + + + + + + + Col225 + 225 + + 4 + 11 + 0 + NotNullable + + Col225 + + + + Col225 + + 11 + + + + + + + Col226 + 226 + + 4 + 11 + 0 + NotNullable + + Col226 + + + + Col226 + + 11 + + + + + + + Col227 + 227 + + 4 + 11 + 0 + NotNullable + + Col227 + + + + Col227 + + 11 + + + + + + + Col228 + 228 + + 4 + 11 + 0 + NotNullable + + Col228 + + + + Col228 + + 11 + + + + + + + Col229 + 229 + + 4 + 11 + 0 + NotNullable + + Col229 + + + + Col229 + + 11 + + + + + + + Col230 + 230 + + 4 + 11 + 0 + NotNullable + + Col230 + + + + Col230 + + 11 + + + + + + + Col231 + 231 + + 4 + 11 + 0 + NotNullable + + Col231 + + + + Col231 + + 11 + + + + + + + Col232 + 232 + + 4 + 11 + 0 + NotNullable + + Col232 + + + + Col232 + + 11 + + + + + + + Col233 + 233 + + 4 + 11 + 0 + NotNullable + + Col233 + + + + Col233 + + 11 + + + + + + + Col234 + 234 + + 4 + 11 + 0 + NotNullable + + Col234 + + + + Col234 + + 11 + + + + + + + Col235 + 235 + + 4 + 11 + 0 + NotNullable + + Col235 + + + + Col235 + + 11 + + + + + + + Col236 + 236 + + 4 + 11 + 0 + NotNullable + + Col236 + + + + Col236 + + 11 + + + + + + + Col237 + 237 + + 4 + 11 + 0 + NotNullable + + Col237 + + + + Col237 + + 11 + + + + + + + Col238 + 238 + + 4 + 11 + 0 + NotNullable + + Col238 + + + + Col238 + + 11 + + + + + + + Col239 + 239 + + 4 + 11 + 0 + NotNullable + + Col239 + + + + Col239 + + 11 + + + + + + + Col240 + 240 + + 4 + 11 + 0 + NotNullable + + Col240 + + + + Col240 + + 11 + + + + + + + Col241 + 241 + + 4 + 11 + 0 + NotNullable + + Col241 + + + + Col241 + + 11 + + + + + + + Col242 + 242 + + 4 + 11 + 0 + NotNullable + + Col242 + + + + Col242 + + 11 + + + + + + + Col243 + 243 + + 4 + 11 + 0 + NotNullable + + Col243 + + + + Col243 + + 11 + + + + + + + Col244 + 244 + + 4 + 11 + 0 + NotNullable + + Col244 + + + + Col244 + + 11 + + + + + + + Col245 + 245 + + 4 + 11 + 0 + NotNullable + + Col245 + + + + Col245 + + 11 + + + + + + + Col246 + 246 + + 4 + 11 + 0 + NotNullable + + Col246 + + + + Col246 + + 11 + + + + + + + Col247 + 247 + + 4 + 11 + 0 + NotNullable + + Col247 + + + + Col247 + + 11 + + + + + + + Col248 + 248 + + 4 + 11 + 0 + NotNullable + + Col248 + + + + Col248 + + 11 + + + + + + + Col249 + 249 + + 4 + 11 + 0 + NotNullable + + Col249 + + + + Col249 + + 11 + + + + + + + Col250 + 250 + + 4 + 11 + 0 + NotNullable + + Col250 + + + + Col250 + + 11 + + + + + + + Col251 + 251 + + 4 + 11 + 0 + NotNullable + + Col251 + + + + Col251 + + 11 + + + + + + + Col252 + 252 + + 4 + 11 + 0 + NotNullable + + Col252 + + + + Col252 + + 11 + + + + + + + Col253 + 253 + + 4 + 11 + 0 + NotNullable + + Col253 + + + + Col253 + + 11 + + + + + + + Col254 + 254 + + 4 + 11 + 0 + NotNullable + + Col254 + + + + Col254 + + 11 + + + + + + + Col255 + 255 + + 4 + 11 + 0 + NotNullable + + Col255 + + + + Col255 + + 11 + + + + + + + Col256 + 256 + + 4 + 11 + 0 + NotNullable + + Col256 + + + + Col256 + + 11 + + + + + + + Col257 + 257 + + 4 + 11 + 0 + NotNullable + + Col257 + + + + Col257 + + 11 + + + + + + + Col258 + 258 + + 4 + 11 + 0 + NotNullable + + Col258 + + + + Col258 + + 11 + + + + + + + Col259 + 259 + + 4 + 11 + 0 + NotNullable + + Col259 + + + + Col259 + + 11 + + + + + + + Col260 + 260 + + 4 + 11 + 0 + NotNullable + + Col260 + + + + Col260 + + 11 + + + + + + + Col261 + 261 + + 4 + 11 + 0 + NotNullable + + Col261 + + + + Col261 + + 11 + + + + + + + Col262 + 262 + + 4 + 11 + 0 + NotNullable + + Col262 + + + + Col262 + + 11 + + + + + + + Col263 + 263 + + 4 + 11 + 0 + NotNullable + + Col263 + + + + Col263 + + 11 + + + + + + + Col264 + 264 + + 4 + 11 + 0 + NotNullable + + Col264 + + + + Col264 + + 11 + + + + + + + Col265 + 265 + + 4 + 11 + 0 + NotNullable + + Col265 + + + + Col265 + + 11 + + + + + + + Col266 + 266 + + 4 + 11 + 0 + NotNullable + + Col266 + + + + Col266 + + 11 + + + + + + + Col267 + 267 + + 4 + 11 + 0 + NotNullable + + Col267 + + + + Col267 + + 11 + + + + + + + Col268 + 268 + + 4 + 11 + 0 + NotNullable + + Col268 + + + + Col268 + + 11 + + + + + + + Col269 + 269 + + 4 + 11 + 0 + NotNullable + + Col269 + + + + Col269 + + 11 + + + + + + + Col270 + 270 + + 4 + 11 + 0 + NotNullable + + Col270 + + + + Col270 + + 11 + + + + + + + Col271 + 271 + + 4 + 11 + 0 + NotNullable + + Col271 + + + + Col271 + + 11 + + + + + + + Col272 + 272 + + 4 + 11 + 0 + NotNullable + + Col272 + + + + Col272 + + 11 + + + + + + + Col273 + 273 + + 4 + 11 + 0 + NotNullable + + Col273 + + + + Col273 + + 11 + + + + + + + Col274 + 274 + + 4 + 11 + 0 + NotNullable + + Col274 + + + + Col274 + + 11 + + + + + + + Col275 + 275 + + 4 + 11 + 0 + NotNullable + + Col275 + + + + Col275 + + 11 + + + + + + + Col276 + 276 + + 4 + 11 + 0 + NotNullable + + Col276 + + + + Col276 + + 11 + + + + + + + Col277 + 277 + + 4 + 11 + 0 + NotNullable + + Col277 + + + + Col277 + + 11 + + + + + + + Col278 + 278 + + 4 + 11 + 0 + NotNullable + + Col278 + + + + Col278 + + 11 + + + + + + + Col279 + 279 + + 4 + 11 + 0 + NotNullable + + Col279 + + + + Col279 + + 11 + + + + + + + Col280 + 280 + + 4 + 11 + 0 + NotNullable + + Col280 + + + + Col280 + + 11 + + + + + + + Col281 + 281 + + 4 + 11 + 0 + NotNullable + + Col281 + + + + Col281 + + 11 + + + + + + + Col282 + 282 + + 4 + 11 + 0 + NotNullable + + Col282 + + + + Col282 + + 11 + + + + + + + Col283 + 283 + + 4 + 11 + 0 + NotNullable + + Col283 + + + + Col283 + + 11 + + + + + + + Col284 + 284 + + 4 + 11 + 0 + NotNullable + + Col284 + + + + Col284 + + 11 + + + + + + + Col285 + 285 + + 4 + 11 + 0 + NotNullable + + Col285 + + + + Col285 + + 11 + + + + + + + Col286 + 286 + + 4 + 11 + 0 + NotNullable + + Col286 + + + + Col286 + + 11 + + + + + + + Col287 + 287 + + 4 + 11 + 0 + NotNullable + + Col287 + + + + Col287 + + 11 + + + + + + + Col288 + 288 + + 4 + 11 + 0 + NotNullable + + Col288 + + + + Col288 + + 11 + + + + + + + Col289 + 289 + + 4 + 11 + 0 + NotNullable + + Col289 + + + + Col289 + + 11 + + + + + + + Col290 + 290 + + 4 + 11 + 0 + NotNullable + + Col290 + + + + Col290 + + 11 + + + + + + + Col291 + 291 + + 4 + 11 + 0 + NotNullable + + Col291 + + + + Col291 + + 11 + + + + + + + Col292 + 292 + + 4 + 11 + 0 + NotNullable + + Col292 + + + + Col292 + + 11 + + + + + + + Col293 + 293 + + 4 + 11 + 0 + NotNullable + + Col293 + + + + Col293 + + 11 + + + + + + + Col294 + 294 + + 4 + 11 + 0 + NotNullable + + Col294 + + + + Col294 + + 11 + + + + + + + Col295 + 295 + + 4 + 11 + 0 + NotNullable + + Col295 + + + + Col295 + + 11 + + + + + + + Col296 + 296 + + 4 + 11 + 0 + NotNullable + + Col296 + + + + Col296 + + 11 + + + + + + + Col297 + 297 + + 4 + 11 + 0 + NotNullable + + Col297 + + + + Col297 + + 11 + + + + + + + Col298 + 298 + + 4 + 11 + 0 + NotNullable + + Col298 + + + + Col298 + + 11 + + + + + + + Col299 + 299 + + 4 + 11 + 0 + NotNullable + + Col299 + + + + Col299 + + 11 + + + + + + + Col300 + 300 + + 4 + 11 + 0 + NotNullable + + Col300 + + + + Col300 + + 11 + + + + + + + Col301 + 301 + + 4 + 11 + 0 + NotNullable + + Col301 + + + + Col301 + + 11 + + + + + + + Col302 + 302 + + 4 + 11 + 0 + NotNullable + + Col302 + + + + Col302 + + 11 + + + + + + + Col303 + 303 + + 4 + 11 + 0 + NotNullable + + Col303 + + + + Col303 + + 11 + + + + + + + Col304 + 304 + + 4 + 11 + 0 + NotNullable + + Col304 + + + + Col304 + + 11 + + + + + + + Col305 + 305 + + 4 + 11 + 0 + NotNullable + + Col305 + + + + Col305 + + 11 + + + + + + + Col306 + 306 + + 4 + 11 + 0 + NotNullable + + Col306 + + + + Col306 + + 11 + + + + + + + Col307 + 307 + + 4 + 11 + 0 + NotNullable + + Col307 + + + + Col307 + + 11 + + + + + + + Col308 + 308 + + 4 + 11 + 0 + NotNullable + + Col308 + + + + Col308 + + 11 + + + + + + + Col309 + 309 + + 4 + 11 + 0 + NotNullable + + Col309 + + + + Col309 + + 11 + + + + + + + Col310 + 310 + + 4 + 11 + 0 + NotNullable + + Col310 + + + + Col310 + + 11 + + + + + + + Col311 + 311 + + 4 + 11 + 0 + NotNullable + + Col311 + + + + Col311 + + 11 + + + + + + + Col312 + 312 + + 4 + 11 + 0 + NotNullable + + Col312 + + + + Col312 + + 11 + + + + + + + Col313 + 313 + + 4 + 11 + 0 + NotNullable + + Col313 + + + + Col313 + + 11 + + + + + + + Col314 + 314 + + 4 + 11 + 0 + NotNullable + + Col314 + + + + Col314 + + 11 + + + + + + + Col315 + 315 + + 4 + 11 + 0 + NotNullable + + Col315 + + + + Col315 + + 11 + + + + + + + Col316 + 316 + + 4 + 11 + 0 + NotNullable + + Col316 + + + + Col316 + + 11 + + + + + + + Col317 + 317 + + 4 + 11 + 0 + NotNullable + + Col317 + + + + Col317 + + 11 + + + + + + + Col318 + 318 + + 4 + 11 + 0 + NotNullable + + Col318 + + + + Col318 + + 11 + + + + + + + Col319 + 319 + + 4 + 11 + 0 + NotNullable + + Col319 + + + + Col319 + + 11 + + + + + + + Col320 + 320 + + 4 + 11 + 0 + NotNullable + + Col320 + + + + Col320 + + 11 + + + + + + + Col321 + 321 + + 4 + 11 + 0 + NotNullable + + Col321 + + + + Col321 + + 11 + + + + + + + Col322 + 322 + + 4 + 11 + 0 + NotNullable + + Col322 + + + + Col322 + + 11 + + + + + + + Col323 + 323 + + 4 + 11 + 0 + NotNullable + + Col323 + + + + Col323 + + 11 + + + + + + + Col324 + 324 + + 4 + 11 + 0 + NotNullable + + Col324 + + + + Col324 + + 11 + + + + + + + Col325 + 325 + + 4 + 11 + 0 + NotNullable + + Col325 + + + + Col325 + + 11 + + + + + + + Col326 + 326 + + 4 + 11 + 0 + NotNullable + + Col326 + + + + Col326 + + 11 + + + + + + + Col327 + 327 + + 4 + 11 + 0 + NotNullable + + Col327 + + + + Col327 + + 11 + + + + + + + Col328 + 328 + + 4 + 11 + 0 + NotNullable + + Col328 + + + + Col328 + + 11 + + + + + + + Col329 + 329 + + 4 + 11 + 0 + NotNullable + + Col329 + + + + Col329 + + 11 + + + + + + + Col330 + 330 + + 4 + 11 + 0 + NotNullable + + Col330 + + + + Col330 + + 11 + + + + + + + Col331 + 331 + + 4 + 11 + 0 + NotNullable + + Col331 + + + + Col331 + + 11 + + + + + + + Col332 + 332 + + 4 + 11 + 0 + NotNullable + + Col332 + + + + Col332 + + 11 + + + + + + + Col333 + 333 + + 4 + 11 + 0 + NotNullable + + Col333 + + + + Col333 + + 11 + + + + + + + Col334 + 334 + + 4 + 11 + 0 + NotNullable + + Col334 + + + + Col334 + + 11 + + + + + + + Col335 + 335 + + 4 + 11 + 0 + NotNullable + + Col335 + + + + Col335 + + 11 + + + + + + + Col336 + 336 + + 4 + 11 + 0 + NotNullable + + Col336 + + + + Col336 + + 11 + + + + + + + Col337 + 337 + + 4 + 11 + 0 + NotNullable + + Col337 + + + + Col337 + + 11 + + + + + + + Col338 + 338 + + 4 + 11 + 0 + NotNullable + + Col338 + + + + Col338 + + 11 + + + + + + + Col339 + 339 + + 4 + 11 + 0 + NotNullable + + Col339 + + + + Col339 + + 11 + + + + + + + Col340 + 340 + + 4 + 11 + 0 + NotNullable + + Col340 + + + + Col340 + + 11 + + + + + + + Col341 + 341 + + 4 + 11 + 0 + NotNullable + + Col341 + + + + Col341 + + 11 + + + + + + + Col342 + 342 + + 4 + 11 + 0 + NotNullable + + Col342 + + + + Col342 + + 11 + + + + + + + Col343 + 343 + + 4 + 11 + 0 + NotNullable + + Col343 + + + + Col343 + + 11 + + + + + + + Col344 + 344 + + 4 + 11 + 0 + NotNullable + + Col344 + + + + Col344 + + 11 + + + + + + + Col345 + 345 + + 4 + 11 + 0 + NotNullable + + Col345 + + + + Col345 + + 11 + + + + + + + Col346 + 346 + + 4 + 11 + 0 + NotNullable + + Col346 + + + + Col346 + + 11 + + + + + + + Col347 + 347 + + 4 + 11 + 0 + NotNullable + + Col347 + + + + Col347 + + 11 + + + + + + + Col348 + 348 + + 4 + 11 + 0 + NotNullable + + Col348 + + + + Col348 + + 11 + + + + + + + Col349 + 349 + + 4 + 11 + 0 + NotNullable + + Col349 + + + + Col349 + + 11 + + + + + + + Col350 + 350 + + 4 + 11 + 0 + NotNullable + + Col350 + + + + Col350 + + 11 + + + + + + + Col351 + 351 + + 4 + 11 + 0 + NotNullable + + Col351 + + + + Col351 + + 11 + + + + + + + Col352 + 352 + + 4 + 11 + 0 + NotNullable + + Col352 + + + + Col352 + + 11 + + + + + + + Col353 + 353 + + 4 + 11 + 0 + NotNullable + + Col353 + + + + Col353 + + 11 + + + + + + + Col354 + 354 + + 4 + 11 + 0 + NotNullable + + Col354 + + + + Col354 + + 11 + + + + + + + Col355 + 355 + + 4 + 11 + 0 + NotNullable + + Col355 + + + + Col355 + + 11 + + + + + + + Col356 + 356 + + 4 + 11 + 0 + NotNullable + + Col356 + + + + Col356 + + 11 + + + + + + + Col357 + 357 + + 4 + 11 + 0 + NotNullable + + Col357 + + + + Col357 + + 11 + + + + + + + Col358 + 358 + + 4 + 11 + 0 + NotNullable + + Col358 + + + + Col358 + + 11 + + + + + + + Col359 + 359 + + 4 + 11 + 0 + NotNullable + + Col359 + + + + Col359 + + 11 + + + + + + + Col360 + 360 + + 4 + 11 + 0 + NotNullable + + Col360 + + + + Col360 + + 11 + + + + + + + Col361 + 361 + + 4 + 11 + 0 + NotNullable + + Col361 + + + + Col361 + + 11 + + + + + + + Col362 + 362 + + 4 + 11 + 0 + NotNullable + + Col362 + + + + Col362 + + 11 + + + + + + + Col363 + 363 + + 4 + 11 + 0 + NotNullable + + Col363 + + + + Col363 + + 11 + + + + + + + Col364 + 364 + + 4 + 11 + 0 + NotNullable + + Col364 + + + + Col364 + + 11 + + + + + + + Col365 + 365 + + 4 + 11 + 0 + NotNullable + + Col365 + + + + Col365 + + 11 + + + + + + + Col366 + 366 + + 4 + 11 + 0 + NotNullable + + Col366 + + + + Col366 + + 11 + + + + + + + Col367 + 367 + + 4 + 11 + 0 + NotNullable + + Col367 + + + + Col367 + + 11 + + + + + + + Col368 + 368 + + 4 + 11 + 0 + NotNullable + + Col368 + + + + Col368 + + 11 + + + + + + + Col369 + 369 + + 4 + 11 + 0 + NotNullable + + Col369 + + + + Col369 + + 11 + + + + + + + Col370 + 370 + + 4 + 11 + 0 + NotNullable + + Col370 + + + + Col370 + + 11 + + + + + + + Col371 + 371 + + 4 + 11 + 0 + NotNullable + + Col371 + + + + Col371 + + 11 + + + + + + + Col372 + 372 + + 4 + 11 + 0 + NotNullable + + Col372 + + + + Col372 + + 11 + + + + + + + Col373 + 373 + + 4 + 11 + 0 + NotNullable + + Col373 + + + + Col373 + + 11 + + + + + + + Col374 + 374 + + 4 + 11 + 0 + NotNullable + + Col374 + + + + Col374 + + 11 + + + + + + + Col375 + 375 + + 4 + 11 + 0 + NotNullable + + Col375 + + + + Col375 + + 11 + + + + + + + Col376 + 376 + + 4 + 11 + 0 + NotNullable + + Col376 + + + + Col376 + + 11 + + + + + + + Col377 + 377 + + 4 + 11 + 0 + NotNullable + + Col377 + + + + Col377 + + 11 + + + + + + + Col378 + 378 + + 4 + 11 + 0 + NotNullable + + Col378 + + + + Col378 + + 11 + + + + + + + Col379 + 379 + + 4 + 11 + 0 + NotNullable + + Col379 + + + + Col379 + + 11 + + + + + + + Col380 + 380 + + 4 + 11 + 0 + NotNullable + + Col380 + + + + Col380 + + 11 + + + + + + + Col381 + 381 + + 4 + 11 + 0 + NotNullable + + Col381 + + + + Col381 + + 11 + + + + + + + Col382 + 382 + + 4 + 11 + 0 + NotNullable + + Col382 + + + + Col382 + + 11 + + + + + + + Col383 + 383 + + 4 + 11 + 0 + NotNullable + + Col383 + + + + Col383 + + 11 + + + + + + + Col384 + 384 + + 4 + 11 + 0 + NotNullable + + Col384 + + + + Col384 + + 11 + + + + + + + Col385 + 385 + + 4 + 11 + 0 + NotNullable + + Col385 + + + + Col385 + + 11 + + + + + + + Col386 + 386 + + 4 + 11 + 0 + NotNullable + + Col386 + + + + Col386 + + 11 + + + + + + + Col387 + 387 + + 4 + 11 + 0 + NotNullable + + Col387 + + + + Col387 + + 11 + + + + + + + Col388 + 388 + + 4 + 11 + 0 + NotNullable + + Col388 + + + + Col388 + + 11 + + + + + + + Col389 + 389 + + 4 + 11 + 0 + NotNullable + + Col389 + + + + Col389 + + 11 + + + + + + + Col390 + 390 + + 4 + 11 + 0 + NotNullable + + Col390 + + + + Col390 + + 11 + + + + + + + Col391 + 391 + + 4 + 11 + 0 + NotNullable + + Col391 + + + + Col391 + + 11 + + + + + + + Col392 + 392 + + 4 + 11 + 0 + NotNullable + + Col392 + + + + Col392 + + 11 + + + + + + + Col393 + 393 + + 4 + 11 + 0 + NotNullable + + Col393 + + + + Col393 + + 11 + + + + + + + Col394 + 394 + + 4 + 11 + 0 + NotNullable + + Col394 + + + + Col394 + + 11 + + + + + + + Col395 + 395 + + 4 + 11 + 0 + NotNullable + + Col395 + + + + Col395 + + 11 + + + + + + + Col396 + 396 + + 4 + 11 + 0 + NotNullable + + Col396 + + + + Col396 + + 11 + + + + + + + Col397 + 397 + + 4 + 11 + 0 + NotNullable + + Col397 + + + + Col397 + + 11 + + + + + + + Col398 + 398 + + 4 + 11 + 0 + NotNullable + + Col398 + + + + Col398 + + 11 + + + + + + + Col399 + 399 + + 4 + 11 + 0 + NotNullable + + Col399 + + + + Col399 + + 11 + + + + + + + Col400 + 400 + + 4 + 11 + 0 + NotNullable + + Col400 + + + + Col400 + + 11 + + + + + + + Col401 + 401 + + 4 + 11 + 0 + NotNullable + + Col401 + + + + Col401 + + 11 + + + + + + + Col402 + 402 + + 4 + 11 + 0 + NotNullable + + Col402 + + + + Col402 + + 11 + + + + + + + Col403 + 403 + + 4 + 11 + 0 + NotNullable + + Col403 + + + + Col403 + + 11 + + + + + + + Col404 + 404 + + 4 + 11 + 0 + NotNullable + + Col404 + + + + Col404 + + 11 + + + + + + + Col405 + 405 + + 4 + 11 + 0 + NotNullable + + Col405 + + + + Col405 + + 11 + + + + + + + Col406 + 406 + + 4 + 11 + 0 + NotNullable + + Col406 + + + + Col406 + + 11 + + + + + + + Col407 + 407 + + 4 + 11 + 0 + NotNullable + + Col407 + + + + Col407 + + 11 + + + + + + + Col408 + 408 + + 4 + 11 + 0 + NotNullable + + Col408 + + + + Col408 + + 11 + + + + + + + Col409 + 409 + + 4 + 11 + 0 + NotNullable + + Col409 + + + + Col409 + + 11 + + + + + + + Col410 + 410 + + 4 + 11 + 0 + NotNullable + + Col410 + + + + Col410 + + 11 + + + + + + + Col411 + 411 + + 4 + 11 + 0 + NotNullable + + Col411 + + + + Col411 + + 11 + + + + + + + Col412 + 412 + + 4 + 11 + 0 + NotNullable + + Col412 + + + + Col412 + + 11 + + + + + + + Col413 + 413 + + 4 + 11 + 0 + NotNullable + + Col413 + + + + Col413 + + 11 + + + + + + + Col414 + 414 + + 4 + 11 + 0 + NotNullable + + Col414 + + + + Col414 + + 11 + + + + + + + Col415 + 415 + + 4 + 11 + 0 + NotNullable + + Col415 + + + + Col415 + + 11 + + + + + + + Col416 + 416 + + 4 + 11 + 0 + NotNullable + + Col416 + + + + Col416 + + 11 + + + + + + + Col417 + 417 + + 4 + 11 + 0 + NotNullable + + Col417 + + + + Col417 + + 11 + + + + + + + Col418 + 418 + + 4 + 11 + 0 + NotNullable + + Col418 + + + + Col418 + + 11 + + + + + + + Col419 + 419 + + 4 + 11 + 0 + NotNullable + + Col419 + + + + Col419 + + 11 + + + + + + + Col420 + 420 + + 4 + 11 + 0 + NotNullable + + Col420 + + + + Col420 + + 11 + + + + + + + Col421 + 421 + + 4 + 11 + 0 + NotNullable + + Col421 + + + + Col421 + + 11 + + + + + + + Col422 + 422 + + 4 + 11 + 0 + NotNullable + + Col422 + + + + Col422 + + 11 + + + + + + + Col423 + 423 + + 4 + 11 + 0 + NotNullable + + Col423 + + + + Col423 + + 11 + + + + + + + Col424 + 424 + + 4 + 11 + 0 + NotNullable + + Col424 + + + + Col424 + + 11 + + + + + + + Col425 + 425 + + 4 + 11 + 0 + NotNullable + + Col425 + + + + Col425 + + 11 + + + + + + + Col426 + 426 + + 4 + 11 + 0 + NotNullable + + Col426 + + + + Col426 + + 11 + + + + + + + Col427 + 427 + + 4 + 11 + 0 + NotNullable + + Col427 + + + + Col427 + + 11 + + + + + + + Col428 + 428 + + 4 + 11 + 0 + NotNullable + + Col428 + + + + Col428 + + 11 + + + + + + + Col429 + 429 + + 4 + 11 + 0 + NotNullable + + Col429 + + + + Col429 + + 11 + + + + + + + Col430 + 430 + + 4 + 11 + 0 + NotNullable + + Col430 + + + + Col430 + + 11 + + + + + + + Col431 + 431 + + 4 + 11 + 0 + NotNullable + + Col431 + + + + Col431 + + 11 + + + + + + + Col432 + 432 + + 4 + 11 + 0 + NotNullable + + Col432 + + + + Col432 + + 11 + + + + + + + Col433 + 433 + + 4 + 11 + 0 + NotNullable + + Col433 + + + + Col433 + + 11 + + + + + + + Col434 + 434 + + 4 + 11 + 0 + NotNullable + + Col434 + + + + Col434 + + 11 + + + + + + + Col435 + 435 + + 4 + 11 + 0 + NotNullable + + Col435 + + + + Col435 + + 11 + + + + + + + Col436 + 436 + + 4 + 11 + 0 + NotNullable + + Col436 + + + + Col436 + + 11 + + + + + + + Col437 + 437 + + 4 + 11 + 0 + NotNullable + + Col437 + + + + Col437 + + 11 + + + + + + + Col438 + 438 + + 4 + 11 + 0 + NotNullable + + Col438 + + + + Col438 + + 11 + + + + + + + Col439 + 439 + + 4 + 11 + 0 + NotNullable + + Col439 + + + + Col439 + + 11 + + + + + + + Col440 + 440 + + 4 + 11 + 0 + NotNullable + + Col440 + + + + Col440 + + 11 + + + + + + + Col441 + 441 + + 4 + 11 + 0 + NotNullable + + Col441 + + + + Col441 + + 11 + + + + + + + Col442 + 442 + + 4 + 11 + 0 + NotNullable + + Col442 + + + + Col442 + + 11 + + + + + + + Col443 + 443 + + 4 + 11 + 0 + NotNullable + + Col443 + + + + Col443 + + 11 + + + + + + + Col444 + 444 + + 4 + 11 + 0 + NotNullable + + Col444 + + + + Col444 + + 11 + + + + + + + Col445 + 445 + + 4 + 11 + 0 + NotNullable + + Col445 + + + + Col445 + + 11 + + + + + + + Col446 + 446 + + 4 + 11 + 0 + NotNullable + + Col446 + + + + Col446 + + 11 + + + + + + + Col447 + 447 + + 4 + 11 + 0 + NotNullable + + Col447 + + + + Col447 + + 11 + + + + + + + Col448 + 448 + + 4 + 11 + 0 + NotNullable + + Col448 + + + + Col448 + + 11 + + + + + + + Col449 + 449 + + 4 + 11 + 0 + NotNullable + + Col449 + + + + Col449 + + 11 + + + + + + + Col450 + 450 + + 4 + 11 + 0 + NotNullable + + Col450 + + + + Col450 + + 11 + + + + + + + Col451 + 451 + + 4 + 11 + 0 + NotNullable + + Col451 + + + + Col451 + + 11 + + + + + + + Col452 + 452 + + 4 + 11 + 0 + NotNullable + + Col452 + + + + Col452 + + 11 + + + + + + + Col453 + 453 + + 4 + 11 + 0 + NotNullable + + Col453 + + + + Col453 + + 11 + + + + + + + Col454 + 454 + + 4 + 11 + 0 + NotNullable + + Col454 + + + + Col454 + + 11 + + + + + + + Col455 + 455 + + 4 + 11 + 0 + NotNullable + + Col455 + + + + Col455 + + 11 + + + + + + + Col456 + 456 + + 4 + 11 + 0 + NotNullable + + Col456 + + + + Col456 + + 11 + + + + + + + Col457 + 457 + + 4 + 11 + 0 + NotNullable + + Col457 + + + + Col457 + + 11 + + + + + + + Col458 + 458 + + 4 + 11 + 0 + NotNullable + + Col458 + + + + Col458 + + 11 + + + + + + + Col459 + 459 + + 4 + 11 + 0 + NotNullable + + Col459 + + + + Col459 + + 11 + + + + + + + Col460 + 460 + + 4 + 11 + 0 + NotNullable + + Col460 + + + + Col460 + + 11 + + + + + + + Col461 + 461 + + 4 + 11 + 0 + NotNullable + + Col461 + + + + Col461 + + 11 + + + + + + + Col462 + 462 + + 4 + 11 + 0 + NotNullable + + Col462 + + + + Col462 + + 11 + + + + + + + Col463 + 463 + + 4 + 11 + 0 + NotNullable + + Col463 + + + + Col463 + + 11 + + + + + + + Col464 + 464 + + 4 + 11 + 0 + NotNullable + + Col464 + + + + Col464 + + 11 + + + + + + + Col465 + 465 + + 4 + 11 + 0 + NotNullable + + Col465 + + + + Col465 + + 11 + + + + + + + Col466 + 466 + + 4 + 11 + 0 + NotNullable + + Col466 + + + + Col466 + + 11 + + + + + + + Col467 + 467 + + 4 + 11 + 0 + NotNullable + + Col467 + + + + Col467 + + 11 + + + + + + + Col468 + 468 + + 4 + 11 + 0 + NotNullable + + Col468 + + + + Col468 + + 11 + + + + + + + Col469 + 469 + + 4 + 11 + 0 + NotNullable + + Col469 + + + + Col469 + + 11 + + + + + + + Col470 + 470 + + 4 + 11 + 0 + NotNullable + + Col470 + + + + Col470 + + 11 + + + + + + + Col471 + 471 + + 4 + 11 + 0 + NotNullable + + Col471 + + + + Col471 + + 11 + + + + + + + Col472 + 472 + + 4 + 11 + 0 + NotNullable + + Col472 + + + + Col472 + + 11 + + + + + + + Col473 + 473 + + 4 + 11 + 0 + NotNullable + + Col473 + + + + Col473 + + 11 + + + + + + + Col474 + 474 + + 4 + 11 + 0 + NotNullable + + Col474 + + + + Col474 + + 11 + + + + + + + Col475 + 475 + + 4 + 11 + 0 + NotNullable + + Col475 + + + + Col475 + + 11 + + + + + + + Col476 + 476 + + 4 + 11 + 0 + NotNullable + + Col476 + + + + Col476 + + 11 + + + + + + + Col477 + 477 + + 4 + 11 + 0 + NotNullable + + Col477 + + + + Col477 + + 11 + + + + + + + Col478 + 478 + + 4 + 11 + 0 + NotNullable + + Col478 + + + + Col478 + + 11 + + + + + + + Col479 + 479 + + 4 + 11 + 0 + NotNullable + + Col479 + + + + Col479 + + 11 + + + + + + + Col480 + 480 + + 4 + 11 + 0 + NotNullable + + Col480 + + + + Col480 + + 11 + + + + + + + Col481 + 481 + + 4 + 11 + 0 + NotNullable + + Col481 + + + + Col481 + + 11 + + + + + + + Col482 + 482 + + 4 + 11 + 0 + NotNullable + + Col482 + + + + Col482 + + 11 + + + + + + + Col483 + 483 + + 4 + 11 + 0 + NotNullable + + Col483 + + + + Col483 + + 11 + + + + + + + Col484 + 484 + + 4 + 11 + 0 + NotNullable + + Col484 + + + + Col484 + + 11 + + + + + + + Col485 + 485 + + 4 + 11 + 0 + NotNullable + + Col485 + + + + Col485 + + 11 + + + + + + + Col486 + 486 + + 4 + 11 + 0 + NotNullable + + Col486 + + + + Col486 + + 11 + + + + + + + Col487 + 487 + + 4 + 11 + 0 + NotNullable + + Col487 + + + + Col487 + + 11 + + + + + + + Col488 + 488 + + 4 + 11 + 0 + NotNullable + + Col488 + + + + Col488 + + 11 + + + + + + + Col489 + 489 + + 4 + 11 + 0 + NotNullable + + Col489 + + + + Col489 + + 11 + + + + + + + Col490 + 490 + + 4 + 11 + 0 + NotNullable + + Col490 + + + + Col490 + + 11 + + + + + + + Col491 + 491 + + 4 + 11 + 0 + NotNullable + + Col491 + + + + Col491 + + 11 + + + + + + + Col492 + 492 + + 4 + 11 + 0 + NotNullable + + Col492 + + + + Col492 + + 11 + + + + + + + Col493 + 493 + + 4 + 11 + 0 + NotNullable + + Col493 + + + + Col493 + + 11 + + + + + + + Col494 + 494 + + 4 + 11 + 0 + NotNullable + + Col494 + + + + Col494 + + 11 + + + + + + + Col495 + 495 + + 4 + 11 + 0 + NotNullable + + Col495 + + + + Col495 + + 11 + + + + + + + Col496 + 496 + + 4 + 11 + 0 + NotNullable + + Col496 + + + + Col496 + + 11 + + + + + + + Col497 + 497 + + 4 + 11 + 0 + NotNullable + + Col497 + + + + Col497 + + 11 + + + + + + + Col498 + 498 + + 4 + 11 + 0 + NotNullable + + Col498 + + + + Col498 + + 11 + + + + + + + Col499 + 499 + + 4 + 11 + 0 + NotNullable + + Col499 + + + + Col499 + + 11 + + + + + + + Col500 + 500 + + 4 + 11 + 0 + NotNullable + + Col500 + + + + Col500 + + 11 + + + + + + + +]]> + + + + + + + + + + + + + a4 + landscape + 0.5cm + 0.5cm + 0.5cm + 0.5cm + + + html + new Date()]]> + + + + + + + Mega Data Set + + + COL1 + COL1 + dataSetRow["COL1"] + integer + + + COL2 + COL2 + dataSetRow["COL2"] + string + + + COL3 + COL3 + dataSetRow["COL3"] + string + + + COL4 + COL4 + dataSetRow["COL4"] + string + + + COL5 + COL5 + dataSetRow["COL5"] + string + + + COL6 + COL6 + dataSetRow["COL6"] + integer + + + COL7 + COL7 + dataSetRow["COL7"] + string + + + COL8 + COL8 + dataSetRow["COL8"] + string + + + COL9 + COL9 + dataSetRow["COL9"] + string + + + COL10 + COL10 + dataSetRow["COL10"] + string + + + COL11 + COL11 + dataSetRow["COL11"] + integer + + + COL12 + COL12 + dataSetRow["COL12"] + string + + + COL13 + COL13 + dataSetRow["COL13"] + string + + + COL14 + COL14 + dataSetRow["COL14"] + string + + + 0 + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + COL1 + + + + + COL2 + + + + + COL3 + + + + + COL4 + + + + + COL5 + + + + + COL6 + + + + + COL7 + + + + + COL8 + + + + + COL9 + + + + + COL10 + + + + + COL11 + + + + + COL12 + + + + + COL13 + + + + + COL14 + + + + +
+ + + + + + + + + + + + + + + + +
+
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeNoStyles.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeNoStyles.rptdesign new file mode 100644 index 00000000000..0bcaeff1a7b --- /dev/null +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeNoStyles.rptdesign @@ -0,0 +1,11193 @@ + + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> + Number Formats Test Report + + + queryText + 15112 + + + queryTimeOut + 15112 + + + rowFetchSize + 15112 + + + in + /templates/blank_report.gif + auto layout + ltr + 96 + + + + + contentBidiFormatStr + ILYNN + + + metadataBidiFormatStr + ILYNN + + + org.eclipse.birt.report.data.oda.sampledb.Driver + jdbc:classicmodels:sampledb + ClassicModels + + + + + nulls lowest + + + COL1 + measure + COL1 + COL1 + + + COL2 + measure + COL2 + COL2 + + + COL3 + measure + COL3 + COL3 + + + COL4 + measure + COL4 + COL4 + + + COL5 + measure + COL5 + COL5 + + + COL6 + measure + COL6 + COL6 + + + COL7 + measure + COL7 + COL7 + + + COL8 + measure + COL8 + COL8 + + + COL9 + measure + COL9 + COL9 + + + COL10 + measure + COL10 + COL10 + + + COL11 + measure + COL11 + COL11 + + + COL12 + measure + COL12 + COL12 + + + COL13 + measure + COL13 + COL13 + + + COL14 + measure + COL14 + COL14 + + + + + + + 1 + COL1 + integer + + + 2 + COL2 + integer + + + 3 + COL3 + integer + + + 4 + COL4 + integer + + + 5 + COL5 + integer + + + 6 + COL6 + integer + + + 7 + COL7 + integer + + + 8 + COL8 + integer + + + 9 + COL9 + integer + + + 10 + COL10 + integer + + + 11 + COL11 + integer + + + 12 + COL12 + integer + + + 13 + COL13 + integer + + + 14 + COL14 + integer + + + + 100000 + Data Source + + + 1 + COL1 + COL1 + integer + 4 + + + 2 + COL2 + COL2 + integer + 4 + + + 3 + COL3 + COL3 + integer + 4 + + + 4 + COL4 + COL4 + integer + 4 + + + 5 + COL5 + COL5 + integer + 4 + + + 6 + COL6 + COL6 + integer + 4 + + + 7 + COL7 + COL7 + integer + 4 + + + 8 + COL8 + COL8 + integer + 4 + + + 9 + COL9 + COL9 + integer + 4 + + + 10 + COL10 + COL10 + integer + 4 + + + 11 + COL11 + COL11 + integer + 4 + + + 12 + COL12 + COL12 + integer + 4 + + + 13 + COL13 + COL13 + integer + 4 + + + 14 + COL14 + COL14 + integer + 4 + + + + + + 2.0 + + + + + + + Col1 + 1 + + 4 + 11 + 0 + NotNullable + + Col1 + + + + Col1 + + 11 + + + + + + + Col2 + 2 + + 4 + 11 + 0 + NotNullable + + Col2 + + + + Col2 + + 11 + + + + + + + Col3 + 3 + + 4 + 11 + 0 + NotNullable + + Col3 + + + + Col3 + + 11 + + + + + + + Col4 + 4 + + 4 + 11 + 0 + NotNullable + + Col4 + + + + Col4 + + 11 + + + + + + + Col5 + 5 + + 4 + 11 + 0 + NotNullable + + Col5 + + + + Col5 + + 11 + + + + + + + Col6 + 6 + + 4 + 11 + 0 + NotNullable + + Col6 + + + + Col6 + + 11 + + + + + + + Col7 + 7 + + 4 + 11 + 0 + NotNullable + + Col7 + + + + Col7 + + 11 + + + + + + + Col8 + 8 + + 4 + 11 + 0 + NotNullable + + Col8 + + + + Col8 + + 11 + + + + + + + Col9 + 9 + + 4 + 11 + 0 + NotNullable + + Col9 + + + + Col9 + + 11 + + + + + + + Col10 + 10 + + 4 + 11 + 0 + NotNullable + + Col10 + + + + Col10 + + 11 + + + + + + + Col11 + 11 + + 4 + 11 + 0 + NotNullable + + Col11 + + + + Col11 + + 11 + + + + + + + Col12 + 12 + + 4 + 11 + 0 + NotNullable + + Col12 + + + + Col12 + + 11 + + + + + + + Col13 + 13 + + 4 + 11 + 0 + NotNullable + + Col13 + + + + Col13 + + 11 + + + + + + + Col14 + 14 + + 4 + 11 + 0 + NotNullable + + Col14 + + + + Col14 + + 11 + + + + + + + Col15 + 15 + + 4 + 11 + 0 + NotNullable + + Col15 + + + + Col15 + + 11 + + + + + + + Col16 + 16 + + 4 + 11 + 0 + NotNullable + + Col16 + + + + Col16 + + 11 + + + + + + + Col17 + 17 + + 4 + 11 + 0 + NotNullable + + Col17 + + + + Col17 + + 11 + + + + + + + Col18 + 18 + + 4 + 11 + 0 + NotNullable + + Col18 + + + + Col18 + + 11 + + + + + + + Col19 + 19 + + 4 + 11 + 0 + NotNullable + + Col19 + + + + Col19 + + 11 + + + + + + + Col20 + 20 + + 4 + 11 + 0 + NotNullable + + Col20 + + + + Col20 + + 11 + + + + + + + Col21 + 21 + + 4 + 11 + 0 + NotNullable + + Col21 + + + + Col21 + + 11 + + + + + + + Col22 + 22 + + 4 + 11 + 0 + NotNullable + + Col22 + + + + Col22 + + 11 + + + + + + + Col23 + 23 + + 4 + 11 + 0 + NotNullable + + Col23 + + + + Col23 + + 11 + + + + + + + Col24 + 24 + + 4 + 11 + 0 + NotNullable + + Col24 + + + + Col24 + + 11 + + + + + + + Col25 + 25 + + 4 + 11 + 0 + NotNullable + + Col25 + + + + Col25 + + 11 + + + + + + + Col26 + 26 + + 4 + 11 + 0 + NotNullable + + Col26 + + + + Col26 + + 11 + + + + + + + Col27 + 27 + + 4 + 11 + 0 + NotNullable + + Col27 + + + + Col27 + + 11 + + + + + + + Col28 + 28 + + 4 + 11 + 0 + NotNullable + + Col28 + + + + Col28 + + 11 + + + + + + + Col29 + 29 + + 4 + 11 + 0 + NotNullable + + Col29 + + + + Col29 + + 11 + + + + + + + Col30 + 30 + + 4 + 11 + 0 + NotNullable + + Col30 + + + + Col30 + + 11 + + + + + + + Col31 + 31 + + 4 + 11 + 0 + NotNullable + + Col31 + + + + Col31 + + 11 + + + + + + + Col32 + 32 + + 4 + 11 + 0 + NotNullable + + Col32 + + + + Col32 + + 11 + + + + + + + Col33 + 33 + + 4 + 11 + 0 + NotNullable + + Col33 + + + + Col33 + + 11 + + + + + + + Col34 + 34 + + 4 + 11 + 0 + NotNullable + + Col34 + + + + Col34 + + 11 + + + + + + + Col35 + 35 + + 4 + 11 + 0 + NotNullable + + Col35 + + + + Col35 + + 11 + + + + + + + Col36 + 36 + + 4 + 11 + 0 + NotNullable + + Col36 + + + + Col36 + + 11 + + + + + + + Col37 + 37 + + 4 + 11 + 0 + NotNullable + + Col37 + + + + Col37 + + 11 + + + + + + + Col38 + 38 + + 4 + 11 + 0 + NotNullable + + Col38 + + + + Col38 + + 11 + + + + + + + Col39 + 39 + + 4 + 11 + 0 + NotNullable + + Col39 + + + + Col39 + + 11 + + + + + + + Col40 + 40 + + 4 + 11 + 0 + NotNullable + + Col40 + + + + Col40 + + 11 + + + + + + + Col41 + 41 + + 4 + 11 + 0 + NotNullable + + Col41 + + + + Col41 + + 11 + + + + + + + Col42 + 42 + + 4 + 11 + 0 + NotNullable + + Col42 + + + + Col42 + + 11 + + + + + + + Col43 + 43 + + 4 + 11 + 0 + NotNullable + + Col43 + + + + Col43 + + 11 + + + + + + + Col44 + 44 + + 4 + 11 + 0 + NotNullable + + Col44 + + + + Col44 + + 11 + + + + + + + Col45 + 45 + + 4 + 11 + 0 + NotNullable + + Col45 + + + + Col45 + + 11 + + + + + + + Col46 + 46 + + 4 + 11 + 0 + NotNullable + + Col46 + + + + Col46 + + 11 + + + + + + + Col47 + 47 + + 4 + 11 + 0 + NotNullable + + Col47 + + + + Col47 + + 11 + + + + + + + Col48 + 48 + + 4 + 11 + 0 + NotNullable + + Col48 + + + + Col48 + + 11 + + + + + + + Col49 + 49 + + 4 + 11 + 0 + NotNullable + + Col49 + + + + Col49 + + 11 + + + + + + + Col50 + 50 + + 4 + 11 + 0 + NotNullable + + Col50 + + + + Col50 + + 11 + + + + + + + Col51 + 51 + + 4 + 11 + 0 + NotNullable + + Col51 + + + + Col51 + + 11 + + + + + + + Col52 + 52 + + 4 + 11 + 0 + NotNullable + + Col52 + + + + Col52 + + 11 + + + + + + + Col53 + 53 + + 4 + 11 + 0 + NotNullable + + Col53 + + + + Col53 + + 11 + + + + + + + Col54 + 54 + + 4 + 11 + 0 + NotNullable + + Col54 + + + + Col54 + + 11 + + + + + + + Col55 + 55 + + 4 + 11 + 0 + NotNullable + + Col55 + + + + Col55 + + 11 + + + + + + + Col56 + 56 + + 4 + 11 + 0 + NotNullable + + Col56 + + + + Col56 + + 11 + + + + + + + Col57 + 57 + + 4 + 11 + 0 + NotNullable + + Col57 + + + + Col57 + + 11 + + + + + + + Col58 + 58 + + 4 + 11 + 0 + NotNullable + + Col58 + + + + Col58 + + 11 + + + + + + + Col59 + 59 + + 4 + 11 + 0 + NotNullable + + Col59 + + + + Col59 + + 11 + + + + + + + Col60 + 60 + + 4 + 11 + 0 + NotNullable + + Col60 + + + + Col60 + + 11 + + + + + + + Col61 + 61 + + 4 + 11 + 0 + NotNullable + + Col61 + + + + Col61 + + 11 + + + + + + + Col62 + 62 + + 4 + 11 + 0 + NotNullable + + Col62 + + + + Col62 + + 11 + + + + + + + Col63 + 63 + + 4 + 11 + 0 + NotNullable + + Col63 + + + + Col63 + + 11 + + + + + + + Col64 + 64 + + 4 + 11 + 0 + NotNullable + + Col64 + + + + Col64 + + 11 + + + + + + + Col65 + 65 + + 4 + 11 + 0 + NotNullable + + Col65 + + + + Col65 + + 11 + + + + + + + Col66 + 66 + + 4 + 11 + 0 + NotNullable + + Col66 + + + + Col66 + + 11 + + + + + + + Col67 + 67 + + 4 + 11 + 0 + NotNullable + + Col67 + + + + Col67 + + 11 + + + + + + + Col68 + 68 + + 4 + 11 + 0 + NotNullable + + Col68 + + + + Col68 + + 11 + + + + + + + Col69 + 69 + + 4 + 11 + 0 + NotNullable + + Col69 + + + + Col69 + + 11 + + + + + + + Col70 + 70 + + 4 + 11 + 0 + NotNullable + + Col70 + + + + Col70 + + 11 + + + + + + + Col71 + 71 + + 4 + 11 + 0 + NotNullable + + Col71 + + + + Col71 + + 11 + + + + + + + Col72 + 72 + + 4 + 11 + 0 + NotNullable + + Col72 + + + + Col72 + + 11 + + + + + + + Col73 + 73 + + 4 + 11 + 0 + NotNullable + + Col73 + + + + Col73 + + 11 + + + + + + + Col74 + 74 + + 4 + 11 + 0 + NotNullable + + Col74 + + + + Col74 + + 11 + + + + + + + Col75 + 75 + + 4 + 11 + 0 + NotNullable + + Col75 + + + + Col75 + + 11 + + + + + + + Col76 + 76 + + 4 + 11 + 0 + NotNullable + + Col76 + + + + Col76 + + 11 + + + + + + + Col77 + 77 + + 4 + 11 + 0 + NotNullable + + Col77 + + + + Col77 + + 11 + + + + + + + Col78 + 78 + + 4 + 11 + 0 + NotNullable + + Col78 + + + + Col78 + + 11 + + + + + + + Col79 + 79 + + 4 + 11 + 0 + NotNullable + + Col79 + + + + Col79 + + 11 + + + + + + + Col80 + 80 + + 4 + 11 + 0 + NotNullable + + Col80 + + + + Col80 + + 11 + + + + + + + Col81 + 81 + + 4 + 11 + 0 + NotNullable + + Col81 + + + + Col81 + + 11 + + + + + + + Col82 + 82 + + 4 + 11 + 0 + NotNullable + + Col82 + + + + Col82 + + 11 + + + + + + + Col83 + 83 + + 4 + 11 + 0 + NotNullable + + Col83 + + + + Col83 + + 11 + + + + + + + Col84 + 84 + + 4 + 11 + 0 + NotNullable + + Col84 + + + + Col84 + + 11 + + + + + + + Col85 + 85 + + 4 + 11 + 0 + NotNullable + + Col85 + + + + Col85 + + 11 + + + + + + + Col86 + 86 + + 4 + 11 + 0 + NotNullable + + Col86 + + + + Col86 + + 11 + + + + + + + Col87 + 87 + + 4 + 11 + 0 + NotNullable + + Col87 + + + + Col87 + + 11 + + + + + + + Col88 + 88 + + 4 + 11 + 0 + NotNullable + + Col88 + + + + Col88 + + 11 + + + + + + + Col89 + 89 + + 4 + 11 + 0 + NotNullable + + Col89 + + + + Col89 + + 11 + + + + + + + Col90 + 90 + + 4 + 11 + 0 + NotNullable + + Col90 + + + + Col90 + + 11 + + + + + + + Col91 + 91 + + 4 + 11 + 0 + NotNullable + + Col91 + + + + Col91 + + 11 + + + + + + + Col92 + 92 + + 4 + 11 + 0 + NotNullable + + Col92 + + + + Col92 + + 11 + + + + + + + Col93 + 93 + + 4 + 11 + 0 + NotNullable + + Col93 + + + + Col93 + + 11 + + + + + + + Col94 + 94 + + 4 + 11 + 0 + NotNullable + + Col94 + + + + Col94 + + 11 + + + + + + + Col95 + 95 + + 4 + 11 + 0 + NotNullable + + Col95 + + + + Col95 + + 11 + + + + + + + Col96 + 96 + + 4 + 11 + 0 + NotNullable + + Col96 + + + + Col96 + + 11 + + + + + + + Col97 + 97 + + 4 + 11 + 0 + NotNullable + + Col97 + + + + Col97 + + 11 + + + + + + + Col98 + 98 + + 4 + 11 + 0 + NotNullable + + Col98 + + + + Col98 + + 11 + + + + + + + Col99 + 99 + + 4 + 11 + 0 + NotNullable + + Col99 + + + + Col99 + + 11 + + + + + + + Col100 + 100 + + 4 + 11 + 0 + NotNullable + + Col100 + + + + Col100 + + 11 + + + + + + + Col101 + 101 + + 4 + 11 + 0 + NotNullable + + Col101 + + + + Col101 + + 11 + + + + + + + Col102 + 102 + + 4 + 11 + 0 + NotNullable + + Col102 + + + + Col102 + + 11 + + + + + + + Col103 + 103 + + 4 + 11 + 0 + NotNullable + + Col103 + + + + Col103 + + 11 + + + + + + + Col104 + 104 + + 4 + 11 + 0 + NotNullable + + Col104 + + + + Col104 + + 11 + + + + + + + Col105 + 105 + + 4 + 11 + 0 + NotNullable + + Col105 + + + + Col105 + + 11 + + + + + + + Col106 + 106 + + 4 + 11 + 0 + NotNullable + + Col106 + + + + Col106 + + 11 + + + + + + + Col107 + 107 + + 4 + 11 + 0 + NotNullable + + Col107 + + + + Col107 + + 11 + + + + + + + Col108 + 108 + + 4 + 11 + 0 + NotNullable + + Col108 + + + + Col108 + + 11 + + + + + + + Col109 + 109 + + 4 + 11 + 0 + NotNullable + + Col109 + + + + Col109 + + 11 + + + + + + + Col110 + 110 + + 4 + 11 + 0 + NotNullable + + Col110 + + + + Col110 + + 11 + + + + + + + Col111 + 111 + + 4 + 11 + 0 + NotNullable + + Col111 + + + + Col111 + + 11 + + + + + + + Col112 + 112 + + 4 + 11 + 0 + NotNullable + + Col112 + + + + Col112 + + 11 + + + + + + + Col113 + 113 + + 4 + 11 + 0 + NotNullable + + Col113 + + + + Col113 + + 11 + + + + + + + Col114 + 114 + + 4 + 11 + 0 + NotNullable + + Col114 + + + + Col114 + + 11 + + + + + + + Col115 + 115 + + 4 + 11 + 0 + NotNullable + + Col115 + + + + Col115 + + 11 + + + + + + + Col116 + 116 + + 4 + 11 + 0 + NotNullable + + Col116 + + + + Col116 + + 11 + + + + + + + Col117 + 117 + + 4 + 11 + 0 + NotNullable + + Col117 + + + + Col117 + + 11 + + + + + + + Col118 + 118 + + 4 + 11 + 0 + NotNullable + + Col118 + + + + Col118 + + 11 + + + + + + + Col119 + 119 + + 4 + 11 + 0 + NotNullable + + Col119 + + + + Col119 + + 11 + + + + + + + Col120 + 120 + + 4 + 11 + 0 + NotNullable + + Col120 + + + + Col120 + + 11 + + + + + + + Col121 + 121 + + 4 + 11 + 0 + NotNullable + + Col121 + + + + Col121 + + 11 + + + + + + + Col122 + 122 + + 4 + 11 + 0 + NotNullable + + Col122 + + + + Col122 + + 11 + + + + + + + Col123 + 123 + + 4 + 11 + 0 + NotNullable + + Col123 + + + + Col123 + + 11 + + + + + + + Col124 + 124 + + 4 + 11 + 0 + NotNullable + + Col124 + + + + Col124 + + 11 + + + + + + + Col125 + 125 + + 4 + 11 + 0 + NotNullable + + Col125 + + + + Col125 + + 11 + + + + + + + Col126 + 126 + + 4 + 11 + 0 + NotNullable + + Col126 + + + + Col126 + + 11 + + + + + + + Col127 + 127 + + 4 + 11 + 0 + NotNullable + + Col127 + + + + Col127 + + 11 + + + + + + + Col128 + 128 + + 4 + 11 + 0 + NotNullable + + Col128 + + + + Col128 + + 11 + + + + + + + Col129 + 129 + + 4 + 11 + 0 + NotNullable + + Col129 + + + + Col129 + + 11 + + + + + + + Col130 + 130 + + 4 + 11 + 0 + NotNullable + + Col130 + + + + Col130 + + 11 + + + + + + + Col131 + 131 + + 4 + 11 + 0 + NotNullable + + Col131 + + + + Col131 + + 11 + + + + + + + Col132 + 132 + + 4 + 11 + 0 + NotNullable + + Col132 + + + + Col132 + + 11 + + + + + + + Col133 + 133 + + 4 + 11 + 0 + NotNullable + + Col133 + + + + Col133 + + 11 + + + + + + + Col134 + 134 + + 4 + 11 + 0 + NotNullable + + Col134 + + + + Col134 + + 11 + + + + + + + Col135 + 135 + + 4 + 11 + 0 + NotNullable + + Col135 + + + + Col135 + + 11 + + + + + + + Col136 + 136 + + 4 + 11 + 0 + NotNullable + + Col136 + + + + Col136 + + 11 + + + + + + + Col137 + 137 + + 4 + 11 + 0 + NotNullable + + Col137 + + + + Col137 + + 11 + + + + + + + Col138 + 138 + + 4 + 11 + 0 + NotNullable + + Col138 + + + + Col138 + + 11 + + + + + + + Col139 + 139 + + 4 + 11 + 0 + NotNullable + + Col139 + + + + Col139 + + 11 + + + + + + + Col140 + 140 + + 4 + 11 + 0 + NotNullable + + Col140 + + + + Col140 + + 11 + + + + + + + Col141 + 141 + + 4 + 11 + 0 + NotNullable + + Col141 + + + + Col141 + + 11 + + + + + + + Col142 + 142 + + 4 + 11 + 0 + NotNullable + + Col142 + + + + Col142 + + 11 + + + + + + + Col143 + 143 + + 4 + 11 + 0 + NotNullable + + Col143 + + + + Col143 + + 11 + + + + + + + Col144 + 144 + + 4 + 11 + 0 + NotNullable + + Col144 + + + + Col144 + + 11 + + + + + + + Col145 + 145 + + 4 + 11 + 0 + NotNullable + + Col145 + + + + Col145 + + 11 + + + + + + + Col146 + 146 + + 4 + 11 + 0 + NotNullable + + Col146 + + + + Col146 + + 11 + + + + + + + Col147 + 147 + + 4 + 11 + 0 + NotNullable + + Col147 + + + + Col147 + + 11 + + + + + + + Col148 + 148 + + 4 + 11 + 0 + NotNullable + + Col148 + + + + Col148 + + 11 + + + + + + + Col149 + 149 + + 4 + 11 + 0 + NotNullable + + Col149 + + + + Col149 + + 11 + + + + + + + Col150 + 150 + + 4 + 11 + 0 + NotNullable + + Col150 + + + + Col150 + + 11 + + + + + + + Col151 + 151 + + 4 + 11 + 0 + NotNullable + + Col151 + + + + Col151 + + 11 + + + + + + + Col152 + 152 + + 4 + 11 + 0 + NotNullable + + Col152 + + + + Col152 + + 11 + + + + + + + Col153 + 153 + + 4 + 11 + 0 + NotNullable + + Col153 + + + + Col153 + + 11 + + + + + + + Col154 + 154 + + 4 + 11 + 0 + NotNullable + + Col154 + + + + Col154 + + 11 + + + + + + + Col155 + 155 + + 4 + 11 + 0 + NotNullable + + Col155 + + + + Col155 + + 11 + + + + + + + Col156 + 156 + + 4 + 11 + 0 + NotNullable + + Col156 + + + + Col156 + + 11 + + + + + + + Col157 + 157 + + 4 + 11 + 0 + NotNullable + + Col157 + + + + Col157 + + 11 + + + + + + + Col158 + 158 + + 4 + 11 + 0 + NotNullable + + Col158 + + + + Col158 + + 11 + + + + + + + Col159 + 159 + + 4 + 11 + 0 + NotNullable + + Col159 + + + + Col159 + + 11 + + + + + + + Col160 + 160 + + 4 + 11 + 0 + NotNullable + + Col160 + + + + Col160 + + 11 + + + + + + + Col161 + 161 + + 4 + 11 + 0 + NotNullable + + Col161 + + + + Col161 + + 11 + + + + + + + Col162 + 162 + + 4 + 11 + 0 + NotNullable + + Col162 + + + + Col162 + + 11 + + + + + + + Col163 + 163 + + 4 + 11 + 0 + NotNullable + + Col163 + + + + Col163 + + 11 + + + + + + + Col164 + 164 + + 4 + 11 + 0 + NotNullable + + Col164 + + + + Col164 + + 11 + + + + + + + Col165 + 165 + + 4 + 11 + 0 + NotNullable + + Col165 + + + + Col165 + + 11 + + + + + + + Col166 + 166 + + 4 + 11 + 0 + NotNullable + + Col166 + + + + Col166 + + 11 + + + + + + + Col167 + 167 + + 4 + 11 + 0 + NotNullable + + Col167 + + + + Col167 + + 11 + + + + + + + Col168 + 168 + + 4 + 11 + 0 + NotNullable + + Col168 + + + + Col168 + + 11 + + + + + + + Col169 + 169 + + 4 + 11 + 0 + NotNullable + + Col169 + + + + Col169 + + 11 + + + + + + + Col170 + 170 + + 4 + 11 + 0 + NotNullable + + Col170 + + + + Col170 + + 11 + + + + + + + Col171 + 171 + + 4 + 11 + 0 + NotNullable + + Col171 + + + + Col171 + + 11 + + + + + + + Col172 + 172 + + 4 + 11 + 0 + NotNullable + + Col172 + + + + Col172 + + 11 + + + + + + + Col173 + 173 + + 4 + 11 + 0 + NotNullable + + Col173 + + + + Col173 + + 11 + + + + + + + Col174 + 174 + + 4 + 11 + 0 + NotNullable + + Col174 + + + + Col174 + + 11 + + + + + + + Col175 + 175 + + 4 + 11 + 0 + NotNullable + + Col175 + + + + Col175 + + 11 + + + + + + + Col176 + 176 + + 4 + 11 + 0 + NotNullable + + Col176 + + + + Col176 + + 11 + + + + + + + Col177 + 177 + + 4 + 11 + 0 + NotNullable + + Col177 + + + + Col177 + + 11 + + + + + + + Col178 + 178 + + 4 + 11 + 0 + NotNullable + + Col178 + + + + Col178 + + 11 + + + + + + + Col179 + 179 + + 4 + 11 + 0 + NotNullable + + Col179 + + + + Col179 + + 11 + + + + + + + Col180 + 180 + + 4 + 11 + 0 + NotNullable + + Col180 + + + + Col180 + + 11 + + + + + + + Col181 + 181 + + 4 + 11 + 0 + NotNullable + + Col181 + + + + Col181 + + 11 + + + + + + + Col182 + 182 + + 4 + 11 + 0 + NotNullable + + Col182 + + + + Col182 + + 11 + + + + + + + Col183 + 183 + + 4 + 11 + 0 + NotNullable + + Col183 + + + + Col183 + + 11 + + + + + + + Col184 + 184 + + 4 + 11 + 0 + NotNullable + + Col184 + + + + Col184 + + 11 + + + + + + + Col185 + 185 + + 4 + 11 + 0 + NotNullable + + Col185 + + + + Col185 + + 11 + + + + + + + Col186 + 186 + + 4 + 11 + 0 + NotNullable + + Col186 + + + + Col186 + + 11 + + + + + + + Col187 + 187 + + 4 + 11 + 0 + NotNullable + + Col187 + + + + Col187 + + 11 + + + + + + + Col188 + 188 + + 4 + 11 + 0 + NotNullable + + Col188 + + + + Col188 + + 11 + + + + + + + Col189 + 189 + + 4 + 11 + 0 + NotNullable + + Col189 + + + + Col189 + + 11 + + + + + + + Col190 + 190 + + 4 + 11 + 0 + NotNullable + + Col190 + + + + Col190 + + 11 + + + + + + + Col191 + 191 + + 4 + 11 + 0 + NotNullable + + Col191 + + + + Col191 + + 11 + + + + + + + Col192 + 192 + + 4 + 11 + 0 + NotNullable + + Col192 + + + + Col192 + + 11 + + + + + + + Col193 + 193 + + 4 + 11 + 0 + NotNullable + + Col193 + + + + Col193 + + 11 + + + + + + + Col194 + 194 + + 4 + 11 + 0 + NotNullable + + Col194 + + + + Col194 + + 11 + + + + + + + Col195 + 195 + + 4 + 11 + 0 + NotNullable + + Col195 + + + + Col195 + + 11 + + + + + + + Col196 + 196 + + 4 + 11 + 0 + NotNullable + + Col196 + + + + Col196 + + 11 + + + + + + + Col197 + 197 + + 4 + 11 + 0 + NotNullable + + Col197 + + + + Col197 + + 11 + + + + + + + Col198 + 198 + + 4 + 11 + 0 + NotNullable + + Col198 + + + + Col198 + + 11 + + + + + + + Col199 + 199 + + 4 + 11 + 0 + NotNullable + + Col199 + + + + Col199 + + 11 + + + + + + + Col200 + 200 + + 4 + 11 + 0 + NotNullable + + Col200 + + + + Col200 + + 11 + + + + + + + Col201 + 201 + + 4 + 11 + 0 + NotNullable + + Col201 + + + + Col201 + + 11 + + + + + + + Col202 + 202 + + 4 + 11 + 0 + NotNullable + + Col202 + + + + Col202 + + 11 + + + + + + + Col203 + 203 + + 4 + 11 + 0 + NotNullable + + Col203 + + + + Col203 + + 11 + + + + + + + Col204 + 204 + + 4 + 11 + 0 + NotNullable + + Col204 + + + + Col204 + + 11 + + + + + + + Col205 + 205 + + 4 + 11 + 0 + NotNullable + + Col205 + + + + Col205 + + 11 + + + + + + + Col206 + 206 + + 4 + 11 + 0 + NotNullable + + Col206 + + + + Col206 + + 11 + + + + + + + Col207 + 207 + + 4 + 11 + 0 + NotNullable + + Col207 + + + + Col207 + + 11 + + + + + + + Col208 + 208 + + 4 + 11 + 0 + NotNullable + + Col208 + + + + Col208 + + 11 + + + + + + + Col209 + 209 + + 4 + 11 + 0 + NotNullable + + Col209 + + + + Col209 + + 11 + + + + + + + Col210 + 210 + + 4 + 11 + 0 + NotNullable + + Col210 + + + + Col210 + + 11 + + + + + + + Col211 + 211 + + 4 + 11 + 0 + NotNullable + + Col211 + + + + Col211 + + 11 + + + + + + + Col212 + 212 + + 4 + 11 + 0 + NotNullable + + Col212 + + + + Col212 + + 11 + + + + + + + Col213 + 213 + + 4 + 11 + 0 + NotNullable + + Col213 + + + + Col213 + + 11 + + + + + + + Col214 + 214 + + 4 + 11 + 0 + NotNullable + + Col214 + + + + Col214 + + 11 + + + + + + + Col215 + 215 + + 4 + 11 + 0 + NotNullable + + Col215 + + + + Col215 + + 11 + + + + + + + Col216 + 216 + + 4 + 11 + 0 + NotNullable + + Col216 + + + + Col216 + + 11 + + + + + + + Col217 + 217 + + 4 + 11 + 0 + NotNullable + + Col217 + + + + Col217 + + 11 + + + + + + + Col218 + 218 + + 4 + 11 + 0 + NotNullable + + Col218 + + + + Col218 + + 11 + + + + + + + Col219 + 219 + + 4 + 11 + 0 + NotNullable + + Col219 + + + + Col219 + + 11 + + + + + + + Col220 + 220 + + 4 + 11 + 0 + NotNullable + + Col220 + + + + Col220 + + 11 + + + + + + + Col221 + 221 + + 4 + 11 + 0 + NotNullable + + Col221 + + + + Col221 + + 11 + + + + + + + Col222 + 222 + + 4 + 11 + 0 + NotNullable + + Col222 + + + + Col222 + + 11 + + + + + + + Col223 + 223 + + 4 + 11 + 0 + NotNullable + + Col223 + + + + Col223 + + 11 + + + + + + + Col224 + 224 + + 4 + 11 + 0 + NotNullable + + Col224 + + + + Col224 + + 11 + + + + + + + Col225 + 225 + + 4 + 11 + 0 + NotNullable + + Col225 + + + + Col225 + + 11 + + + + + + + Col226 + 226 + + 4 + 11 + 0 + NotNullable + + Col226 + + + + Col226 + + 11 + + + + + + + Col227 + 227 + + 4 + 11 + 0 + NotNullable + + Col227 + + + + Col227 + + 11 + + + + + + + Col228 + 228 + + 4 + 11 + 0 + NotNullable + + Col228 + + + + Col228 + + 11 + + + + + + + Col229 + 229 + + 4 + 11 + 0 + NotNullable + + Col229 + + + + Col229 + + 11 + + + + + + + Col230 + 230 + + 4 + 11 + 0 + NotNullable + + Col230 + + + + Col230 + + 11 + + + + + + + Col231 + 231 + + 4 + 11 + 0 + NotNullable + + Col231 + + + + Col231 + + 11 + + + + + + + Col232 + 232 + + 4 + 11 + 0 + NotNullable + + Col232 + + + + Col232 + + 11 + + + + + + + Col233 + 233 + + 4 + 11 + 0 + NotNullable + + Col233 + + + + Col233 + + 11 + + + + + + + Col234 + 234 + + 4 + 11 + 0 + NotNullable + + Col234 + + + + Col234 + + 11 + + + + + + + Col235 + 235 + + 4 + 11 + 0 + NotNullable + + Col235 + + + + Col235 + + 11 + + + + + + + Col236 + 236 + + 4 + 11 + 0 + NotNullable + + Col236 + + + + Col236 + + 11 + + + + + + + Col237 + 237 + + 4 + 11 + 0 + NotNullable + + Col237 + + + + Col237 + + 11 + + + + + + + Col238 + 238 + + 4 + 11 + 0 + NotNullable + + Col238 + + + + Col238 + + 11 + + + + + + + Col239 + 239 + + 4 + 11 + 0 + NotNullable + + Col239 + + + + Col239 + + 11 + + + + + + + Col240 + 240 + + 4 + 11 + 0 + NotNullable + + Col240 + + + + Col240 + + 11 + + + + + + + Col241 + 241 + + 4 + 11 + 0 + NotNullable + + Col241 + + + + Col241 + + 11 + + + + + + + Col242 + 242 + + 4 + 11 + 0 + NotNullable + + Col242 + + + + Col242 + + 11 + + + + + + + Col243 + 243 + + 4 + 11 + 0 + NotNullable + + Col243 + + + + Col243 + + 11 + + + + + + + Col244 + 244 + + 4 + 11 + 0 + NotNullable + + Col244 + + + + Col244 + + 11 + + + + + + + Col245 + 245 + + 4 + 11 + 0 + NotNullable + + Col245 + + + + Col245 + + 11 + + + + + + + Col246 + 246 + + 4 + 11 + 0 + NotNullable + + Col246 + + + + Col246 + + 11 + + + + + + + Col247 + 247 + + 4 + 11 + 0 + NotNullable + + Col247 + + + + Col247 + + 11 + + + + + + + Col248 + 248 + + 4 + 11 + 0 + NotNullable + + Col248 + + + + Col248 + + 11 + + + + + + + Col249 + 249 + + 4 + 11 + 0 + NotNullable + + Col249 + + + + Col249 + + 11 + + + + + + + Col250 + 250 + + 4 + 11 + 0 + NotNullable + + Col250 + + + + Col250 + + 11 + + + + + + + Col251 + 251 + + 4 + 11 + 0 + NotNullable + + Col251 + + + + Col251 + + 11 + + + + + + + Col252 + 252 + + 4 + 11 + 0 + NotNullable + + Col252 + + + + Col252 + + 11 + + + + + + + Col253 + 253 + + 4 + 11 + 0 + NotNullable + + Col253 + + + + Col253 + + 11 + + + + + + + Col254 + 254 + + 4 + 11 + 0 + NotNullable + + Col254 + + + + Col254 + + 11 + + + + + + + Col255 + 255 + + 4 + 11 + 0 + NotNullable + + Col255 + + + + Col255 + + 11 + + + + + + + Col256 + 256 + + 4 + 11 + 0 + NotNullable + + Col256 + + + + Col256 + + 11 + + + + + + + Col257 + 257 + + 4 + 11 + 0 + NotNullable + + Col257 + + + + Col257 + + 11 + + + + + + + Col258 + 258 + + 4 + 11 + 0 + NotNullable + + Col258 + + + + Col258 + + 11 + + + + + + + Col259 + 259 + + 4 + 11 + 0 + NotNullable + + Col259 + + + + Col259 + + 11 + + + + + + + Col260 + 260 + + 4 + 11 + 0 + NotNullable + + Col260 + + + + Col260 + + 11 + + + + + + + Col261 + 261 + + 4 + 11 + 0 + NotNullable + + Col261 + + + + Col261 + + 11 + + + + + + + Col262 + 262 + + 4 + 11 + 0 + NotNullable + + Col262 + + + + Col262 + + 11 + + + + + + + Col263 + 263 + + 4 + 11 + 0 + NotNullable + + Col263 + + + + Col263 + + 11 + + + + + + + Col264 + 264 + + 4 + 11 + 0 + NotNullable + + Col264 + + + + Col264 + + 11 + + + + + + + Col265 + 265 + + 4 + 11 + 0 + NotNullable + + Col265 + + + + Col265 + + 11 + + + + + + + Col266 + 266 + + 4 + 11 + 0 + NotNullable + + Col266 + + + + Col266 + + 11 + + + + + + + Col267 + 267 + + 4 + 11 + 0 + NotNullable + + Col267 + + + + Col267 + + 11 + + + + + + + Col268 + 268 + + 4 + 11 + 0 + NotNullable + + Col268 + + + + Col268 + + 11 + + + + + + + Col269 + 269 + + 4 + 11 + 0 + NotNullable + + Col269 + + + + Col269 + + 11 + + + + + + + Col270 + 270 + + 4 + 11 + 0 + NotNullable + + Col270 + + + + Col270 + + 11 + + + + + + + Col271 + 271 + + 4 + 11 + 0 + NotNullable + + Col271 + + + + Col271 + + 11 + + + + + + + Col272 + 272 + + 4 + 11 + 0 + NotNullable + + Col272 + + + + Col272 + + 11 + + + + + + + Col273 + 273 + + 4 + 11 + 0 + NotNullable + + Col273 + + + + Col273 + + 11 + + + + + + + Col274 + 274 + + 4 + 11 + 0 + NotNullable + + Col274 + + + + Col274 + + 11 + + + + + + + Col275 + 275 + + 4 + 11 + 0 + NotNullable + + Col275 + + + + Col275 + + 11 + + + + + + + Col276 + 276 + + 4 + 11 + 0 + NotNullable + + Col276 + + + + Col276 + + 11 + + + + + + + Col277 + 277 + + 4 + 11 + 0 + NotNullable + + Col277 + + + + Col277 + + 11 + + + + + + + Col278 + 278 + + 4 + 11 + 0 + NotNullable + + Col278 + + + + Col278 + + 11 + + + + + + + Col279 + 279 + + 4 + 11 + 0 + NotNullable + + Col279 + + + + Col279 + + 11 + + + + + + + Col280 + 280 + + 4 + 11 + 0 + NotNullable + + Col280 + + + + Col280 + + 11 + + + + + + + Col281 + 281 + + 4 + 11 + 0 + NotNullable + + Col281 + + + + Col281 + + 11 + + + + + + + Col282 + 282 + + 4 + 11 + 0 + NotNullable + + Col282 + + + + Col282 + + 11 + + + + + + + Col283 + 283 + + 4 + 11 + 0 + NotNullable + + Col283 + + + + Col283 + + 11 + + + + + + + Col284 + 284 + + 4 + 11 + 0 + NotNullable + + Col284 + + + + Col284 + + 11 + + + + + + + Col285 + 285 + + 4 + 11 + 0 + NotNullable + + Col285 + + + + Col285 + + 11 + + + + + + + Col286 + 286 + + 4 + 11 + 0 + NotNullable + + Col286 + + + + Col286 + + 11 + + + + + + + Col287 + 287 + + 4 + 11 + 0 + NotNullable + + Col287 + + + + Col287 + + 11 + + + + + + + Col288 + 288 + + 4 + 11 + 0 + NotNullable + + Col288 + + + + Col288 + + 11 + + + + + + + Col289 + 289 + + 4 + 11 + 0 + NotNullable + + Col289 + + + + Col289 + + 11 + + + + + + + Col290 + 290 + + 4 + 11 + 0 + NotNullable + + Col290 + + + + Col290 + + 11 + + + + + + + Col291 + 291 + + 4 + 11 + 0 + NotNullable + + Col291 + + + + Col291 + + 11 + + + + + + + Col292 + 292 + + 4 + 11 + 0 + NotNullable + + Col292 + + + + Col292 + + 11 + + + + + + + Col293 + 293 + + 4 + 11 + 0 + NotNullable + + Col293 + + + + Col293 + + 11 + + + + + + + Col294 + 294 + + 4 + 11 + 0 + NotNullable + + Col294 + + + + Col294 + + 11 + + + + + + + Col295 + 295 + + 4 + 11 + 0 + NotNullable + + Col295 + + + + Col295 + + 11 + + + + + + + Col296 + 296 + + 4 + 11 + 0 + NotNullable + + Col296 + + + + Col296 + + 11 + + + + + + + Col297 + 297 + + 4 + 11 + 0 + NotNullable + + Col297 + + + + Col297 + + 11 + + + + + + + Col298 + 298 + + 4 + 11 + 0 + NotNullable + + Col298 + + + + Col298 + + 11 + + + + + + + Col299 + 299 + + 4 + 11 + 0 + NotNullable + + Col299 + + + + Col299 + + 11 + + + + + + + Col300 + 300 + + 4 + 11 + 0 + NotNullable + + Col300 + + + + Col300 + + 11 + + + + + + + Col301 + 301 + + 4 + 11 + 0 + NotNullable + + Col301 + + + + Col301 + + 11 + + + + + + + Col302 + 302 + + 4 + 11 + 0 + NotNullable + + Col302 + + + + Col302 + + 11 + + + + + + + Col303 + 303 + + 4 + 11 + 0 + NotNullable + + Col303 + + + + Col303 + + 11 + + + + + + + Col304 + 304 + + 4 + 11 + 0 + NotNullable + + Col304 + + + + Col304 + + 11 + + + + + + + Col305 + 305 + + 4 + 11 + 0 + NotNullable + + Col305 + + + + Col305 + + 11 + + + + + + + Col306 + 306 + + 4 + 11 + 0 + NotNullable + + Col306 + + + + Col306 + + 11 + + + + + + + Col307 + 307 + + 4 + 11 + 0 + NotNullable + + Col307 + + + + Col307 + + 11 + + + + + + + Col308 + 308 + + 4 + 11 + 0 + NotNullable + + Col308 + + + + Col308 + + 11 + + + + + + + Col309 + 309 + + 4 + 11 + 0 + NotNullable + + Col309 + + + + Col309 + + 11 + + + + + + + Col310 + 310 + + 4 + 11 + 0 + NotNullable + + Col310 + + + + Col310 + + 11 + + + + + + + Col311 + 311 + + 4 + 11 + 0 + NotNullable + + Col311 + + + + Col311 + + 11 + + + + + + + Col312 + 312 + + 4 + 11 + 0 + NotNullable + + Col312 + + + + Col312 + + 11 + + + + + + + Col313 + 313 + + 4 + 11 + 0 + NotNullable + + Col313 + + + + Col313 + + 11 + + + + + + + Col314 + 314 + + 4 + 11 + 0 + NotNullable + + Col314 + + + + Col314 + + 11 + + + + + + + Col315 + 315 + + 4 + 11 + 0 + NotNullable + + Col315 + + + + Col315 + + 11 + + + + + + + Col316 + 316 + + 4 + 11 + 0 + NotNullable + + Col316 + + + + Col316 + + 11 + + + + + + + Col317 + 317 + + 4 + 11 + 0 + NotNullable + + Col317 + + + + Col317 + + 11 + + + + + + + Col318 + 318 + + 4 + 11 + 0 + NotNullable + + Col318 + + + + Col318 + + 11 + + + + + + + Col319 + 319 + + 4 + 11 + 0 + NotNullable + + Col319 + + + + Col319 + + 11 + + + + + + + Col320 + 320 + + 4 + 11 + 0 + NotNullable + + Col320 + + + + Col320 + + 11 + + + + + + + Col321 + 321 + + 4 + 11 + 0 + NotNullable + + Col321 + + + + Col321 + + 11 + + + + + + + Col322 + 322 + + 4 + 11 + 0 + NotNullable + + Col322 + + + + Col322 + + 11 + + + + + + + Col323 + 323 + + 4 + 11 + 0 + NotNullable + + Col323 + + + + Col323 + + 11 + + + + + + + Col324 + 324 + + 4 + 11 + 0 + NotNullable + + Col324 + + + + Col324 + + 11 + + + + + + + Col325 + 325 + + 4 + 11 + 0 + NotNullable + + Col325 + + + + Col325 + + 11 + + + + + + + Col326 + 326 + + 4 + 11 + 0 + NotNullable + + Col326 + + + + Col326 + + 11 + + + + + + + Col327 + 327 + + 4 + 11 + 0 + NotNullable + + Col327 + + + + Col327 + + 11 + + + + + + + Col328 + 328 + + 4 + 11 + 0 + NotNullable + + Col328 + + + + Col328 + + 11 + + + + + + + Col329 + 329 + + 4 + 11 + 0 + NotNullable + + Col329 + + + + Col329 + + 11 + + + + + + + Col330 + 330 + + 4 + 11 + 0 + NotNullable + + Col330 + + + + Col330 + + 11 + + + + + + + Col331 + 331 + + 4 + 11 + 0 + NotNullable + + Col331 + + + + Col331 + + 11 + + + + + + + Col332 + 332 + + 4 + 11 + 0 + NotNullable + + Col332 + + + + Col332 + + 11 + + + + + + + Col333 + 333 + + 4 + 11 + 0 + NotNullable + + Col333 + + + + Col333 + + 11 + + + + + + + Col334 + 334 + + 4 + 11 + 0 + NotNullable + + Col334 + + + + Col334 + + 11 + + + + + + + Col335 + 335 + + 4 + 11 + 0 + NotNullable + + Col335 + + + + Col335 + + 11 + + + + + + + Col336 + 336 + + 4 + 11 + 0 + NotNullable + + Col336 + + + + Col336 + + 11 + + + + + + + Col337 + 337 + + 4 + 11 + 0 + NotNullable + + Col337 + + + + Col337 + + 11 + + + + + + + Col338 + 338 + + 4 + 11 + 0 + NotNullable + + Col338 + + + + Col338 + + 11 + + + + + + + Col339 + 339 + + 4 + 11 + 0 + NotNullable + + Col339 + + + + Col339 + + 11 + + + + + + + Col340 + 340 + + 4 + 11 + 0 + NotNullable + + Col340 + + + + Col340 + + 11 + + + + + + + Col341 + 341 + + 4 + 11 + 0 + NotNullable + + Col341 + + + + Col341 + + 11 + + + + + + + Col342 + 342 + + 4 + 11 + 0 + NotNullable + + Col342 + + + + Col342 + + 11 + + + + + + + Col343 + 343 + + 4 + 11 + 0 + NotNullable + + Col343 + + + + Col343 + + 11 + + + + + + + Col344 + 344 + + 4 + 11 + 0 + NotNullable + + Col344 + + + + Col344 + + 11 + + + + + + + Col345 + 345 + + 4 + 11 + 0 + NotNullable + + Col345 + + + + Col345 + + 11 + + + + + + + Col346 + 346 + + 4 + 11 + 0 + NotNullable + + Col346 + + + + Col346 + + 11 + + + + + + + Col347 + 347 + + 4 + 11 + 0 + NotNullable + + Col347 + + + + Col347 + + 11 + + + + + + + Col348 + 348 + + 4 + 11 + 0 + NotNullable + + Col348 + + + + Col348 + + 11 + + + + + + + Col349 + 349 + + 4 + 11 + 0 + NotNullable + + Col349 + + + + Col349 + + 11 + + + + + + + Col350 + 350 + + 4 + 11 + 0 + NotNullable + + Col350 + + + + Col350 + + 11 + + + + + + + Col351 + 351 + + 4 + 11 + 0 + NotNullable + + Col351 + + + + Col351 + + 11 + + + + + + + Col352 + 352 + + 4 + 11 + 0 + NotNullable + + Col352 + + + + Col352 + + 11 + + + + + + + Col353 + 353 + + 4 + 11 + 0 + NotNullable + + Col353 + + + + Col353 + + 11 + + + + + + + Col354 + 354 + + 4 + 11 + 0 + NotNullable + + Col354 + + + + Col354 + + 11 + + + + + + + Col355 + 355 + + 4 + 11 + 0 + NotNullable + + Col355 + + + + Col355 + + 11 + + + + + + + Col356 + 356 + + 4 + 11 + 0 + NotNullable + + Col356 + + + + Col356 + + 11 + + + + + + + Col357 + 357 + + 4 + 11 + 0 + NotNullable + + Col357 + + + + Col357 + + 11 + + + + + + + Col358 + 358 + + 4 + 11 + 0 + NotNullable + + Col358 + + + + Col358 + + 11 + + + + + + + Col359 + 359 + + 4 + 11 + 0 + NotNullable + + Col359 + + + + Col359 + + 11 + + + + + + + Col360 + 360 + + 4 + 11 + 0 + NotNullable + + Col360 + + + + Col360 + + 11 + + + + + + + Col361 + 361 + + 4 + 11 + 0 + NotNullable + + Col361 + + + + Col361 + + 11 + + + + + + + Col362 + 362 + + 4 + 11 + 0 + NotNullable + + Col362 + + + + Col362 + + 11 + + + + + + + Col363 + 363 + + 4 + 11 + 0 + NotNullable + + Col363 + + + + Col363 + + 11 + + + + + + + Col364 + 364 + + 4 + 11 + 0 + NotNullable + + Col364 + + + + Col364 + + 11 + + + + + + + Col365 + 365 + + 4 + 11 + 0 + NotNullable + + Col365 + + + + Col365 + + 11 + + + + + + + Col366 + 366 + + 4 + 11 + 0 + NotNullable + + Col366 + + + + Col366 + + 11 + + + + + + + Col367 + 367 + + 4 + 11 + 0 + NotNullable + + Col367 + + + + Col367 + + 11 + + + + + + + Col368 + 368 + + 4 + 11 + 0 + NotNullable + + Col368 + + + + Col368 + + 11 + + + + + + + Col369 + 369 + + 4 + 11 + 0 + NotNullable + + Col369 + + + + Col369 + + 11 + + + + + + + Col370 + 370 + + 4 + 11 + 0 + NotNullable + + Col370 + + + + Col370 + + 11 + + + + + + + Col371 + 371 + + 4 + 11 + 0 + NotNullable + + Col371 + + + + Col371 + + 11 + + + + + + + Col372 + 372 + + 4 + 11 + 0 + NotNullable + + Col372 + + + + Col372 + + 11 + + + + + + + Col373 + 373 + + 4 + 11 + 0 + NotNullable + + Col373 + + + + Col373 + + 11 + + + + + + + Col374 + 374 + + 4 + 11 + 0 + NotNullable + + Col374 + + + + Col374 + + 11 + + + + + + + Col375 + 375 + + 4 + 11 + 0 + NotNullable + + Col375 + + + + Col375 + + 11 + + + + + + + Col376 + 376 + + 4 + 11 + 0 + NotNullable + + Col376 + + + + Col376 + + 11 + + + + + + + Col377 + 377 + + 4 + 11 + 0 + NotNullable + + Col377 + + + + Col377 + + 11 + + + + + + + Col378 + 378 + + 4 + 11 + 0 + NotNullable + + Col378 + + + + Col378 + + 11 + + + + + + + Col379 + 379 + + 4 + 11 + 0 + NotNullable + + Col379 + + + + Col379 + + 11 + + + + + + + Col380 + 380 + + 4 + 11 + 0 + NotNullable + + Col380 + + + + Col380 + + 11 + + + + + + + Col381 + 381 + + 4 + 11 + 0 + NotNullable + + Col381 + + + + Col381 + + 11 + + + + + + + Col382 + 382 + + 4 + 11 + 0 + NotNullable + + Col382 + + + + Col382 + + 11 + + + + + + + Col383 + 383 + + 4 + 11 + 0 + NotNullable + + Col383 + + + + Col383 + + 11 + + + + + + + Col384 + 384 + + 4 + 11 + 0 + NotNullable + + Col384 + + + + Col384 + + 11 + + + + + + + Col385 + 385 + + 4 + 11 + 0 + NotNullable + + Col385 + + + + Col385 + + 11 + + + + + + + Col386 + 386 + + 4 + 11 + 0 + NotNullable + + Col386 + + + + Col386 + + 11 + + + + + + + Col387 + 387 + + 4 + 11 + 0 + NotNullable + + Col387 + + + + Col387 + + 11 + + + + + + + Col388 + 388 + + 4 + 11 + 0 + NotNullable + + Col388 + + + + Col388 + + 11 + + + + + + + Col389 + 389 + + 4 + 11 + 0 + NotNullable + + Col389 + + + + Col389 + + 11 + + + + + + + Col390 + 390 + + 4 + 11 + 0 + NotNullable + + Col390 + + + + Col390 + + 11 + + + + + + + Col391 + 391 + + 4 + 11 + 0 + NotNullable + + Col391 + + + + Col391 + + 11 + + + + + + + Col392 + 392 + + 4 + 11 + 0 + NotNullable + + Col392 + + + + Col392 + + 11 + + + + + + + Col393 + 393 + + 4 + 11 + 0 + NotNullable + + Col393 + + + + Col393 + + 11 + + + + + + + Col394 + 394 + + 4 + 11 + 0 + NotNullable + + Col394 + + + + Col394 + + 11 + + + + + + + Col395 + 395 + + 4 + 11 + 0 + NotNullable + + Col395 + + + + Col395 + + 11 + + + + + + + Col396 + 396 + + 4 + 11 + 0 + NotNullable + + Col396 + + + + Col396 + + 11 + + + + + + + Col397 + 397 + + 4 + 11 + 0 + NotNullable + + Col397 + + + + Col397 + + 11 + + + + + + + Col398 + 398 + + 4 + 11 + 0 + NotNullable + + Col398 + + + + Col398 + + 11 + + + + + + + Col399 + 399 + + 4 + 11 + 0 + NotNullable + + Col399 + + + + Col399 + + 11 + + + + + + + Col400 + 400 + + 4 + 11 + 0 + NotNullable + + Col400 + + + + Col400 + + 11 + + + + + + + Col401 + 401 + + 4 + 11 + 0 + NotNullable + + Col401 + + + + Col401 + + 11 + + + + + + + Col402 + 402 + + 4 + 11 + 0 + NotNullable + + Col402 + + + + Col402 + + 11 + + + + + + + Col403 + 403 + + 4 + 11 + 0 + NotNullable + + Col403 + + + + Col403 + + 11 + + + + + + + Col404 + 404 + + 4 + 11 + 0 + NotNullable + + Col404 + + + + Col404 + + 11 + + + + + + + Col405 + 405 + + 4 + 11 + 0 + NotNullable + + Col405 + + + + Col405 + + 11 + + + + + + + Col406 + 406 + + 4 + 11 + 0 + NotNullable + + Col406 + + + + Col406 + + 11 + + + + + + + Col407 + 407 + + 4 + 11 + 0 + NotNullable + + Col407 + + + + Col407 + + 11 + + + + + + + Col408 + 408 + + 4 + 11 + 0 + NotNullable + + Col408 + + + + Col408 + + 11 + + + + + + + Col409 + 409 + + 4 + 11 + 0 + NotNullable + + Col409 + + + + Col409 + + 11 + + + + + + + Col410 + 410 + + 4 + 11 + 0 + NotNullable + + Col410 + + + + Col410 + + 11 + + + + + + + Col411 + 411 + + 4 + 11 + 0 + NotNullable + + Col411 + + + + Col411 + + 11 + + + + + + + Col412 + 412 + + 4 + 11 + 0 + NotNullable + + Col412 + + + + Col412 + + 11 + + + + + + + Col413 + 413 + + 4 + 11 + 0 + NotNullable + + Col413 + + + + Col413 + + 11 + + + + + + + Col414 + 414 + + 4 + 11 + 0 + NotNullable + + Col414 + + + + Col414 + + 11 + + + + + + + Col415 + 415 + + 4 + 11 + 0 + NotNullable + + Col415 + + + + Col415 + + 11 + + + + + + + Col416 + 416 + + 4 + 11 + 0 + NotNullable + + Col416 + + + + Col416 + + 11 + + + + + + + Col417 + 417 + + 4 + 11 + 0 + NotNullable + + Col417 + + + + Col417 + + 11 + + + + + + + Col418 + 418 + + 4 + 11 + 0 + NotNullable + + Col418 + + + + Col418 + + 11 + + + + + + + Col419 + 419 + + 4 + 11 + 0 + NotNullable + + Col419 + + + + Col419 + + 11 + + + + + + + Col420 + 420 + + 4 + 11 + 0 + NotNullable + + Col420 + + + + Col420 + + 11 + + + + + + + Col421 + 421 + + 4 + 11 + 0 + NotNullable + + Col421 + + + + Col421 + + 11 + + + + + + + Col422 + 422 + + 4 + 11 + 0 + NotNullable + + Col422 + + + + Col422 + + 11 + + + + + + + Col423 + 423 + + 4 + 11 + 0 + NotNullable + + Col423 + + + + Col423 + + 11 + + + + + + + Col424 + 424 + + 4 + 11 + 0 + NotNullable + + Col424 + + + + Col424 + + 11 + + + + + + + Col425 + 425 + + 4 + 11 + 0 + NotNullable + + Col425 + + + + Col425 + + 11 + + + + + + + Col426 + 426 + + 4 + 11 + 0 + NotNullable + + Col426 + + + + Col426 + + 11 + + + + + + + Col427 + 427 + + 4 + 11 + 0 + NotNullable + + Col427 + + + + Col427 + + 11 + + + + + + + Col428 + 428 + + 4 + 11 + 0 + NotNullable + + Col428 + + + + Col428 + + 11 + + + + + + + Col429 + 429 + + 4 + 11 + 0 + NotNullable + + Col429 + + + + Col429 + + 11 + + + + + + + Col430 + 430 + + 4 + 11 + 0 + NotNullable + + Col430 + + + + Col430 + + 11 + + + + + + + Col431 + 431 + + 4 + 11 + 0 + NotNullable + + Col431 + + + + Col431 + + 11 + + + + + + + Col432 + 432 + + 4 + 11 + 0 + NotNullable + + Col432 + + + + Col432 + + 11 + + + + + + + Col433 + 433 + + 4 + 11 + 0 + NotNullable + + Col433 + + + + Col433 + + 11 + + + + + + + Col434 + 434 + + 4 + 11 + 0 + NotNullable + + Col434 + + + + Col434 + + 11 + + + + + + + Col435 + 435 + + 4 + 11 + 0 + NotNullable + + Col435 + + + + Col435 + + 11 + + + + + + + Col436 + 436 + + 4 + 11 + 0 + NotNullable + + Col436 + + + + Col436 + + 11 + + + + + + + Col437 + 437 + + 4 + 11 + 0 + NotNullable + + Col437 + + + + Col437 + + 11 + + + + + + + Col438 + 438 + + 4 + 11 + 0 + NotNullable + + Col438 + + + + Col438 + + 11 + + + + + + + Col439 + 439 + + 4 + 11 + 0 + NotNullable + + Col439 + + + + Col439 + + 11 + + + + + + + Col440 + 440 + + 4 + 11 + 0 + NotNullable + + Col440 + + + + Col440 + + 11 + + + + + + + Col441 + 441 + + 4 + 11 + 0 + NotNullable + + Col441 + + + + Col441 + + 11 + + + + + + + Col442 + 442 + + 4 + 11 + 0 + NotNullable + + Col442 + + + + Col442 + + 11 + + + + + + + Col443 + 443 + + 4 + 11 + 0 + NotNullable + + Col443 + + + + Col443 + + 11 + + + + + + + Col444 + 444 + + 4 + 11 + 0 + NotNullable + + Col444 + + + + Col444 + + 11 + + + + + + + Col445 + 445 + + 4 + 11 + 0 + NotNullable + + Col445 + + + + Col445 + + 11 + + + + + + + Col446 + 446 + + 4 + 11 + 0 + NotNullable + + Col446 + + + + Col446 + + 11 + + + + + + + Col447 + 447 + + 4 + 11 + 0 + NotNullable + + Col447 + + + + Col447 + + 11 + + + + + + + Col448 + 448 + + 4 + 11 + 0 + NotNullable + + Col448 + + + + Col448 + + 11 + + + + + + + Col449 + 449 + + 4 + 11 + 0 + NotNullable + + Col449 + + + + Col449 + + 11 + + + + + + + Col450 + 450 + + 4 + 11 + 0 + NotNullable + + Col450 + + + + Col450 + + 11 + + + + + + + Col451 + 451 + + 4 + 11 + 0 + NotNullable + + Col451 + + + + Col451 + + 11 + + + + + + + Col452 + 452 + + 4 + 11 + 0 + NotNullable + + Col452 + + + + Col452 + + 11 + + + + + + + Col453 + 453 + + 4 + 11 + 0 + NotNullable + + Col453 + + + + Col453 + + 11 + + + + + + + Col454 + 454 + + 4 + 11 + 0 + NotNullable + + Col454 + + + + Col454 + + 11 + + + + + + + Col455 + 455 + + 4 + 11 + 0 + NotNullable + + Col455 + + + + Col455 + + 11 + + + + + + + Col456 + 456 + + 4 + 11 + 0 + NotNullable + + Col456 + + + + Col456 + + 11 + + + + + + + Col457 + 457 + + 4 + 11 + 0 + NotNullable + + Col457 + + + + Col457 + + 11 + + + + + + + Col458 + 458 + + 4 + 11 + 0 + NotNullable + + Col458 + + + + Col458 + + 11 + + + + + + + Col459 + 459 + + 4 + 11 + 0 + NotNullable + + Col459 + + + + Col459 + + 11 + + + + + + + Col460 + 460 + + 4 + 11 + 0 + NotNullable + + Col460 + + + + Col460 + + 11 + + + + + + + Col461 + 461 + + 4 + 11 + 0 + NotNullable + + Col461 + + + + Col461 + + 11 + + + + + + + Col462 + 462 + + 4 + 11 + 0 + NotNullable + + Col462 + + + + Col462 + + 11 + + + + + + + Col463 + 463 + + 4 + 11 + 0 + NotNullable + + Col463 + + + + Col463 + + 11 + + + + + + + Col464 + 464 + + 4 + 11 + 0 + NotNullable + + Col464 + + + + Col464 + + 11 + + + + + + + Col465 + 465 + + 4 + 11 + 0 + NotNullable + + Col465 + + + + Col465 + + 11 + + + + + + + Col466 + 466 + + 4 + 11 + 0 + NotNullable + + Col466 + + + + Col466 + + 11 + + + + + + + Col467 + 467 + + 4 + 11 + 0 + NotNullable + + Col467 + + + + Col467 + + 11 + + + + + + + Col468 + 468 + + 4 + 11 + 0 + NotNullable + + Col468 + + + + Col468 + + 11 + + + + + + + Col469 + 469 + + 4 + 11 + 0 + NotNullable + + Col469 + + + + Col469 + + 11 + + + + + + + Col470 + 470 + + 4 + 11 + 0 + NotNullable + + Col470 + + + + Col470 + + 11 + + + + + + + Col471 + 471 + + 4 + 11 + 0 + NotNullable + + Col471 + + + + Col471 + + 11 + + + + + + + Col472 + 472 + + 4 + 11 + 0 + NotNullable + + Col472 + + + + Col472 + + 11 + + + + + + + Col473 + 473 + + 4 + 11 + 0 + NotNullable + + Col473 + + + + Col473 + + 11 + + + + + + + Col474 + 474 + + 4 + 11 + 0 + NotNullable + + Col474 + + + + Col474 + + 11 + + + + + + + Col475 + 475 + + 4 + 11 + 0 + NotNullable + + Col475 + + + + Col475 + + 11 + + + + + + + Col476 + 476 + + 4 + 11 + 0 + NotNullable + + Col476 + + + + Col476 + + 11 + + + + + + + Col477 + 477 + + 4 + 11 + 0 + NotNullable + + Col477 + + + + Col477 + + 11 + + + + + + + Col478 + 478 + + 4 + 11 + 0 + NotNullable + + Col478 + + + + Col478 + + 11 + + + + + + + Col479 + 479 + + 4 + 11 + 0 + NotNullable + + Col479 + + + + Col479 + + 11 + + + + + + + Col480 + 480 + + 4 + 11 + 0 + NotNullable + + Col480 + + + + Col480 + + 11 + + + + + + + Col481 + 481 + + 4 + 11 + 0 + NotNullable + + Col481 + + + + Col481 + + 11 + + + + + + + Col482 + 482 + + 4 + 11 + 0 + NotNullable + + Col482 + + + + Col482 + + 11 + + + + + + + Col483 + 483 + + 4 + 11 + 0 + NotNullable + + Col483 + + + + Col483 + + 11 + + + + + + + Col484 + 484 + + 4 + 11 + 0 + NotNullable + + Col484 + + + + Col484 + + 11 + + + + + + + Col485 + 485 + + 4 + 11 + 0 + NotNullable + + Col485 + + + + Col485 + + 11 + + + + + + + Col486 + 486 + + 4 + 11 + 0 + NotNullable + + Col486 + + + + Col486 + + 11 + + + + + + + Col487 + 487 + + 4 + 11 + 0 + NotNullable + + Col487 + + + + Col487 + + 11 + + + + + + + Col488 + 488 + + 4 + 11 + 0 + NotNullable + + Col488 + + + + Col488 + + 11 + + + + + + + Col489 + 489 + + 4 + 11 + 0 + NotNullable + + Col489 + + + + Col489 + + 11 + + + + + + + Col490 + 490 + + 4 + 11 + 0 + NotNullable + + Col490 + + + + Col490 + + 11 + + + + + + + Col491 + 491 + + 4 + 11 + 0 + NotNullable + + Col491 + + + + Col491 + + 11 + + + + + + + Col492 + 492 + + 4 + 11 + 0 + NotNullable + + Col492 + + + + Col492 + + 11 + + + + + + + Col493 + 493 + + 4 + 11 + 0 + NotNullable + + Col493 + + + + Col493 + + 11 + + + + + + + Col494 + 494 + + 4 + 11 + 0 + NotNullable + + Col494 + + + + Col494 + + 11 + + + + + + + Col495 + 495 + + 4 + 11 + 0 + NotNullable + + Col495 + + + + Col495 + + 11 + + + + + + + Col496 + 496 + + 4 + 11 + 0 + NotNullable + + Col496 + + + + Col496 + + 11 + + + + + + + Col497 + 497 + + 4 + 11 + 0 + NotNullable + + Col497 + + + + Col497 + + 11 + + + + + + + Col498 + 498 + + 4 + 11 + 0 + NotNullable + + Col498 + + + + Col498 + + 11 + + + + + + + Col499 + 499 + + 4 + 11 + 0 + NotNullable + + Col499 + + + + Col499 + + 11 + + + + + + + Col500 + 500 + + 4 + 11 + 0 + NotNullable + + Col500 + + + + Col500 + + 11 + + + + + + + +]]> + + + + + + + + + + + + + a4 + landscape + 0.5cm + 0.5cm + 0.5cm + 0.5cm + + + html + new Date()]]> + + + + + + + Mega Data Set + + + COL1 + COL1 + dataSetRow["COL1"] + integer + + + COL2 + COL2 + dataSetRow["COL2"] + string + + + COL3 + COL3 + dataSetRow["COL3"] + string + + + COL4 + COL4 + dataSetRow["COL4"] + string + + + COL5 + COL5 + dataSetRow["COL5"] + string + + + COL6 + COL6 + dataSetRow["COL6"] + integer + + + COL7 + COL7 + dataSetRow["COL7"] + string + + + COL8 + COL8 + dataSetRow["COL8"] + string + + + COL9 + COL9 + dataSetRow["COL9"] + string + + + COL10 + COL10 + dataSetRow["COL10"] + string + + + COL11 + COL11 + dataSetRow["COL11"] + integer + + + COL12 + COL12 + dataSetRow["COL12"] + string + + + COL13 + COL13 + dataSetRow["COL13"] + string + + + COL14 + COL14 + dataSetRow["COL14"] + string + + + + 0 + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + ExcelEmitter.NoStyles + boolean + + + true + + + COL1 + + + + + COL2 + + + + + COL3 + + + + + COL4 + + + + + COL5 + + + + + COL6 + + + + + COL7 + + + + + COL8 + + + + + COL9 + + + + + COL10 + + + + + COL11 + + + + + COL12 + + + + + COL13 + + + + + COL14 + + + + +
+ + + + + + + + + + + + + + + + +
+
+ +
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeTemplate.xlsx b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MegaSizeTemplate.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..423bcb151237a4e5ffd2e788e946cdc89fb54931 GIT binary patch literal 8381 zcmeHMg_kH%dp8MMC-kE2gnfcu_^BWy?3`}wWHUJj@05Afed$|tQXaGPGCICPN zz(t41ySw?o+i2-i?M{NVpT8wbz+F}GvjJ%luc|Oss?OJ)TbM52OtbcNZA8z3}HM~xfsyRPSX9-hGmU6?8sL?A2zN{b@ zs4y419%5Y-BhSf#)(W7xQ_2rmM!9Xehg&RAXRuKb%^D~^GUTxtXn6Jj%nNRNK;EzT zh$Gknf&aQDoyR!86DaHG0w`}#G>bL5+q4N@c^;-)3Jb7K+6z+sj)`-4gPoOkqpTvx zPM9ow``}&Kd`zB~n*rvvRxSnW%YqTbxb55+ z&aAz79@)`C+j2gYANUs5qTRQM3aXnM41mtxklA3!&wPs7(Le!@0ENs4UN9GLKHgvM z|3l<|F%19m>TxL_v`~ob+gEujzjpb>O$E20q*X(umC=B%lVy*-A-;%3=G$2WMwprn za{O%bgEVAeZ^O}mo(9UN)!o7&TXzo{IPDZr_1uUgAIfC!NZwDCKx1t@zu@v9pg0Wy zoxUu86&p*{l6J)m6{6K9Cpg^kDoN(o9kg~BPrX|X`<%8e71=?j!y`G_<%Ek9h*Jr^ zkUW3YB&6vcz_$?$&CrUI$s>~(@>`d;BdGX*EYFr3QVpj#&iQ!j{UwtPMjqRox%SCT zqo^m7di0pe(y`=XjJM3!uc5rp9V))JjY_VRMJ#LDez)%GB{6vLuP6xxr)8X=c3My< zp#tEd1-S721{8mHFK4K`yYnv@><`eOq0$&C*Zp^2FH=6K_3#7x_QUpp8*U$~nV1lJ ziVA_+95^k(R!HRprHnZT5 zzmUC&zybEmL8LGf@!42rCZ~;&cW8t*)z>amm|6q$mNHk1(rjrGvSWbbn_AQpBT%RcuLF68u@F@` zOctY~g{eQ)Dd-=J7l}8#QD~GOMAmC@q+yV<2l}PD`?F<@d{ayDuhpW=9bXeH#q_a$ zGlq<7=cVVZ=Jd>S94#JC8Yl7a$$OqRY-Zz6ZR3ZDHV1os)Sjo5%mvaJw#cRu@>8>+ zIOfoQ}<&Qe32FI-IBUBx=^S~UAtD0h~OTld>A@slK7mD8D)!^IaA;{bb9DJlttyvsU-Zt4M?D7J zpz6?ndaO#*?!h?9Q|l)F_}_+G)&Yrz76% zK2>8yJc~K8rW_iQWE2?Id;_lyGrncehfa?+4>z2uoU~(oCv>J0$IK8IC|CfNmDij= z4#K}tzU@={g7!Q*lua{-0$U<)N=R-LmVxI3H$`HAZ9;@tNYbJx)A8BnEGMtt4o*$t zFKFBmXn?v}TP$8p_-=3>r>V&NUm1dxEicZfoK3cm2p5lX%`$g(nX!rE0TV2 zI_lSi^f|z`Jse>Tx>0*!>VJq$E=Z-FF*a9l9ik=`r6G#sdFl=bD$0I$hXWod*&-B+ zmpEBz5_=HLdjS}eiKK{6&Stj_3x==oCMbnLM*!}m=9zW!?dDVyZ<9{2G!2lK{9Q@6 z2p-ksJ-+#Ju7C37JaskdLjwH|pR29$!)|&W9{Xk9gz%Mj8H*ujo740~(s?1rM~8RT z15A5vF1pz}uC5-60RQYeJ1;nE)9`rM23 zWMyaeY^Uf3>f2)xhx*}d=i$>XRf*Zb-Vl4n`y0y~a$s0KpZB+=jewRq;B8V{uK~V^ z+SBr?5qZcTgG>TMW5c~Rphi8kRzW6xt+6)!4Q;0AhW7~6`p@Q*M4@~4Xt-#SGC7Jj zzo#XU?(XS+nek1$2vY~^ZqX^yYN%@p7BjOa-H!Eh#0<&G*e0y@bE)^g<15Pb@lg~_ zi;4>Fuv!E?=|<+EcpfLsvt*hTI0aD%*^63@fiCm!isss&10NYmw_vrR%wOq%Gu?5J30^{|g-syEk&PY%dH7U{= zF)Cp;8=%c$gK^(}tyHM3DT2u1bChh`D2=#k2vA)v;8PYMA&oght!X%>F}*GYv0RSK zqUEtrvP@|)Ml>n!@>_>Ubw_8(lOKb5!qgWuP_C#Rr^LkFgBH5c1ZuIn%!XE@ukRN5 zYA(GTo~kKUkZqc_Hu@-+n*|wx+r<=i^B9{VW^#tQ)|#F8Ga+Q+)R@;mlV-gBkP)g; ziOl4>#@18ajoYhFV||hd4>OCw6OZ^V%k6T~dIwXO%t)vSFLnZAChw0^0>6#Z7;6X$022$Bu+0NBD(i15)gZzo$JO7WB8FSewsm1 zy=q-MTGv61Dw>~lTH#kTJkP?yU|hvXKTvO(T(sx%XBR58$P8G%}L_pT~4(>fRo zW2~>F^%eKoJ+SJ)Q*;N*ekNAM_eyp>3*?9mIq)hL?~I9N&Y_K?8^7fzlEw1>w9&y3 zb3rur%^DY`uDjbI%#ae&cU-U0*h z$o-oRZh>2+su?!np6ylhz9V)#`urOC@koX3`GT|e((}C_7r}5nH(FsLO}iWOp0`pa zJC%NIrg^(rrf9?X5LqtG%W3lE97t7_i8@uyeZl3<*deNJs|6sdM{>jo z{mf1ILDuzBfygID=_hkBOP5dCu&pt4gWn6&soYVK5Dn{lPdsNeQT)>JUoMB~J#rP)+YeEHNJ1{)fi_B0A@r@{aLatHtbqTlnl&qEj3 zuL*p|2;z+7Cl8_Dk)~`b^P4DE58Is(x=-FB;D8fo=rVh2vR6ed!)K>sU*#29qOf|4 z9=6RxcnNdvzPXRv;dyrbQYeRJiHgn*iyYdmX72KG(vx-GukpJ1M7Oc*^pY@L;Yyp^ zm;QCa)Jkp{5t#sn2(7V+%tus_;txm@PNQE&KS|XCB@nq7QhYJHW$rN4V=4+StWUB5 zB`IefT~PuPCa){^)>Ecu#;{cT zG?=RQk-?CvC>|PTygFwbu~#!Gn=HnYM$*!6av@|{Qs_9sO%o>4*d&=~C5i8ZMp;uq z`GpM5dMpkuj_BSi`{q!kJ27U^XfYVIHl0bBx4n0wKL04G{EO)6GG@+K%9bgWxA6vF z4P0|SWZ#j~9TsOGR>z=(y|l?;FBTA;1+of?5@nyxmtudzhvSf7DC4*rqas9 zpnnWtG(TV;=?zETOXE`_< zJT(}7P!FJZ$|Tzuf3|u4v+KAqJ%b&ROdllE{>?B(>mH4 z`-NjbzqIvgm*~xqk+3R$2^)Ld{M_1=ncMM#(WviTIK_uI&5=}ixdTScet3$drWZ8d zs1cVILW%RC*9XeAT`iwi_Vp`CE~LuH#~^!v>HEl;DJzNa#S!yn@Ml*Nve%Hu zKJ!!yh0Ui~V3kz{($|p1ndJP(cKvv-ghi+>M1sPf72;il+`r_{dH@Sw5Y3Jc?A90j zqN!B>&|Tbgo%{`jk-Vll+|_YS10|u zf#pQ^U*2c>gsc<4#``xA4fp7renzz}VW?fo-$3+B`{L~YgZX&#{kr^G4yL7Rde89# zBlmN+ACGN~L25@ts&_R=vfCv zQoKh6a)Np1Gmf*AzysjvcbfPZ;8qt&G{^#l!+cEq~D?%-jGMdQcR-5fv6oL?XgGd zgvK+bFg69*Yp)S6(~6R1D<;%#&Bp_e1G=!rs-Z$wF8aZPzNr@(apHc7j8AOh0 zB{?<(UNZG5BzKYp#aam+1K;`-t0cM+f zUd~Ev6ov7~@{{VAyc!=TB|E#dg*Zurf%j^gh9^NK1ow_in65vjR-B_r9^*+nT)d?p z+gAuiQH4)gBobj{A&Aj>6{z`6h(S9)m8bCyE}oKD`@yzhu+s zxLda5M7}wC5Gy5>!U9+a%~HUNkL6j7yXelFzw3+LC`Cyu?lA;hH+uzPhsJC^5;;Yf zs#lY1f54pfn9r|G*ttE!v0-k=SIgyVsBPftm6n~Pm)g2J#kSb`|)!LVY4J!C!`jRm}?V3l{7=1p?2e0Q`r*zzor$b7DhG| zRBLF7Ld7i<31sVTqvPf7;mv2`?gjgOgz-P_2W7grln3hF{N%lhSRL~30}*zC9#mGjMes7UffuN%M;^M-kn~7D zKVy<9uVCO|Db@=oBCNS^`QxK2?#;-fxp%2mL?(P)ilN1{>!mV~eWKo(LmrNel%+9Q z^Jyai`aHjIqE&hqjDVEV43kj%u!oTlD;I1gaRw~Yb8v@#xq6dYp<)+xZN)l;iy zm-PkuN?NSf3lX`*p8YOefu0`wIW%#aA6Yb~dU4P3LLgvC{}+9FO-(CL2F*PNdH5e7 zk3cT1Pq(%YdHajJ0^h}mbr4QlsspDlk1Q)`Zg_D_GTPX~;Br)R_R^r5*^ynR&_PwT zSE9LnEEc!q_}J2h7myX~*RCz?`NZ`%nmJmI+3|2?nb~#l^{sW0e+@s4xgx(RRQRQ% zDjVQm!_V5oT86@iIj#`vCo1;3U1-@s!4&z&+FR`$FGHQ({qBpB z-cdbL?9A(2PkJu$AtJ~sr|Cp@;xj^v9&8uIhHrEP`DifZ5Tjp7KZTjt&Ttm&o}U8! zoTfWZI?QV#Uak=13Cd71_MnJ1Ea1ZA)WUj5&~neUz*UA7lHFuAfD?J9{o1u}){NQ5 zOK;(eRYMWSi*O=UdSfCzosQrcD4q<5A|_!kn8v2RF1Nyw1m4x!8Tz%Xn$iB-oa>Ub zJS_KazM7p~m&u{7I+X z>&7YTR;ss@ms2%NgMqADqb)pOp{$N6%>LYV?m<`u#@Zoa!nMBaLZ5GBC37=KLgbiv z!?mcjvws;;vF(x)q_yH1@1&OlPP;&r=D!v0Xy`mBvhCjo#ecZ;kM&>1#yaYMSMc|F z)*phutl22s{AIfJv*6z;{=W)#qWG}?pYZ=#&(E~)pPEikv+$ot;GczmW+49*F2(;< z_#b@a&l-Lv@cz_LfigMj@jugfKP&jTdHPd<8|iO<;Xkd^&!RtxEKrgBe{YTRMS^V$E - - Eclipse BIRT Designer Version 3.7.1.v20110905 Build <3.7.1.v20110905-1820> - Number Formats Test Report + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> in diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MultiSheetsReportTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MultiSheetsReportTest.java index f5150bb8e27..ff990a1a39c 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MultiSheetsReportTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/MultiSheetsReportTest.java @@ -165,7 +165,7 @@ public void testTwoNames() throws BirtException, IOException { assertNotNull(workbook); assertEquals( 2, workbook.getNumberOfSheets() ); - assertEquals( "Number Formats 2", workbook.getSheetAt(0).getSheetName()); + assertEquals( "Number Formats 1", workbook.getSheetAt(0).getSheetName()); assertEquals( "Number Formats 3", workbook.getSheetAt(1).getSheetName()); assertEquals(8, firstNullRow(workbook.getSheetAt(0))); diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormats.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormats.rptdesign index 169c2906a3b..144567bc45b 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormats.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormats.rptdesign @@ -1,6 +1,6 @@ - - Eclipse BIRT Designer Version 3.7.1.v20110905 Build <3.7.1.v20110905-1820> + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> Number Formats Test Report in + + 7.614583333333333in + Data Set + + + Name + Name + dataSetRow["Name"] + string + + + Integer + Integer + dataSetRow["Integer"] + integer + + + DateTime + DateTime + dataSetRow["DateTime"] + date-time + + + Decimal + Decimal + dataSetRow["Decimal"] + decimal + + + Float + Float + dataSetRow["Float"] + float + + + Boolean + Boolean + dataSetRow["Boolean"] + boolean + + + Date + Date + dataSetRow["Date"] + date + + + Time + Time + dataSetRow["Time"] + time + + + + 0.8645833333333334in + + + 1in + + + 0.9270833333333334in + + + 1.1979166666666667in + + + 0.9895833333333334in + + + 0.8125in + + + 1in + + + 0.8229166666666666in + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + Name + + + + + + Unformatted + + Float + + + + + + General Number + General Number + + Float + + + + + + Currency + Currency + + Float + + + + + + Fixed + Fixed + + Float + + + + + + Percent + Percent + + Float + + + + + + Scientific + Scientific + + Float + + + + + + Custom + 0.00E00 + + Float + + + + +
+ + #0000FF + solid + + + + + + + + + + + +
+
diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormatsTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormatsTest.java index e3c70aca2d6..f316c270fe4 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormatsTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/NumberFormatsTest.java @@ -31,7 +31,7 @@ public class NumberFormatsTest extends ReportRunner { @Test public void testRunReport() throws BirtException, IOException { - debug = false; + debug = true; InputStream inputStream = runAndRenderReport("NumberFormats.rptdesign", "xlsx"); assertNotNull(inputStream); try { @@ -43,7 +43,7 @@ public void testRunReport() throws BirtException, IOException { assertEquals( "Number Formats Test Report", workbook.getSheetAt(0).getSheetName()); Sheet sheet = workbook.getSheetAt(0); - assertEquals(22, this.firstNullRow(sheet)); + assertEquals(26, this.firstNullRow(sheet)); assertEquals( 3035, sheet.getColumnWidth( 0 ) ); assertEquals( 3913, sheet.getColumnWidth( 1 ) ); @@ -142,6 +142,32 @@ public void testRunReport() throws BirtException, IOException { assertEquals( sheet.getRow(18).getCell(6).getStringCellValue(), sheet.getRow(19).getCell(6).getCellStyle().getDataFormatString()); assertEquals( sheet.getRow(18).getCell(7).getStringCellValue(), sheet.getRow(19).getCell(7).getCellStyle().getDataFormatString()); + assertEquals( "\"\"#,##0.00", sheet.getRow(23).getCell(3).getCellStyle().getDataFormatString()); + assertEquals( "\"\"###0.00", sheet.getRow(23).getCell(4).getCellStyle().getDataFormatString()); + assertEquals( "\"\"###0.00%", sheet.getRow(23).getCell(5).getCellStyle().getDataFormatString()); + assertEquals( "\"\"0.00E+00", sheet.getRow(23).getCell(6).getCellStyle().getDataFormatString()); + + assertEquals( "\"\"#,##0.00", sheet.getRow(24).getCell(3).getCellStyle().getDataFormatString()); + assertEquals( "\"\"###0.00", sheet.getRow(24).getCell(4).getCellStyle().getDataFormatString()); + assertEquals( "\"\"###0.00%", sheet.getRow(24).getCell(5).getCellStyle().getDataFormatString()); + assertEquals( "\"\"0.00E+00", sheet.getRow(24).getCell(6).getCellStyle().getDataFormatString()); + + assertEquals( "3.1415926536", formatter.formatCellValue(sheet.getRow(23).getCell(1))); + assertEquals( "3.1415926536", formatter.formatCellValue(sheet.getRow(23).getCell(2))); + assertEquals( "3.14", formatter.formatCellValue(sheet.getRow(23).getCell(3))); + assertEquals( "3.14", formatter.formatCellValue(sheet.getRow(23).getCell(4))); + assertEquals( "314.16%", formatter.formatCellValue(sheet.getRow(23).getCell(5))); + assertEquals( "3.14E00", formatter.formatCellValue(sheet.getRow(23).getCell(6))); + assertEquals( "3.14E00", formatter.formatCellValue(sheet.getRow(23).getCell(7))); + + assertEquals( "6.2831853072", formatter.formatCellValue(sheet.getRow(24).getCell(1))); + assertEquals( "6.2831853072", formatter.formatCellValue(sheet.getRow(24).getCell(2))); + assertEquals( "6.28", formatter.formatCellValue(sheet.getRow(24).getCell(3))); + assertEquals( "6.28", formatter.formatCellValue(sheet.getRow(24).getCell(4))); + assertEquals( "628.32%", formatter.formatCellValue(sheet.getRow(24).getCell(5))); + assertEquals( "6.28E00", formatter.formatCellValue(sheet.getRow(24).getCell(6))); + assertEquals( "6.28E00", formatter.formatCellValue(sheet.getRow(24).getCell(7))); + } finally { inputStream.close(); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/OutputFileNotStreamTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/OutputFileNotStreamTest.java index cbf522c8c5a..47c333eff5a 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/OutputFileNotStreamTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/OutputFileNotStreamTest.java @@ -40,7 +40,7 @@ public void testRunReport() throws BirtException, IOException { assertEquals( "Number Formats Test Report", workbook.getSheetAt(0).getSheetName()); Sheet sheet = workbook.getSheetAt(0); - assertEquals(22, this.firstNullRow(sheet)); + assertEquals(26, this.firstNullRow(sheet)); } finally { inputStream.close(); } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayout.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayout.rptdesign index 62bde2024a1..440d94cd28c 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayout.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayout.rptdesign @@ -1,6 +1,6 @@ - - Eclipse BIRT Designer Version 3.7.1.v20110905 Build <3.7.1.v20110905-1820> + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> Page Layout Test cm /templates/blank_report.gif @@ -56,6 +56,7 @@ 1cm @@ -68,6 +69,7 @@ diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayoutTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayoutTest.java index 081920bce93..7c6968ca015 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayoutTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/PageLayoutTest.java @@ -50,8 +50,8 @@ public void testRunReportXlsx() throws BirtException, IOException { XSSFPrintSetup printSetup = sheet0.getPrintSetup(); assertEquals( PaperSize.A4_PAPER, printSetup.getPaperSizeEnum() ); assertEquals( PrintOrientation.LANDSCAPE, printSetup.getOrientation() ); - assertEquals( 1.0 / 2.54, printSetup.getHeaderMargin(), 0.01 ); - assertEquals( 1.0 / 2.54, printSetup.getFooterMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, printSetup.getHeaderMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, printSetup.getFooterMargin(), 0.01 ); assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.LeftMargin ), 0.01 ); assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.RightMargin ), 0.01 ); assertEquals( 1.7 / 2.54, sheet0.getMargin( Sheet.TopMargin ), 0.01 ); @@ -79,8 +79,8 @@ public void testRunReportXls() throws BirtException, IOException { HSSFPrintSetup printSetup = sheet0.getPrintSetup(); assertEquals( HSSFPrintSetup.A4_PAPERSIZE, printSetup.getPaperSize() ); assertEquals( true, printSetup.getLandscape() ); - assertEquals( 1.0 / 2.54, printSetup.getHeaderMargin(), 0.01 ); - assertEquals( 1.0 / 2.54, printSetup.getFooterMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, printSetup.getHeaderMargin(), 0.01 ); + assertEquals( 0.7 / 2.54, printSetup.getFooterMargin(), 0.01 ); assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.LeftMargin ), 0.01 ); assertEquals( 0.7 / 2.54, sheet0.getMargin( Sheet.RightMargin ), 0.01 ); assertEquals( 1.7 / 2.54, sheet0.getMargin( Sheet.TopMargin ), 0.01 ); @@ -90,7 +90,7 @@ public void testRunReportXls() throws BirtException, IOException { inputStream.close(); } } - + @Test public void testRunReportPixelsXlsx() throws BirtException, IOException { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/ReportRunner.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/ReportRunner.java index 07212557275..1b8f5e44d44 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/ReportRunner.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/ReportRunner.java @@ -27,6 +27,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import java.util.Map.Entry; @@ -51,8 +52,11 @@ import org.eclipse.birt.report.engine.api.RenderOption; import org.eclipse.birt.report.engine.api.impl.ReportEngine; import org.eclipse.birt.report.model.api.IResourceLocator; +import org.junit.Rule; +import org.junit.rules.TestName; import uk.co.spudsoft.birt.emitters.bugfix.FixedRenderTask; +import uk.co.spudsoft.birt.emitters.bugfix.FixedRunTask; import uk.co.spudsoft.birt.emitters.excel.ExcelEmitter; import uk.co.spudsoft.birt.emitters.excel.tests.framework.Activator; @@ -66,6 +70,10 @@ public class ReportRunner { protected boolean nestTableInLastCell; protected boolean autoFilter; protected boolean blankLineAfterTopLevelTable; + protected boolean extractMode; + protected boolean noStyles; + protected boolean forceRecalcuation; + protected Boolean displayFormulas = null; protected Boolean displayGridlines = null; @@ -79,11 +87,16 @@ public class ReportRunner { protected String templateFile = null; + protected Locale defaultLocale = Locale.UK; + protected Map parameters = new HashMap(); protected long startTime; protected long runTime; protected long renderTime; + @Rule + public TestName testName = new TestName(); + private static byte[] getBytesFromFile(File file) throws IOException { InputStream is = new FileInputStream(file); try { @@ -175,7 +188,9 @@ protected String baseFilename( String filename ) { protected InputStream runAndRenderReportDefaultTask( String filename, String outputFormat ) throws BirtException, IOException { - IReportEngine reportEngine = createReportEngine(); + Locale.setDefault(defaultLocale); + + IReportEngine reportEngine = createReportEngine(); String filepath = deriveFilepath(filename); @@ -236,7 +251,9 @@ protected InputStream runAndRenderReportDefaultTask( String filename, String out protected InputStream runAndRenderReportFileNotStream( String filename, String outputFormat ) throws BirtException, IOException { - IReportEngine reportEngine = createReportEngine(); + Locale.setDefault(defaultLocale); + + IReportEngine reportEngine = createReportEngine(); String filepath = deriveFilepath(filename); @@ -295,6 +312,8 @@ protected InputStream runAndRenderReportFileNotStream( String filename, String o protected InputStream runAndRenderReportAsOne( String filename, String outputFormat ) throws BirtException, IOException { + Locale.setDefault(defaultLocale); + IReportEngine reportEngine = createReportEngine(); String filepath = deriveFilepath(filename); @@ -345,7 +364,9 @@ protected InputStream runAndRenderReportAsOne( String filename, String outputFor protected InputStream runAndRenderReportCustomTask( String filename, String outputFormat ) throws BirtException, IOException { - IReportEngine reportEngine = createReportEngine(); + Locale.setDefault(defaultLocale); + + IReportEngine reportEngine = createReportEngine(); String filepath = deriveFilepath(filename); @@ -363,7 +384,8 @@ protected InputStream runAndRenderReportCustomTask( String filename, String outp assertNotNull(tempDoc); try { - IRunTask reportRunTask = reportEngine.createRunTask( reportRunnable ); + IRunTask reportRunTask = new FixedRunTask((ReportEngine)reportEngine, reportRunnable); + // reportEngine.createRunTask( reportRunnable ); // reportRunTask.enableProgressiveViewing(true); @@ -377,14 +399,13 @@ protected InputStream runAndRenderReportCustomTask( String filename, String outp IReportDocument reportDocument = runReport(reportEngine, reportRunTask, tempDoc); runTime = System.currentTimeMillis(); - System.err.println( "Run " + baseFilename( filename ) + " : " + ((runTime - startTime) / 1000.0) + "s"); + System.err.println( "Initial run " + baseFilename( filename ) + " : " + ((runTime - startTime) / 1000.0) + "s"); // IRenderTask renderTask = reportEngine.createRenderTask( reportDocument ); IRenderTask renderTask = new FixedRenderTask( (ReportEngine)reportEngine, reportRunnable, reportDocument ); assertNotNull(renderTask); try { File tempOutput = createTempFile(baseFilename( filename ), "." + outputFormat); - System.err.println( tempOutput ); FileOutputStream outputStream = new FileOutputStream( tempOutput ); assertNotNull(outputStream); @@ -397,8 +418,9 @@ protected InputStream runAndRenderReportCustomTask( String filename, String outp assertEquals(0, renderTask.getErrors().size()); } finally { renderTime = System.currentTimeMillis(); - System.err.println( "Run " + baseFilename( filename ) + " : " + ((runTime - startTime) / 1000.0) + "s"); - System.err.println( "Render " + baseFilename( filename ) + " : " + ((renderTime - runTime) / 1000.0) + "s"); + System.err.println( "File " + testName.getMethodName() + ": " + baseFilename( filename ) + " : " + tempOutput ); + System.err.println( "Run " + testName.getMethodName() + ": " + baseFilename( filename ) + " : " + ((runTime - startTime) / 1000.0) + "s"); + System.err.println( "Render " + testName.getMethodName() + ": " + baseFilename( filename ) + " : " + ((renderTime - runTime) / 1000.0) + "s"); outputStream.close(); } @@ -504,6 +526,11 @@ protected RenderOption prepareRenderOptions(String outputFormat, FileOutputStrea if( outputStream != null ) { renderOptions.setOutputStream( outputStream ); } + if( "xls".equals(outputFormat)) { + renderOptions.setEmitterID("uk.co.spudsoft.birt.emitters.excel.XlsEmitter"); + } else if ( "xlsx".equals(outputFormat)) { + renderOptions.setEmitterID("uk.co.spudsoft.birt.emitters.excel.XlsxEmitter"); + } if( debug ) { renderOptions.setOption( "ExcelEmitter.DEBUG", Boolean.TRUE); debug = false; @@ -556,6 +583,15 @@ protected RenderOption prepareRenderOptions(String outputFormat, FileOutputStrea if( templateFile != null ) { renderOptions.setOption( ExcelEmitter.TEMPLATE_FILE, templateFile ); } + if( extractMode ) { + renderOptions.setOption( ExcelEmitter.EXTRACT_MODE, true ); + } + if( noStyles ) { + renderOptions.setOption( ExcelEmitter.NO_STYLES, true ); + } + if( forceRecalcuation ) { + renderOptions.setOption( ExcelEmitter.FORCE_RECALCULATION, true ); + } return renderOptions; } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySide.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySide.java index 372b6319c74..25ef3e12ce0 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySide.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySide.java @@ -38,7 +38,7 @@ public void singleCells() throws Exception { Sheet sheet = workbook.getSheetAt(0); assertEquals(1, this.firstNullRow(sheet)); - assertEquals( 305, sheet.getRow( 0 ).getHeightInPoints(), 1.0 ); + assertEquals( 297, sheet.getRow( 0 ).getHeightInPoints(), 1.0 ); assertEquals( 19346, sheet.getColumnWidth( 0 ) ); assertEquals( 19346, sheet.getColumnWidth( 1 ) ); } finally { diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySideMultiColumns.rptdesign b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySideMultiColumns.rptdesign index 0c54d59e63f..bf8500b9388 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySideMultiColumns.rptdesign +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SideBySideMultiColumns.rptdesign @@ -1,6 +1,6 @@ - - Eclipse BIRT Designer Version 3.7.1.v20110905 Build <3.7.1.v20110905-1820> + + Eclipse BIRT Designer Version 4.2.2.v201301221637 Build <4.2.2.v20130206-1509> in /templates/blank_report.gif ltr @@ -370,289 +370,289 @@ group by * from CLASSICMODELS.CUSTOMERS]]>
- - - 2.0 - - - - - - - CUSTOMERNUMBER - 1 - - 4 - 10 - 0 - Nullable - - CUSTOMERNUMBER - - - - CUSTOMERNUMBER - - 11 - - - - - - - CUSTOMERNAME - 2 - - 12 - 50 - 0 - Nullable - - CUSTOMERNAME - - - - CUSTOMERNAME - - 50 - - - - - - - CONTACTLASTNAME - 3 - - 12 - 50 - 0 - Nullable - - CONTACTLASTNAME - - - - CONTACTLASTNAME - - 50 - - - - - - - CONTACTFIRSTNAME - 4 - - 12 - 50 - 0 - Nullable - - CONTACTFIRSTNAME - - - - CONTACTFIRSTNAME - - 50 - - - - - - - PHONE - 5 - - 12 - 50 - 0 - Nullable - - PHONE - - - - PHONE - - 50 - - - - - - - ADDRESSLINE1 - 6 - - 12 - 50 - 0 - Nullable - - ADDRESSLINE1 - - - - ADDRESSLINE1 - - 50 - - - - - - - ADDRESSLINE2 - 7 - - 12 - 50 - 0 - Nullable - - ADDRESSLINE2 - - - - ADDRESSLINE2 - - 50 - - - - - - - CITY - 8 - - 12 - 50 - 0 - Nullable - - CITY - - - - CITY - - 50 - - - - - - - STATE - 9 - - 12 - 50 - 0 - Nullable - - STATE - - - - STATE - - 50 - - - - - - - POSTALCODE - 10 - - 12 - 15 - 0 - Nullable - - POSTALCODE - - - - POSTALCODE - - 15 - - - - - - - COUNTRY - 11 - - 12 - 50 - 0 - Nullable - - COUNTRY - - - - COUNTRY - - 50 - - - - - - - SALESREPEMPLOYEENUMBER - 12 - - 4 - 10 - 0 - Nullable - - SALESREPEMPLOYEENUMBER - - - - SALESREPEMPLOYEENUMBER - - 11 - - - - - - - CREDITLIMIT - 13 - - 8 - 15 - 0 - Nullable - - CREDITLIMIT - - - - CREDITLIMIT - - 22 - - - - - - - + + + 2.0 + + + + + + + CUSTOMERNUMBER + 1 + + 4 + 10 + 0 + Nullable + + CUSTOMERNUMBER + + + + CUSTOMERNUMBER + + 11 + + + + + + + CUSTOMERNAME + 2 + + 12 + 50 + 0 + Nullable + + CUSTOMERNAME + + + + CUSTOMERNAME + + 50 + + + + + + + CONTACTLASTNAME + 3 + + 12 + 50 + 0 + Nullable + + CONTACTLASTNAME + + + + CONTACTLASTNAME + + 50 + + + + + + + CONTACTFIRSTNAME + 4 + + 12 + 50 + 0 + Nullable + + CONTACTFIRSTNAME + + + + CONTACTFIRSTNAME + + 50 + + + + + + + PHONE + 5 + + 12 + 50 + 0 + Nullable + + PHONE + + + + PHONE + + 50 + + + + + + + ADDRESSLINE1 + 6 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE1 + + + + ADDRESSLINE1 + + 50 + + + + + + + ADDRESSLINE2 + 7 + + 12 + 50 + 0 + Nullable + + ADDRESSLINE2 + + + + ADDRESSLINE2 + + 50 + + + + + + + CITY + 8 + + 12 + 50 + 0 + Nullable + + CITY + + + + CITY + + 50 + + + + + + + STATE + 9 + + 12 + 50 + 0 + Nullable + + STATE + + + + STATE + + 50 + + + + + + + POSTALCODE + 10 + + 12 + 15 + 0 + Nullable + + POSTALCODE + + + + POSTALCODE + + 15 + + + + + + + COUNTRY + 11 + + 12 + 50 + 0 + Nullable + + COUNTRY + + + + COUNTRY + + 50 + + + + + + + SALESREPEMPLOYEENUMBER + 12 + + 4 + 10 + 0 + Nullable + + SALESREPEMPLOYEENUMBER + + + + SALESREPEMPLOYEENUMBER + + 11 + + + + + + + CREDITLIMIT + 13 + + 8 + 15 + 0 + Nullable + + CREDITLIMIT + + + + CREDITLIMIT + + 22 + + + + + + + ]]> @@ -2442,6 +2442,13 @@ CLASSICMODELS.CUSTOMERS]]> + + + ExcelEmitter.AutoFilter + boolean + + + trueData Set 3 diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SingleSheetsReportTest.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SingleSheetsReportTest.java index e42d82c2557..032478de057 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SingleSheetsReportTest.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/SingleSheetsReportTest.java @@ -121,7 +121,7 @@ public void testNoNames() throws BirtException, IOException { assertNotNull(workbook); assertEquals( 1, workbook.getNumberOfSheets() ); - assertEquals( "Number Formats Test Report", workbook.getSheetAt(0).getSheetName()); + assertEquals( "Sheet0", workbook.getSheetAt(0).getSheetName()); assertEquals(11, firstNullRow(workbook.getSheetAt(0))); } finally { From 959c5a2b67d4a2513a63b63aeefa39e72262e9f4 Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Mon, 28 Oct 2019 10:39:37 +0100 Subject: [PATCH 07/16] Fixed errors in the ok.co.spudsoft excel emitter tests --- .../META-INF/MANIFEST.MF | 1 + .../tests/Issue107ForceRecalculation.java | 24 +-- .../emitters/excel/tests/ReportRunner.java | 168 +++++++++--------- 3 files changed, 97 insertions(+), 96 deletions(-) diff --git a/engine/org.eclipse.birt.report.engine/META-INF/MANIFEST.MF b/engine/org.eclipse.birt.report.engine/META-INF/MANIFEST.MF index ea6531ad298..9794e66d4cb 100644 --- a/engine/org.eclipse.birt.report.engine/META-INF/MANIFEST.MF +++ b/engine/org.eclipse.birt.report.engine/META-INF/MANIFEST.MF @@ -50,6 +50,7 @@ Export-Package: org.eclipse.birt.report.engine.adapter, org.eclipse.birt.report.engine.internal.index.v0, org.eclipse.birt.report.engine.internal.index.v1, org.eclipse.birt.report.engine.internal.index.v2, + org.eclipse.birt.report.engine.internal.presentation, org.eclipse.birt.report.engine.internal.util, org.eclipse.birt.report.engine.ir, org.eclipse.birt.report.engine.layout, diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.java index e933848e83e..3f5f411ceab 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/Issue107ForceRecalculation.java @@ -1,12 +1,12 @@ /************************************************************************************* * Copyright (c) 2011, 2012, 2013 James Talbut. * jim-emitters@spudsoft.co.uk - * - * All rights reserved. This program and the accompanying materials + * + * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html - * + * * Contributors: * James Talbut - Initial implementation. ************************************************************************************/ @@ -24,44 +24,44 @@ import org.junit.Test; public class Issue107ForceRecalculation extends ReportRunner { - + @Test public void testWithoutOption() throws BirtException, IOException { debug = false; - forceRecalcuation = false; + forceRecalculation = false; InputStream inputStream = runAndRenderReport("Issue107ForceRecalculation.rptdesign", "xls"); assertNotNull(inputStream); try { HSSFWorkbook workbook = new HSSFWorkbook(inputStream); assertNotNull(workbook); - + assertEquals( 2, workbook.getNumberOfSheets() ); - + // assertTrue( ! workbook.getForceFormulaRecalculation() ); } finally { inputStream.close(); } } - + @Test public void testWithOption() throws BirtException, IOException { debug = false; - forceRecalcuation = true; + forceRecalculation = true; InputStream inputStream = runAndRenderReport("Issue107ForceRecalculation.rptdesign", "xls"); assertNotNull(inputStream); try { HSSFWorkbook workbook = new HSSFWorkbook(inputStream); assertNotNull(workbook); - + assertEquals( 2, workbook.getNumberOfSheets() ); - + // assertTrue( workbook.getForceFormulaRecalculation() ); } finally { inputStream.close(); } } - + } diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/ReportRunner.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/ReportRunner.java index 1b8f5e44d44..357d9fa5c1b 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/ReportRunner.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/excel/tests/ReportRunner.java @@ -1,12 +1,12 @@ /************************************************************************************* * Copyright (c) 2011, 2012, 2013 James Talbut. * jim-emitters@spudsoft.co.uk - * - * All rights reserved. This program and the accompanying materials + * + * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html - * + * * Contributors: * James Talbut - Initial implementation. ************************************************************************************/ @@ -61,7 +61,7 @@ import uk.co.spudsoft.birt.emitters.excel.tests.framework.Activator; public class ReportRunner { - + protected boolean debug; protected boolean removeEmptyRows = true; protected boolean htmlPagination; @@ -72,9 +72,9 @@ public class ReportRunner { protected boolean blankLineAfterTopLevelTable; protected boolean extractMode; protected boolean noStyles; - protected boolean forceRecalcuation; + protected boolean forceRecalculation; + - protected Boolean displayFormulas = null; protected Boolean displayGridlines = null; protected Boolean displayRowColHeadings = null; @@ -82,21 +82,21 @@ public class ReportRunner { protected Boolean disableGrouping = null; protected Boolean structuredHeader = null; protected Boolean groupSummaryHeader = null; - + protected Integer spannedRowHeight = null; - + protected String templateFile = null; - + protected Locale defaultLocale = Locale.UK; - + protected Map parameters = new HashMap(); protected long startTime; protected long runTime; protected long renderTime; - - @Rule - public TestName testName = new TestName(); - + + @Rule + public TestName testName = new TestName(); + private static byte[] getBytesFromFile(File file) throws IOException { InputStream is = new FileInputStream(file); try { @@ -111,7 +111,7 @@ private static byte[] getBytesFromFile(File file) throws IOException { is.close(); } } - + public boolean mergedRegion( Sheet sheet, int top, int left, int bottom, int right ) { for( int i = 0; i < sheet.getNumMergedRegions(); ++i ) { CellRangeAddress curRegion = sheet.getMergedRegion(i); @@ -124,7 +124,7 @@ public boolean mergedRegion( Sheet sheet, int top, int left, int bottom, int rig } return false; } - + protected int firstNullRow(Sheet sheet) { int i = 0; while( sheet.getRow(i) != null ) { @@ -132,7 +132,7 @@ protected int firstNullRow(Sheet sheet) { } return i; } - + protected int lastRow(Sheet sheet) { int max = 0; for(Row row : sheet) { @@ -140,7 +140,7 @@ protected int lastRow(Sheet sheet) { } return max; } - + protected int greatestNumColumns(Sheet sheet) { int result = 0; for(Row row : sheet) { @@ -150,7 +150,7 @@ protected int greatestNumColumns(Sheet sheet) { } return result; } - + private void addParameters( IEngineTask reportRunTask ) { for( Entry entry : parameters.entrySet() ) { reportRunTask.setParameterValue(entry.getKey(), entry.getValue()); @@ -164,7 +164,7 @@ protected InputStream runAndRenderReport( String filename, String outputFormat ) protected File createTempFile( String base, String extension ) throws IOException { String tempDir = System.getProperty( "java.io.tmpdir" ); - + for( int i = 0; i < Integer.MAX_VALUE; ++i ) { File result = new File( tempDir + File.separator + base + Integer.toString(i) + extension ); if( ! result.exists() ) { @@ -173,7 +173,7 @@ protected File createTempFile( String base, String extension ) throws IOExceptio } throw new IOException( "Temporary file not available" ); } - + protected String baseFilename( String filename ) { int index = filename.lastIndexOf( File.separatorChar ); if( index > 0 ) { @@ -185,51 +185,51 @@ protected String baseFilename( String filename ) { } return filename; } - + protected InputStream runAndRenderReportDefaultTask( String filename, String outputFormat ) throws BirtException, IOException { Locale.setDefault(defaultLocale); IReportEngine reportEngine = createReportEngine(); - + String filepath = deriveFilepath(filename); InputStream resourceStream = openFileStream( filename ); - + assertNotNull( resourceStream ); try { IReportRunnable reportRunnable = reportEngine.openReportDesign( resourceStream ); assertNotNull(reportRunnable); - + File tempDoc = createTempFile( baseFilename( filename ), ".rptdocument"); assertNotNull(tempDoc); - + try { IRunTask reportRunTask = reportEngine.createRunTask( reportRunnable ); assertNotNull(reportRunTask); try { addParameters( reportRunTask ); addFilepathToAppContext(filepath, reportRunTask); - + startTime = System.currentTimeMillis(); IReportDocument reportDocument = runReport(reportEngine, reportRunTask, tempDoc); runTime = System.currentTimeMillis(); - + IRenderTask renderTask = reportEngine.createRenderTask( reportDocument ); assertNotNull(renderTask); try { File tempOutput = createTempFile(baseFilename( filename ), "." + outputFormat); System.err.println( tempOutput ); - FileOutputStream outputStream = new FileOutputStream( tempOutput ); - + FileOutputStream outputStream = new FileOutputStream( tempOutput ); + assertNotNull(outputStream); try { renderTask.setRenderOption(prepareRenderOptions( outputFormat, outputStream )); - + renderTask.render(); renderTime = System.currentTimeMillis(); - assertEquals(0, renderTask.getErrors().size()); + assertEquals(0, renderTask.getErrors().size()); } finally { outputStream.close(); } @@ -254,47 +254,47 @@ protected InputStream runAndRenderReportFileNotStream( String filename, String o Locale.setDefault(defaultLocale); IReportEngine reportEngine = createReportEngine(); - + String filepath = deriveFilepath(filename); InputStream resourceStream = openFileStream( filename ); - + assertNotNull( resourceStream ); try { IReportRunnable reportRunnable = reportEngine.openReportDesign( resourceStream ); assertNotNull(reportRunnable); - + File tempDoc = createTempFile(baseFilename( filename ), ".rptdocument"); assertNotNull(tempDoc); - + try { IRunTask reportRunTask = reportEngine.createRunTask( reportRunnable ); assertNotNull(reportRunTask); try { addParameters( reportRunTask ); addFilepathToAppContext(filepath, reportRunTask); - + IReportDocument reportDocument = runReport(reportEngine, reportRunTask, tempDoc); - + IRenderTask renderTask = reportEngine.createRenderTask( reportDocument ); assertNotNull(renderTask); try { File outputFile = createTempFile(baseFilename( filename ), "." + outputFormat); System.err.println( outputFile ); - + assertNotNull( outputFile ); renderTask.setRenderOption(prepareRenderOptions( outputFormat, null )); renderTask.getRenderOption().setOutputFileName( outputFile.getCanonicalPath() ); - + renderTask.render(); - assertEquals(0, renderTask.getErrors().size()); + assertEquals(0, renderTask.getErrors().size()); InputStream result = new ByteArrayInputStream(getBytesFromFile(outputFile)); - + boolean deleted = outputFile.delete(); assertTrue( deleted ); - + return result; } finally { renderTask.close(); @@ -313,39 +313,39 @@ protected InputStream runAndRenderReportFileNotStream( String filename, String o protected InputStream runAndRenderReportAsOne( String filename, String outputFormat ) throws BirtException, IOException { Locale.setDefault(defaultLocale); - + IReportEngine reportEngine = createReportEngine(); - + String filepath = deriveFilepath(filename); InputStream resourceStream = openFileStream( filename ); - + assertNotNull( resourceStream ); try { IReportRunnable reportRunnable = reportEngine.openReportDesign( resourceStream ); assertNotNull(reportRunnable); - + File tempDoc = createTempFile(baseFilename( filename ), ".rptdocument"); assertNotNull(tempDoc); - + try { IRunAndRenderTask reportRunRenderTask = reportEngine.createRunAndRenderTask( reportRunnable ); assertNotNull(reportRunRenderTask); try { addParameters( reportRunRenderTask ); addFilepathToAppContext(filepath, reportRunRenderTask); - + File tempOutput = createTempFile(baseFilename( filename ), "." + outputFormat); System.err.println( tempOutput ); - FileOutputStream outputStream = new FileOutputStream( tempOutput ); - + FileOutputStream outputStream = new FileOutputStream( tempOutput ); + assertNotNull(outputStream); try { - + reportRunRenderTask.setRenderOption(prepareRenderOptions( outputFormat, outputStream )); - + reportRunRenderTask.run(); - assertEquals(0, reportRunRenderTask.getErrors().size()); + assertEquals(0, reportRunRenderTask.getErrors().size()); } finally { outputStream.close(); } @@ -367,55 +367,55 @@ protected InputStream runAndRenderReportCustomTask( String filename, String outp Locale.setDefault(defaultLocale); IReportEngine reportEngine = createReportEngine(); - + String filepath = deriveFilepath(filename); InputStream resourceStream = openFileStream( filename ); - + assertNotNull( resourceStream ); try { - File designFile = new File( filepath ); - IResourceLocator resourceLocator = new ResourceLocator(designFile.getParentFile()); - + File designFile = new File( filepath ); + IResourceLocator resourceLocator = new ResourceLocator(designFile.getParentFile()); + IReportRunnable reportRunnable = reportEngine.openReportDesign( filename, resourceStream, resourceLocator ); assertNotNull(reportRunnable); - + File tempDoc = createTempFile(baseFilename( filename ), ".rptdocument"); assertNotNull(tempDoc); - + try { - IRunTask reportRunTask = new FixedRunTask((ReportEngine)reportEngine, reportRunnable); + IRunTask reportRunTask = new FixedRunTask((ReportEngine)reportEngine, reportRunnable); // reportEngine.createRunTask( reportRunnable ); // reportRunTask.enableProgressiveViewing(true); - + assertNotNull(reportRunTask); try { addParameters( reportRunTask ); addFilepathToAppContext(filepath, reportRunTask); addToAppContext(reportRunTask, "org.eclipse.birt.data.query.ResultBufferSize", 256 ); - + startTime = System.currentTimeMillis(); IReportDocument reportDocument = runReport(reportEngine, reportRunTask, tempDoc); runTime = System.currentTimeMillis(); System.err.println( "Initial run " + baseFilename( filename ) + " : " + ((runTime - startTime) / 1000.0) + "s"); - + // IRenderTask renderTask = reportEngine.createRenderTask( reportDocument ); IRenderTask renderTask = new FixedRenderTask( (ReportEngine)reportEngine, reportRunnable, reportDocument ); assertNotNull(renderTask); try { File tempOutput = createTempFile(baseFilename( filename ), "." + outputFormat); - FileOutputStream outputStream = new FileOutputStream( tempOutput ); - + FileOutputStream outputStream = new FileOutputStream( tempOutput ); + assertNotNull(outputStream); try { - + renderTask.setRenderOption(prepareRenderOptions( outputFormat, outputStream )); - + System.err.println( "Starting Render"); renderTask.render(); - assertEquals(0, renderTask.getErrors().size()); + assertEquals(0, renderTask.getErrors().size()); } finally { renderTime = System.currentTimeMillis(); System.err.println( "File " + testName.getMethodName() + ": " + baseFilename( filename ) + " : " + tempOutput ); @@ -423,7 +423,7 @@ protected InputStream runAndRenderReportCustomTask( String filename, String outp System.err.println( "Render " + testName.getMethodName() + ": " + baseFilename( filename ) + " : " + ((renderTime - runTime) / 1000.0) + "s"); outputStream.close(); } - + return new ByteArrayInputStream(getBytesFromFile(tempOutput)); } finally { renderTask.close(); @@ -444,7 +444,7 @@ protected IReportEngine createReportEngine() { IReportEngineFactory engineFactory = (IReportEngineFactory)Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY ); assertNotNull(engineFactory); - + IReportEngine reportEngine = engineFactory.createReportEngine( config ); assertNotNull(reportEngine); return reportEngine; @@ -452,12 +452,12 @@ protected IReportEngine createReportEngine() { protected String deriveFilepath(String filename) throws MalformedURLException { String filepath = null; - + File file = new File(filename); if( ( file.isAbsolute() ) && ( file.exists() ) ) { return filename; } else if( Activator.getContext() != null ) { - URL bundleLocation = new URL(Activator.getContext().getBundle().getLocation()); + URL bundleLocation = new URL(Activator.getContext().getBundle().getLocation()); // System.err.println( "Activator.getContext().getBundle().getLocation() = " + bundleLocation ); String bundleLocationFile = bundleLocation.getFile(); if(bundleLocationFile.startsWith("file:/")) { @@ -468,14 +468,14 @@ protected String deriveFilepath(String filename) throws MalformedURLException { URL resourceLocation = this.getClass().getResource( filename ); String resourceLocationFile = resourceLocation.getFile(); // System.err.println( "resourceLocationFile = " + resourceLocationFile ); - - + + filepath = bundleLocationFile + "bin" + resourceLocationFile; // System.err.println( "filepath = " + filepath ); } return filepath; } - + protected InputStream openFileStream( String filename ) throws FileNotFoundException { File file = new File( filename ); if( file.exists() ) { @@ -490,7 +490,7 @@ protected void addFilepathToAppContext(String filepath, IEngineTask task) { addToAppContext(task, "__report", filepath); } } - + private void addToAppContext( IEngineTask task, String key, Object value ) { @SuppressWarnings("unchecked") Map appContext = (Map)task.getAppContext(); @@ -498,7 +498,7 @@ private void addToAppContext( IEngineTask task, String key, Object value ) { appContext = new HashMap(); task.setAppContext(appContext); } - appContext.put(key, value); + appContext.put(key, value); } protected IReportDocument runReport(IReportEngine reportEngine, @@ -512,9 +512,9 @@ protected IReportDocument runReport(IReportEngine reportEngine, System.err.println( "Error: " + errorObject ); } assertEquals( 0, reportRunTask.getErrors().size() ); - + reportRunTask.close(); - + IReportDocument reportDocument = reportEngine.openReportDocument( tempDoc.getCanonicalPath() ); assertNotNull(reportDocument); return reportDocument; @@ -578,7 +578,7 @@ protected RenderOption prepareRenderOptions(String outputFormat, FileOutputStrea renderOptions.setOption( ExcelEmitter.BLANK_ROW_AFTER_TOP_LEVEL_TABLE, true ); } if( spannedRowHeight != null ) { - renderOptions.setOption( ExcelEmitter.SPANNED_ROW_HEIGHT, spannedRowHeight ); + renderOptions.setOption( ExcelEmitter.SPANNED_ROW_HEIGHT, spannedRowHeight ); } if( templateFile != null ) { renderOptions.setOption( ExcelEmitter.TEMPLATE_FILE, templateFile ); @@ -589,10 +589,10 @@ protected RenderOption prepareRenderOptions(String outputFormat, FileOutputStrea if( noStyles ) { renderOptions.setOption( ExcelEmitter.NO_STYLES, true ); } - if( forceRecalcuation ) { + if( forceRecalculation ) { renderOptions.setOption( ExcelEmitter.FORCE_RECALCULATION, true ); } - + return renderOptions; } From 6ce34e072b11287653c6f74c59881c702b7099ec Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Mon, 28 Oct 2019 15:19:25 +0100 Subject: [PATCH 08/16] Corrected GIT repository URL in Eclipse Setup file --- EclipseBIRT.setup | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EclipseBIRT.setup b/EclipseBIRT.setup index 4e563a45cd4..6c65c3ec92c 100644 --- a/EclipseBIRT.setup +++ b/EclipseBIRT.setup @@ -104,7 +104,7 @@ + remoteURI="hvbtup/birt"> Set an Oomph redirection system property to redirect the logical location of this setup to its physical location in the Git clone. From f13cef246cb84007d145f736c5cd00f85b256805 Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Mon, 28 Oct 2019 16:23:35 +0100 Subject: [PATCH 09/16] Obviously the signature of a constructor for LayoutEngine has changed. --- .../birt/emitters/bugfix/FixedRenderTask.java | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRenderTask.java b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRenderTask.java index 1ec8b85e4ec..f2d342e52b0 100644 --- a/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRenderTask.java +++ b/engine/uk.co.spudsoft.birt.emitters.excel.tests/src/uk/co/spudsoft/birt/emitters/bugfix/FixedRenderTask.java @@ -1,12 +1,12 @@ /************************************************************************************* * Copyright (c) 2011, 2012, 2013 James Talbut. * jim-emitters@spudsoft.co.uk - * - * All rights reserved. This program and the accompanying materials + * + * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html - * + * * Contributors: * James Talbut - Initial implementation. ************************************************************************************/ @@ -84,7 +84,7 @@ public class FixedRenderTask extends EngineTask implements IRenderTask protected ITOCReader tocReader; protected boolean designLoaded = false; protected boolean variablesLoaded = false; - + //the flag of render page by page protected boolean PDFRenderPageByPage = true; @@ -115,7 +115,7 @@ public FixedRenderTask( ReportEngine engine, IReportRunnable runnable, this.reportRunnable = runnable; initRenderTask(); } - + protected void initRenderTask() { executionContext.setFactoryMode( false ); @@ -146,7 +146,7 @@ protected void initRenderTask() } } - + /** * Loads parameters and global variables from report document. Since the * application context is not available and application class loader can't @@ -198,7 +198,7 @@ protected void loadReportVariable( ) throws IOException /* * (non-Javadoc) - * + * * @see org.eclipse.birt.report.engine.api.IRenderTask#render(long) */ public void render( long pageNumber ) throws EngineException @@ -239,7 +239,7 @@ public void render( InstanceID iid ) throws EngineException /* * (non-Javadoc) - * + * * @see org.eclipse.birt.report.engine.api.IRenderTask#render() */ public void render( ) throws EngineException @@ -280,7 +280,7 @@ public void render( ) throws EngineException } updateRtLFlag( ); - + ReportDesignHandle design = executionContext.getReportDesign( ); if ( DesignChoiceConstants.REPORT_LAYOUT_PREFERENCE_FIXED_LAYOUT .equals( design.getLayoutPreference( ) ) ) @@ -345,7 +345,7 @@ public long getPageCount( ) throws EngineException /* * (non-Javadoc) - * + * * @see org.eclipse.birt.report.engine.api.IRenderTask#render() */ public void setPageNumber( long pageNumber ) throws EngineException @@ -450,7 +450,7 @@ protected boolean needPagedExecutor(List pageSequences ) { return true; } - + // the output pages is sequential or there is no page sequence, // in this case, we can output the report content as a whole and // the HTML layout engine may re-paginate the content into @@ -579,7 +579,7 @@ public void render( ) throws Exception pagination, renderOptions ); layoutEngine.setLocale( executionContext.getLocale( ) ); - + ReportDesignHandle design = executionContext.getReportDesign( ); if ( DesignChoiceConstants.REPORT_LAYOUT_PREFERENCE_FIXED_LAYOUT .equals( design.getLayoutPreference( ) ) ) @@ -589,12 +589,11 @@ public void render( ) throws Exception if ( ExtensionManager.PAPER_SIZE_PAGINATION.equals( pagination ) ) { LayoutEngine pdfEmitter = new LayoutEngine( - executor, ( (HTMLReportLayoutEngine) layoutEngine ).getContext( ), emitter, renderOptions, executionContext, getDocumentTotalPage( ) ); - + emitter = pdfEmitter; initializeContentEmitter( emitter ); } @@ -741,7 +740,6 @@ public void render( ) throws Exception if ( ExtensionManager.PAPER_SIZE_PAGINATION.equals( pagination ) ) { emitter = new LayoutEngine( - executor, ( (HTMLReportLayoutEngine) layoutEngine ).getContext( ), emitter, renderOptions, executionContext, getDocumentTotalPage( ) ); @@ -877,7 +875,7 @@ public ITreeNode getRawTOCTree( ) } return tocTree; } - + public long getTotalPage( ) throws EngineException { LogicalPageSequence visiblePages = loadVisiblePages( ); @@ -887,7 +885,7 @@ public long getTotalPage( ) throws EngineException } return reportDocument.getPageCount( ); } - + @SuppressWarnings("rawtypes") public HashMap getParameterValues( ) { @@ -1013,7 +1011,7 @@ private void unloadVisiblePages( ) visiblePageLoaded = false; logicalPageSequence = null; } - + protected IReportExecutor createRenderExtensionExecutor( IReportExecutor executor ) throws EngineException { @@ -1039,5 +1037,5 @@ protected IReportExecutor createRenderExtensionExecutor( } return executor; } - + } \ No newline at end of file From df505a449ace86447d17d6bf996779be2d6abb46 Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Thu, 7 May 2020 10:03:19 +0200 Subject: [PATCH 10/16] Fix BIRT bug 562873 PDF Rendering error with dynamic text item after page break --- .../engine/nLayout/area/impl/AreaFactory.java | 2 +- .../nLayout/area/impl/ForeignHTMLRegionLayout.java | 13 +------------ .../nLayout/area/impl/ForeignHtmlRegionArea.java | 2 +- 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/AreaFactory.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/AreaFactory.java index c5e5e46e008..78ed931d0d1 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/AreaFactory.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/AreaFactory.java @@ -193,7 +193,7 @@ protected AbstractArea createNewArea( ContainerArea parent, { area = new BlockContainerArea( parent, context, content ); } - if ( context.isFixedLayout( ) && context.getEngineTaskType( ) == IEngineTask.TASK_RUN ) + if ( context.isFixedLayout( ) ) { area.setPageBreakInside( IStyle.AVOID_VALUE ); } diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHTMLRegionLayout.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHTMLRegionLayout.java index 3efacae76f6..4994cce931b 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHTMLRegionLayout.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHTMLRegionLayout.java @@ -77,13 +77,12 @@ public void layout( ) throws BirtException class ForeignHTMLRegionLayoutEngine extends LayoutEngine { - protected ContainerArea root; + public ForeignHTMLRegionLayoutEngine( ContainerArea container, LayoutContext context ) { super( context ); current = container; - root = container; if ( parent != null ) { current.setMaxAvaWidth( parent.getMaxAvaWidth( ) ); @@ -93,20 +92,10 @@ public ForeignHTMLRegionLayoutEngine( ContainerArea container, public void layout( IContent content ) throws BirtException { current.initialize( ); - //if width is specified. set MAX width - if (current.specifiedWidth > 0) - { - current.setMaxAvaWidth(current.specifiedWidth); - } if ( current.getSpecifiedHeight( ) <= 0 ) { visitChildren( content, this ); } - while (current != root) - { - current.close(); - current = current.getParent(); - } current.close( ); } } diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHtmlRegionArea.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHtmlRegionArea.java index 716c244495b..ccee5459003 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHtmlRegionArea.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/ForeignHtmlRegionArea.java @@ -54,7 +54,7 @@ public void close( ) throws BirtException } else { - height = currentBP + localProperties.getPaddingBottom( ); + height = currentBP; } if ( null != parent ) From fee8b76a1c2b3f2df097d9f23214d0ebc1770f61 Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Fri, 29 May 2020 18:02:55 +0200 Subject: [PATCH 11/16] Fix bug 519375: Birt inserts an extra space in DOCX if part of the word is highlighted using an HTML tag --- .../emitter/docx/writer/BasicComponent.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/BasicComponent.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/BasicComponent.java index ba9129386ec..61a12ec8946 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/BasicComponent.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/BasicComponent.java @@ -274,7 +274,7 @@ protected void writeTOC( String tocText, int level ) { writeTOC( tocText, null, level, false ); } - + protected void writeTOC( String tocText, String color, int level, boolean middleInline) { if ( !middleInline ) @@ -457,6 +457,7 @@ private String normalize( String foreignText, Map appContext ) throws Unsupporte Element body = null; ByteArrayOutputStream byteOut = new ByteArrayOutputStream( ); HTMLWriter htmlWriter = new HTMLWriter( ); + htmlWriter.setEnableCompactMode(true); // HVB, bug 519375 htmlWriter.open( byteOut ); if ( doc != null ) { @@ -664,7 +665,7 @@ private void buildBox( StringBuffer styleBuffer, IStyle style ) /** * Build the margins. - * + * * @param styleBuffer * @param style */ @@ -733,7 +734,7 @@ private void buildMargins( StringBuffer styleBuffer, IStyle style ) /** * Build the paddings. - * + * * @param styleBuffer * @param style */ @@ -1066,7 +1067,7 @@ public void endNode( Node node, HTMLWriter writer ) /** * test if the text node is in the script - * + * * @param node * text node * @return true if the text is a script, otherwise, false. @@ -1152,19 +1153,19 @@ protected void writeIndent( int leftMargin, int rightMargin, int textIndent ) { writer.attribute( "w:left", leftMargin ); } - + if ( rightMargin != 0 ) { writer.attribute( "w:right", rightMargin ); } - + if ( textIndent != 0 ) { writer.attribute( "w:firstLine", textIndent ); } writer.closeTag( "w:ind" ); } - + abstract void start( ); abstract void end( ); From bb7d825fbb79437c95192eef644f7c3212176b36 Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Tue, 28 Jul 2020 18:09:58 +0200 Subject: [PATCH 12/16] Trying to support newer word versions, does not yet work. --- .../config/docx/DocxEmitterDescriptor.java | 22 ++++++++++- .../config/docx/i18n/messages.properties | 5 ++- .../engine/emitter/docx/DocxEmitterImpl.java | 16 ++++++-- .../engine/emitter/docx/writer/Document.java | 39 ++++++++++++++++++- .../emitter/docx/writer/DocxWriter.java | 7 +++- .../emitter/wpml/AbstractEmitterImpl.java | 27 +++++++++++++ .../engine/ooxml/constants/NameSpaces.java | 8 ++++ .../report/engine/api/DocxRenderOption.java | 2 + 8 files changed, 117 insertions(+), 9 deletions(-) diff --git a/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/DocxEmitterDescriptor.java b/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/DocxEmitterDescriptor.java index e94f6aba6ba..0d960f6fa2b 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/DocxEmitterDescriptor.java +++ b/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/DocxEmitterDescriptor.java @@ -12,6 +12,7 @@ package org.eclipse.birt.report.engine.emitter.config.docx; import static org.eclipse.birt.report.engine.api.DocxRenderOption.OPTION_EMBED_HTML; +import static org.eclipse.birt.report.engine.api.DocxRenderOption.OPTION_WORD_VERSION; import org.eclipse.birt.report.engine.api.IRenderOption; import org.eclipse.birt.report.engine.api.RenderOption; import org.eclipse.birt.report.engine.emitter.config.AbstractConfigurableOptionObserver; @@ -20,6 +21,7 @@ import org.eclipse.birt.report.engine.emitter.config.IConfigurableOption; import org.eclipse.birt.report.engine.emitter.config.IConfigurableOptionObserver; import org.eclipse.birt.report.engine.emitter.config.IOptionValue; +import org.eclipse.birt.report.engine.emitter.config.OptionValue; import org.eclipse.birt.report.engine.emitter.config.docx.i18n.Messages; @@ -30,6 +32,7 @@ public class DocxEmitterDescriptor extends AbstractEmitterDescriptor { protected static final String CHART_DPI = "ChartDpi"; protected static final String EMBED_HTML = "EmbedHtml"; + protected static final String WORD_VERSION = "WordVersion"; protected void initOptions( ) { @@ -50,8 +53,18 @@ protected void initOptions( ) embedHtml.setDefaultValue( new Boolean(Boolean.TRUE) ); embedHtml.setToolTip( getMessage( "Tooltip.EmbedHtml" ) ); embedHtml.setDescription( getMessage( "OptionDescription.EmbedHtml" ) ); //$NON-NLS-1$ - - options = new IConfigurableOption[]{chartDpi, embedHtml}; + + ConfigurableOption wordVersion = new ConfigurableOption( WORD_VERSION ); + wordVersion.setDisplayName( getMessage( "OptionDisplayValue.WordVersion" ) ); //$NON-NLS-1$ + wordVersion.setDataType( IConfigurableOption.DataType.INTEGER ); + wordVersion.setDisplayType( IConfigurableOption.DisplayType.TEXT ); + wordVersion.setDefaultValue( new Integer( 2016 ) ); + IOptionValue[] choices = { new OptionValue(2010), new OptionValue(2016) }; + wordVersion.setChoices(choices); + wordVersion.setToolTip( getMessage( "Tooltip.WordVersion" ) ); + wordVersion.setDescription( getMessage( "OptionDescription.WordVersion" ) ); //$NON-NLS-1$ + + options = new IConfigurableOption[]{chartDpi, embedHtml, wordVersion}; applyDefaultValues( ); } @Override @@ -110,6 +123,11 @@ public String getRenderOptionName( String name ) { return OPTION_EMBED_HTML; } + + if ( WORD_VERSION.equals( name ) ) + { + return OPTION_WORD_VERSION; + } return name; } diff --git a/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/i18n/messages.properties b/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/i18n/messages.properties index 575d5ba754d..9cfd407eb49 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/i18n/messages.properties +++ b/engine/org.eclipse.birt.report.engine.emitter.config.docx/src/org/eclipse/birt/report/engine/emitter/config/docx/i18n/messages.properties @@ -18,13 +18,16 @@ DocxEmitter.DisplayName=Word (DOCX) #Option Display Value OptionDisplayValue.ChartDpi=Chart DPI OptionDisplayValue.EmbedHtml=Embed HTML +OptionDisplayValue.WordVersion=Word Version ########################################################### #Option Description OptionDescription.ChartDpi=The DPI used to generate chart. OptionDescription.EmbedHtml=Allow DOCX to use embedded HTML +OptionDescription.WordVersion=Compatibility of .docx to which word version ########################################################### #tooltip Tooltip.ChartDpi=The DPI which chart engine uses to generate charts. For example, 192. -Tooltip.EmbedHtml=If HTML content should be embedded directly to DOCX output \ No newline at end of file +Tooltip.EmbedHtml=If HTML content should be embedded directly to DOCX output +Tooltip.WordVersion=MS changed word behavior with Word 2013, so usually 2016 is the best choice. \ No newline at end of file diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java index 0795d35933b..f7f040d9912 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java @@ -47,14 +47,24 @@ public void initialize( IEmitterServices service ) throws EngineException super.initialize( service ); String tempFileDir = service.getReportEngine( ).getConfig( ) .getTempDir( ); - wordWriter = new DocxWriter( out, tempFileDir, getCompressionMode( service ) - .getValue( ) ); + IRenderOption renderOption = service.getRenderOption( ); - Object value = renderOption.getOption( DocxRenderOption.OPTION_EMBED_HTML ); + Object value = renderOption.getOption( DocxRenderOption.OPTION_WORD_VERSION ); + if (value instanceof Integer) { + setWordVersion((Integer)value); + System.out.println("Setting the Word version to " + String.valueOf(value)); + } else { + setWordVersion(2010); + System.out.println("Using default Word version "+ String.valueOf(getWordVersion())); + } + value = renderOption.getOption( DocxRenderOption.OPTION_EMBED_HTML ); if ( value instanceof Boolean ) { this.embedHtml = (Boolean) value; } + + wordWriter = new DocxWriter( out, tempFileDir, getCompressionMode( service ) + .getValue( ), getWordVersion() ); } private CompressionMode getCompressionMode( IEmitterServices service ) diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java index 7812d538091..fb63ea25360 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java @@ -44,15 +44,18 @@ public class Document extends BasicComponent private int mhtId = 1; + private int wordVersion; + Document( IPart part, String backgroundColor, String backgroundImageUrl, String backgroundHeight, String backgroundWidth, - boolean rtl ) throws IOException + boolean rtl, int wordVersion ) throws IOException { super( part ); this.backgroundColor = backgroundColor; this.backgroundImageImgUrl = backgroundImageUrl; this.backgroundHeight = backgroundHeight; this.backgroundWidth = backgroundWidth; + this.wordVersion = wordVersion; this.rtl = rtl; writeStylesPart( ); writeSettingsPart( ); @@ -206,6 +209,20 @@ private void writeSettingsPart( ) throws IOException settingsPartWriter.startWriter( ); settingsPartWriter.openTag( "w:settings" ); settingsPartWriter.nameSpace( "w", NameSpaces.WORD_PROCESSINGML ); + settingsPartWriter.nameSpace( "o", NameSpaces.OFFICE ); + settingsPartWriter.nameSpace( "r", NameSpaces.RELATIONSHIPS); + if (wordVersion > 2010) { + settingsPartWriter.nameSpace( "mc", NameSpaces.MARKUP_COMPATIBILITY ); + settingsPartWriter.nameSpace( "w10", NameSpaces.W10 ); + settingsPartWriter.nameSpace( "w14", NameSpaces.W14 ); + settingsPartWriter.nameSpace( "w15", NameSpaces.W15 ); + settingsPartWriter.nameSpace( "w16", NameSpaces.W16 ); + settingsPartWriter.nameSpace( "w16cid", NameSpaces.W16CID ); + settingsPartWriter.nameSpace( "w16se", NameSpaces.W16SE ); + settingsPartWriter.nameSpace( "w16cex", NameSpaces.W16CEX ); + settingsPartWriter.nameSpace( "sl", NameSpaces.SCHEMA_LIBRARY ); + settingsPartWriter.attribute( "mc:ignorable", "w14 w15 w16se w16cid w16 w16cex" ); + } settingsPartWriter.openTag( "w:zoom" ); settingsPartWriter.attribute( "w:percent", "100" ); settingsPartWriter.closeTag( "w:zoom" ); @@ -218,6 +235,26 @@ private void writeSettingsPart( ) throws IOException settingsPartWriter.openTag( "w:view" ); settingsPartWriter.attribute( "w:val", "print" ); settingsPartWriter.closeTag( "w:view" ); + + // Word compatibility settings + settingsPartWriter.openTag( "w:compat" ); + switch (wordVersion) { + case 2010: + settingsPartWriter.openTag( "w:compatSetting" ); + settingsPartWriter.attribute( "w:name", "w:compatibilityMode" ); + settingsPartWriter.attribute( "w:uri", "http://schemas.microsoft.com/office/word" ); + settingsPartWriter.attribute( "w:val", "12" ); + settingsPartWriter.closeTag( "w:compatSetting" ); + break; + default: + settingsPartWriter.openTag( "w:compatSetting" ); + settingsPartWriter.attribute( "w:name", "w:compatibilityMode" ); + settingsPartWriter.attribute( "w:uri", "http://schemas.microsoft.com/office/word" ); + settingsPartWriter.attribute( "w:val", "15" ); + settingsPartWriter.closeTag( "w:compatSetting" ); + } + settingsPartWriter.closeTag( "w:compat" ); + settingsPartWriter.closeTag( "w:settings" ); settingsPartWriter.endWriter( ); } diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java index 7fac901d9c2..57f43839131 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/DocxWriter.java @@ -43,11 +43,14 @@ public class DocxWriter implements IWordWriter private boolean rtl = false; private boolean showHeaderOnFirst; + + private int wordVersion; - public DocxWriter( OutputStream out, String tempFileDir, int compressionMode ) + public DocxWriter( OutputStream out, String tempFileDir, int compressionMode, int wordVersion ) { pkg = Package.createInstance( out, tempFileDir, compressionMode ); pkg.setExtensionData( new ImageManager( ) ); + this.wordVersion = wordVersion; } public void start( boolean rtl, String creator, String title, @@ -119,7 +122,7 @@ private void initializeDocumentPart( String backgroundColor, String relationshipType = RelationshipTypes.DOCUMENT; IPart documentPart = pkg.getPart( uri, type, relationshipType ); document = new Document( documentPart, backgroundColor, - backgroundImageUrl, backgroundHeight, backgroundWidth, rtl ); + backgroundImageUrl, backgroundHeight, backgroundWidth, rtl, wordVersion ); document.start( ); currentComponent = document; } diff --git a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java index 88d11c7fa97..a841f441b21 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java +++ b/engine/org.eclipse.birt.report.engine.emitter.wpml/src/org/eclipse/birt/report/engine/emitter/wpml/AbstractEmitterImpl.java @@ -208,6 +208,25 @@ public static enum TextFlag { private boolean fixedLayout; protected int reportDpi; + + /** + * The original DOCX emitters generated output for word version 2010. + * Newer version of Microsoft Word render these files incorrectly + * the compatibility mode is activated manually after opening the file. + * + * The original WPML emitter generated the same WordProcessing ML. + * + * When wordVersion is set to a value of 2016, the resulting XML file + * is a bit different (mainly some XML schema names changed). + * + * If you want the document generated by BIRT to look correctly + * in MS Word, you should no longer user 2010, but 2016. + * + * Since this file is shared by the DOCX emitter and the WPML emitter + * (Word 2003 XML, uncompressed) and we don't want to touch the WPML + * emitter, the default here is still 2010. + */ + private int wordVersion = 2010; protected static final String EMPTY_FOOTER = " "; @@ -1477,6 +1496,14 @@ private int[] computeTblColumnWidths( ITableContent table, int tblWidth ) total ); } + public int getWordVersion() { + return wordVersion; + } + + public void setWordVersion(int wordVersion) { + this.wordVersion = wordVersion; + } + static class TocInfo { diff --git a/engine/org.eclipse.birt.report.engine.ooxml/src/org/eclipse/birt/report/engine/ooxml/constants/NameSpaces.java b/engine/org.eclipse.birt.report.engine.ooxml/src/org/eclipse/birt/report/engine/ooxml/constants/NameSpaces.java index f525c2c5558..40b5197847e 100644 --- a/engine/org.eclipse.birt.report.engine.ooxml/src/org/eclipse/birt/report/engine/ooxml/constants/NameSpaces.java +++ b/engine/org.eclipse.birt.report.engine.ooxml/src/org/eclipse/birt/report/engine/ooxml/constants/NameSpaces.java @@ -35,5 +35,13 @@ public class NameSpaces public static final String SPREADSHEETML = "http://schemas.openxmlformats.org/spreadsheetml/2006/main"; public static final String PACKAGE_RELATIONSHIPS = "http://schemas.openxmlformats.org/package/2006/relationships"; public static final String CONTENT_TYPES = "http://schemas.openxmlformats.org/package/2006/content-types"; + public static final String MARKUP_COMPATIBILITY = "http://schemas.openxmlformats.org/markup-compatibility/2006"; + public static final String W10 = "urn:schemas-microsoft-com:office:word"; + public static final String W14 = "http://schemas.microsoft.com/office/word/2010/wordml"; + public static final String W15 = "http://schemas.microsoft.com/office/word/2012/wordml"; + public static final String W16 = "http://schemas.microsoft.com/office/word/2018/wordml"; + public static final String W16CID = "http://schemas.microsoft.com/office/word/2016/wordml/cid"; + public static final String W16SE = "http://schemas.microsoft.com/office/word/2015/wordml/symex"; + public static final String W16CEX = "http://schemas.microsoft.com/office/word/2018/wordml/cex"; } diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/api/DocxRenderOption.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/api/DocxRenderOption.java index 57af5926f7c..a76a24ae39e 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/api/DocxRenderOption.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/api/DocxRenderOption.java @@ -19,6 +19,8 @@ public class DocxRenderOption extends RenderOption public static final String OPTION_COMPRESSION_MODE = "BEST_COMPRESSION"; //$NON-NLS-1$ public static final String OPTION_EMBED_HTML = "EmbedHtml"; + + public static final String OPTION_WORD_VERSION = "WordVersion"; @SuppressWarnings("unchecked") public void setCompressionMode( CompressionMode compressionMode ) From 9dd3de40cc690ce3395f6589e7d03a4c8a0ece08 Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Wed, 29 Jul 2020 10:05:06 +0200 Subject: [PATCH 13/16] Support for Word 2016 --- .../engine/emitter/docx/DocxEmitterImpl.java | 2 +- .../engine/emitter/docx/writer/Document.java | 86 +++++++++++-------- 2 files changed, 52 insertions(+), 36 deletions(-) diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java index f7f040d9912..03116b0bf6e 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java @@ -54,7 +54,7 @@ public void initialize( IEmitterServices service ) throws EngineException setWordVersion((Integer)value); System.out.println("Setting the Word version to " + String.valueOf(value)); } else { - setWordVersion(2010); + setWordVersion(2016); System.out.println("Using default Word version "+ String.valueOf(getWordVersion())); } value = renderOption.getOption( DocxRenderOption.OPTION_EMBED_HTML ); diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java index fb63ea25360..1bdb7372097 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java @@ -207,55 +207,71 @@ private void writeSettingsPart( ) throws IOException { settingsPartWriter = settingsPart.getWriter( ); settingsPartWriter.startWriter( ); - settingsPartWriter.openTag( "w:settings" ); - settingsPartWriter.nameSpace( "w", NameSpaces.WORD_PROCESSINGML ); - settingsPartWriter.nameSpace( "o", NameSpaces.OFFICE ); - settingsPartWriter.nameSpace( "r", NameSpaces.RELATIONSHIPS); - if (wordVersion > 2010) { - settingsPartWriter.nameSpace( "mc", NameSpaces.MARKUP_COMPATIBILITY ); - settingsPartWriter.nameSpace( "w10", NameSpaces.W10 ); - settingsPartWriter.nameSpace( "w14", NameSpaces.W14 ); - settingsPartWriter.nameSpace( "w15", NameSpaces.W15 ); - settingsPartWriter.nameSpace( "w16", NameSpaces.W16 ); - settingsPartWriter.nameSpace( "w16cid", NameSpaces.W16CID ); - settingsPartWriter.nameSpace( "w16se", NameSpaces.W16SE ); - settingsPartWriter.nameSpace( "w16cex", NameSpaces.W16CEX ); - settingsPartWriter.nameSpace( "sl", NameSpaces.SCHEMA_LIBRARY ); - settingsPartWriter.attribute( "mc:ignorable", "w14 w15 w16se w16cid w16 w16cex" ); - } - settingsPartWriter.openTag( "w:zoom" ); - settingsPartWriter.attribute( "w:percent", "100" ); - settingsPartWriter.closeTag( "w:zoom" ); - settingsPartWriter.openTag( "w:displayBackgroundShape" ); - settingsPartWriter.closeTag( "w:displayBackgroundShape" ); - // settingsPartWriter.openTag( "w:proofState" ); - // settingsPartWriter.attribute( "w:spelling", "clean" ); - // settingsPartWriter.attribute( "w:grammar", "clean" ); - // settingsPartWriter.closeTag( "w:proofState" ); - settingsPartWriter.openTag( "w:view" ); - settingsPartWriter.attribute( "w:val", "print" ); - settingsPartWriter.closeTag( "w:view" ); - - // Word compatibility settings - settingsPartWriter.openTag( "w:compat" ); - switch (wordVersion) { + switch(wordVersion) { case 2010: + settingsPartWriter.openTag( "w:settings" ); + settingsPartWriter.nameSpace( "w", NameSpaces.WORD_PROCESSINGML ); + settingsPartWriter.nameSpace( "o", NameSpaces.OFFICE ); + settingsPartWriter.nameSpace( "r", NameSpaces.RELATIONSHIPS); + settingsPartWriter.openTag( "w:zoom" ); + settingsPartWriter.attribute( "w:percent", "100" ); + settingsPartWriter.closeTag( "w:zoom" ); + settingsPartWriter.openTag( "w:displayBackgroundShape" ); + settingsPartWriter.closeTag( "w:displayBackgroundShape" ); + // settingsPartWriter.openTag( "w:proofState" ); + // settingsPartWriter.attribute( "w:spelling", "clean" ); + // settingsPartWriter.attribute( "w:grammar", "clean" ); + // settingsPartWriter.closeTag( "w:proofState" ); + settingsPartWriter.openTag( "w:view" ); + settingsPartWriter.attribute( "w:val", "print" ); + settingsPartWriter.closeTag( "w:view" ); + settingsPartWriter.openTag( "w:compat" ); settingsPartWriter.openTag( "w:compatSetting" ); settingsPartWriter.attribute( "w:name", "w:compatibilityMode" ); settingsPartWriter.attribute( "w:uri", "http://schemas.microsoft.com/office/word" ); settingsPartWriter.attribute( "w:val", "12" ); settingsPartWriter.closeTag( "w:compatSetting" ); + settingsPartWriter.closeTag( "w:compat" ); + settingsPartWriter.closeTag( "w:settings" ); break; default: + settingsPartWriter.openTag( "w:settings" ); + settingsPartWriter.nameSpace( "mc", NameSpaces.MARKUP_COMPATIBILITY ); + settingsPartWriter.nameSpace( "o", NameSpaces.OFFICE ); + settingsPartWriter.nameSpace( "r", NameSpaces.RELATIONSHIPS); + settingsPartWriter.nameSpace( "m", NameSpaces.MATH ); + settingsPartWriter.nameSpace( "v", NameSpaces.VML); + settingsPartWriter.nameSpace( "w10", NameSpaces.W10 ); + settingsPartWriter.nameSpace( "w", NameSpaces.WORD_PROCESSINGML ); + settingsPartWriter.nameSpace( "w14", NameSpaces.W14 ); + settingsPartWriter.nameSpace( "w15", NameSpaces.W15 ); + settingsPartWriter.nameSpace( "w16cex", NameSpaces.W16CEX ); + settingsPartWriter.nameSpace( "w16cid", NameSpaces.W16CID ); + settingsPartWriter.nameSpace( "w16", NameSpaces.W16 ); + settingsPartWriter.nameSpace( "w16se", NameSpaces.W16SE ); + settingsPartWriter.nameSpace( "sl", NameSpaces.SCHEMA_LIBRARY ); + settingsPartWriter.attribute( "mc:ignorable", "w14 w15 w16se w16cid w16 w16cex" ); + settingsPartWriter.openTag( "w:zoom" ); + settingsPartWriter.attribute( "w:percent", "100" ); + settingsPartWriter.closeTag( "w:zoom" ); + settingsPartWriter.openTag( "w:displayBackgroundShape" ); + settingsPartWriter.closeTag( "w:displayBackgroundShape" ); + // settingsPartWriter.openTag( "w:proofState" ); + // settingsPartWriter.attribute( "w:spelling", "clean" ); + // settingsPartWriter.attribute( "w:grammar", "clean" ); + // settingsPartWriter.closeTag( "w:proofState" ); + settingsPartWriter.openTag( "w:view" ); + settingsPartWriter.attribute( "w:val", "print" ); + settingsPartWriter.closeTag( "w:view" ); + settingsPartWriter.openTag( "w:compat" ); settingsPartWriter.openTag( "w:compatSetting" ); settingsPartWriter.attribute( "w:name", "w:compatibilityMode" ); settingsPartWriter.attribute( "w:uri", "http://schemas.microsoft.com/office/word" ); settingsPartWriter.attribute( "w:val", "15" ); settingsPartWriter.closeTag( "w:compatSetting" ); + settingsPartWriter.closeTag( "w:compat" ); + settingsPartWriter.closeTag( "w:settings" ); } - settingsPartWriter.closeTag( "w:compat" ); - - settingsPartWriter.closeTag( "w:settings" ); settingsPartWriter.endWriter( ); } finally From 04b152a773b704d17ccaeb1581e7655eac5bffff Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Wed, 29 Jul 2020 10:39:44 +0200 Subject: [PATCH 14/16] The DOCX emitter now creates Word 2016 documents by default. --- .../birt/report/engine/emitter/docx/DocxEmitterImpl.java | 2 -- .../birt/report/engine/emitter/docx/writer/Document.java | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java index 03116b0bf6e..3c0fe390a96 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/DocxEmitterImpl.java @@ -52,10 +52,8 @@ public void initialize( IEmitterServices service ) throws EngineException Object value = renderOption.getOption( DocxRenderOption.OPTION_WORD_VERSION ); if (value instanceof Integer) { setWordVersion((Integer)value); - System.out.println("Setting the Word version to " + String.valueOf(value)); } else { setWordVersion(2016); - System.out.println("Using default Word version "+ String.valueOf(getWordVersion())); } value = renderOption.getOption( DocxRenderOption.OPTION_EMBED_HTML ); if ( value instanceof Boolean ) diff --git a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java index 1bdb7372097..b8b113f7526 100644 --- a/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java +++ b/engine/org.eclipse.birt.report.engine.emitter.docx/src/org/eclipse/birt/report/engine/emitter/docx/writer/Document.java @@ -250,7 +250,7 @@ private void writeSettingsPart( ) throws IOException settingsPartWriter.nameSpace( "w16", NameSpaces.W16 ); settingsPartWriter.nameSpace( "w16se", NameSpaces.W16SE ); settingsPartWriter.nameSpace( "sl", NameSpaces.SCHEMA_LIBRARY ); - settingsPartWriter.attribute( "mc:ignorable", "w14 w15 w16se w16cid w16 w16cex" ); + settingsPartWriter.attribute( "mc:Ignorable", "w14 w15 w16se w16cid w16 w16cex" ); settingsPartWriter.openTag( "w:zoom" ); settingsPartWriter.attribute( "w:percent", "100" ); settingsPartWriter.closeTag( "w:zoom" ); @@ -265,7 +265,7 @@ private void writeSettingsPart( ) throws IOException settingsPartWriter.closeTag( "w:view" ); settingsPartWriter.openTag( "w:compat" ); settingsPartWriter.openTag( "w:compatSetting" ); - settingsPartWriter.attribute( "w:name", "w:compatibilityMode" ); + settingsPartWriter.attribute( "w:name", "compatibilityMode" ); settingsPartWriter.attribute( "w:uri", "http://schemas.microsoft.com/office/word" ); settingsPartWriter.attribute( "w:val", "15" ); settingsPartWriter.closeTag( "w:compatSetting" ); From 9035efe6653030e40b62f30abb60ed43f9a11cab Mon Sep 17 00:00:00 2001 From: hvbtup Date: Mon, 10 Aug 2020 15:54:31 +0200 Subject: [PATCH 15/16] Update README.md Updated README.md including the correct link to the Travis CI build status. --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 952bd7e08a7..0b425088c70 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,13 @@ -# Eclipse BIRT [![Build Status](https://travis-ci.com/Flugtiger/birt.svg?branch=flugtiger_master)](https://travis-ci.com/Flugtiger/birt) +# Eclipse BIRT [![Build Status](https://travis-ci.com/hvbtup/birt.svg?branch=flugtiger_master)](https://travis-ci.com/hvbtup/birt) The open source Eclipse BIRT reporting and data visualization project. **This is not the official Eclipse repository, nevertheless feel free to open tickets and pull requests!** +## Reasons for this fork and differences to the official Eclipse repository + +For more information about this repository see our [wiki pages](https://github.com/hvbtup/birt/wiki) + ## Building BIRT -See our wiki pages [How to build Eclipse BIRT](https://github.com/Flugtiger/birt/wiki/How-to-build-Eclipse-BIRT) and [How to setup an Eclipse IDE for Eclipse BIRT](https://github.com/Flugtiger/birt/wiki/How-to-setup-an-Eclipse-IDE-for-Eclipse-BIRT) +See the wiki pages on flugtiger/birt [How to build Eclipse BIRT](https://github.com/Flugtiger/birt/wiki/How-to-build-Eclipse-BIRT) and [How to setup an Eclipse IDE for Eclipse BIRT](https://github.com/Flugtiger/birt/wiki/How-to-setup-an-Eclipse-IDE-for-Eclipse-BIRT). + +Just remember to replace flugtiger/birt with hvbtup/birt From be6294fc76dc0ee15e455c361d1b38747e43a9ce Mon Sep 17 00:00:00 2001 From: Henning von Bargen Date: Wed, 23 Jun 2021 09:45:45 +0200 Subject: [PATCH 16/16] Fix java.lang.StringIndexOutOfBoundsException in TextArea.calculateText when whiteSpace:nowrap is used --- .../nLayout/area/impl/TextCompositor.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TextCompositor.java b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TextCompositor.java index 337596a7a84..523888e9aed 100644 --- a/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TextCompositor.java +++ b/engine/org.eclipse.birt.report.engine/src/org/eclipse/birt/report/engine/nLayout/area/impl/TextCompositor.java @@ -335,16 +335,18 @@ private void addWordIntoTextArea( TextArea textArea, Word word ) wordVestige = null; insertFirstExceedWord = false; } - if ( isNewLine && context.isEnableWordbreak( )) + if ( isNewLine && textArea.isEmpty( ) ) { - doWordBreak( word.getValue( ), textArea ); - } - else if ( isNewLine && textArea.isEmpty( ) ) - { - // If width of a word is larger than the max line width, add - // it into the line directly. - addWord( textArea, textLength, wordWidth ); - + if ( context.isEnableWordbreak( ) ) + { + doWordBreak( word.getValue( ), textArea ); + } + else + { + // If width of a word is larger than the max line width, add + // it into the line directly. + addWord( textArea, textLength, wordWidth ); + } } else {