Quintiq file version 2.0 #parent: #root StaticMethod Export ( MacroPlan macroPlan, PackagingPlanRows pprs ) as BinaryValue { TextBody: [* xmlDOMI := XMLDOMImplementation::Create(); xmlDOM := xmlDOMI.CreateDocumentFromString( 'Sheet1
' ); tableElement := xmlDOM.GetElementByTagName( "table", 0 ); // 第一列(名称) pprs := selectsortedset( pprs, Elements, tempPPR, true, tempPPR.ProductID(), tempPPR.StockingPointID() ); firstColumn := xmlDOM.CreateElement( "column" ); firstName := xmlDOM.CreateElement( "name" ); firstType := xmlDOM.CreateElement( "type" ); firstName.TextContent( "*" ); firstType.TextContent( "String" ); firstColumn.AppendChild( firstName ); firstColumn.AppendChild( firstType ); traverse ( pprs, Elements, ppr ) { firstCell := xmlDOM.CreateElement( "cell" ); firstCell.SetAttribute( "value", ppr.ProductID() ); firstColumn.AppendChild( firstCell ); for ( i := 0; i < 8; i++ ) { firstCell := xmlDOM.CreateElement( "cell" ); firstCell.SetAttribute( "value", "" ); firstColumn.AppendChild( firstCell ); } } tableElement.AppendChild( firstColumn ); // 第二列 attrs := construct( Strings ); attrs.Add( "Demand" ); attrs.Add( "New supply" ); attrs.Add( "Inventory end" ); attrs.Add( "Transport-out" ); attrs.Add( "Transport-in" ); attrs.Add( "Unpackaged inventory" ); attrs.Add( "Packaged inventory" ); attrs.Add( "Package" ); attrs.Add( "Unpackage" ); secondColumn := xmlDOM.CreateElement( "column" ); secondName := xmlDOM.CreateElement( "name" ); secondType := xmlDOM.CreateElement( "type" ); secondName.TextContent( "*" ); secondType.TextContent( "String" ); secondColumn.AppendChild( secondName ); secondColumn.AppendChild( secondType ); for ( i := 0; i < pprs.Size(); i++ ) { traverse ( attrs, Elements, attr ) { secondCell := xmlDOM.CreateElement( "cell" ); secondCell.SetAttribute( "value", attr ); secondColumn.AppendChild( secondCell ); } } tableElement.AppendChild( secondColumn ); // 时间列 ppcs := selectsortedset( macroPlan, PackagingPlanColumn, tempPPC, true, tempPPC.StartDate() ); traverse ( ppcs, Elements, ppc ) { cellColumn := xmlDOM.CreateElement( "column" ); cellName := xmlDOM.CreateElement( "name" ); cellType := xmlDOM.CreateElement( "type" ); cellName.TextContent( ppc.StartDate().Format( "Y-M2-D2" ) ); cellType.TextContent( "Real" ); cellColumn.AppendChild( cellName ); cellColumn.AppendChild( cellType ); cells := selectsortedset( ppc, PackagingPlanCell, tempPPCell, exists( pprs, Elements, tempPPR, tempPPR = tempPPCell.PackagingPlanRow() ), tempPPCell.PackagingPlanRow().ProductID(), tempPPCell.PackagingPlanRow().StockingPointID() ); traverse ( cells, Elements, c ) { cell := xmlDOM.CreateElement( "cell" ); cell.SetAttribute( "value", [String]c.NetDemand().Round( 0 ) ); cellColumn.AppendChild( cell ); cell := xmlDOM.CreateElement( "cell" ); cell.SetAttribute( "value", [String]c.NewSupply().Round( 0 ) ); cellColumn.AppendChild( cell ); cell := xmlDOM.CreateElement( "cell" ); cell.SetAttribute( "value", [String]c.EndingInventory().Round( 0 ) ); cellColumn.AppendChild( cell ); cell := xmlDOM.CreateElement( "cell" ); cell.SetAttribute( "value", [String]c.Out().Round( 0 ) ); cellColumn.AppendChild( cell ); cell := xmlDOM.CreateElement( "cell" ); cell.SetAttribute( "value", [String]c.TransferIn().Round( 0 ) ); cellColumn.AppendChild( cell ); cell := xmlDOM.CreateElement( "cell" ); cell.SetAttribute( "value", [String]c.UnpackagedInventory().Round( 0 ) ); cellColumn.AppendChild( cell ); cell := xmlDOM.CreateElement( "cell" ); cell.SetAttribute( "value", [String]c.PackagingInventory().Round( 0 ) ); cellColumn.AppendChild( cell ); cell := xmlDOM.CreateElement( "cell" ); cell.SetAttribute( "value", [String]c.Package().Round( 0 ) ); cellColumn.AppendChild( cell ); cell := xmlDOM.CreateElement( "cell" ); cell.SetAttribute( "value", [String]c.Unpacking().Round( 2 ) ); cellColumn.AppendChild( cell ); } tableElement.AppendChild( cellColumn ); } xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM ) //info( xmlString ); tableGroupHandle := TableGroupHandle::Create( "Sheet1" ); tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) ); tableGroupHandle.Add( tableHandle ); binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true ); return binaryData.AsBinaryValue(); *] }