<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Sort Scheduled Elements  base on it's Sort/Group Fields to be export in Exce in Revit API Forum</title>
    <link>https://forums.autodesk.com/t5/revit-api-forum/sort-scheduled-elements-base-on-it-s-sort-group-fields-to-be/m-p/9145595#M38691</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/413917"&gt;@jeremytammik&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;i have manage to sort using IComparer. however, when field StrorageType is ElementId and String it gives me error. also i wonder how to get value for sorting&amp;nbsp; if the sort/group field is not accessible in element parameter ( eg. Count, Calculated Field).&lt;/P&gt;&lt;P&gt;here is my code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;private List&amp;lt;Element&amp;gt; ScheduledElement(Document doc,ViewSchedule view)
        {
				List&amp;lt;Element&amp;gt; elementsOnSchedule = new FilteredElementCollector(doc, view.Id)
					.WhereElementIsNotElementType()
					.ToElements().ToList();
					
				if(view.Definition.GetSortGroupFields().Count != 0)
				{
					elementsOnSchedule.Sort(new sortElement(view));
				}
				 	return elementsOnSchedule;
        }&lt;/PRE&gt;&lt;P&gt;IComparer Class:&lt;/P&gt;&lt;PRE&gt;public class sortElement : IComparer&amp;lt;Element&amp;gt;
	{
		private ViewSchedule vs {get; set;}
		
		public sortElement(ViewSchedule view)
		{
			vs = view;
		}
		
		public int Compare(Element x, Element y)  
	     {
			var sortField = (from i in vs.Definition.GetSortGroupFields() select i).First();
			var field = vs.Definition.GetField(sortField.FieldId);
			
			var Param1 = x.LookupParameter(field.GetName());
			var Param2 = y.LookupParameter(field.GetName());

				if (Param1.StorageType == StorageType.Integer)
				{
					return Param1.AsInteger().CompareTo(Param2.AsInteger());
				}
				else if (Param1.StorageType == StorageType.Double)
				{
					return Param1.AsDouble().CompareTo(Param2.AsDouble());
				}
				else if (Param1.StorageType == StorageType.String) 
				{
					return Param1.AsString().CompareTo(Param2.AsString());
				}
				else if (Param1.StorageType == StorageType.ElementId) 
				{
					return Param1.AsValueString().CompareTo(Param2.AsValueString());
				}
				return 0;
		}
	}&lt;/PRE&gt;&lt;P&gt;thanks for helping&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 14 Nov 2019 06:20:00 GMT</pubDate>
    <dc:creator>Anonymous</dc:creator>
    <dc:date>2019-11-14T06:20:00Z</dc:date>
    <item>
      <title>Sort Scheduled Elements  base on it's Sort/Group Fields to be export in Excel</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/sort-scheduled-elements-base-on-it-s-sort-group-fields-to-be/m-p/9142870#M38689</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;i'm trying to export the schedule elements to Excel with the same order as it is in Revit Schedule. I retrieved the sorting field of the schedule and try to apply it to elements list with no luck. For now my goal is just to apply one sort/group field and apply multiple sorting condition as i progress. Hope someone can help me.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;here is the schedule&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Image.PNG" style="width: 662px;"&gt;&lt;img src="https://forums.autodesk.com/t5/image/serverpage/image-id/697286i65731EDB3FAE3EF3/image-size/large?v=v2&amp;amp;px=999" role="button" title="Image.PNG" alt="Image.PNG" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;here is my code which not working&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;private IEnumerable&amp;lt;Element&amp;gt; ScheduledElement(Document doc,ViewSchedule view)
        {
				var sort = (from ScheduleSortGroupField i in view.Definition.GetSortGroupFields() select view.Definition.GetField(i.FieldId)).First();
			
				IEnumerable&amp;lt;Element&amp;gt; elementsOnSchedule = new FilteredElementCollector(doc, view.Id)
					.WhereElementIsNotElementType()
					.OrderBy(c =&amp;gt; c.LookupParameter(sort.GetName()));
				
				return elementsOnSchedule;
        }&lt;/PRE&gt;&lt;P&gt;Thanks in advance&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 13 Nov 2019 01:40:29 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/sort-scheduled-elements-base-on-it-s-sort-group-fields-to-be/m-p/9142870#M38689</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2019-11-13T01:40:29Z</dc:date>
    </item>
    <item>
      <title>Re: Sort Scheduled Elements  base on it's Sort/Group Fields to be export in Exce</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/sort-scheduled-elements-base-on-it-s-sort-group-fields-to-be/m-p/9143105#M38690</link>
      <description>&lt;P&gt;Fair59 presents a very comprehensive and well explained solution to &lt;A href="https://forums.autodesk.com/t5/revit-api-forum/replicate-graphical-column-schedule-sort-order-with-c/m-p/9105470" target="_blank" rel="noopener"&gt;Replicate Graphical Column Schedule Sort Order with C#&lt;/A&gt;&amp;nbsp;by implementing a custom ColumnMarkComparer class implementing IComparer&amp;lt;FamilyInstance&amp;gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;BR /&gt;I very strongly expect that you can implement something similar to solve your issue as well.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 13 Nov 2019 06:21:53 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/sort-scheduled-elements-base-on-it-s-sort-group-fields-to-be/m-p/9143105#M38690</guid>
      <dc:creator>jeremytammik</dc:creator>
      <dc:date>2019-11-13T06:21:53Z</dc:date>
    </item>
    <item>
      <title>Re: Sort Scheduled Elements  base on it's Sort/Group Fields to be export in Exce</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/sort-scheduled-elements-base-on-it-s-sort-group-fields-to-be/m-p/9145595#M38691</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/413917"&gt;@jeremytammik&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;i have manage to sort using IComparer. however, when field StrorageType is ElementId and String it gives me error. also i wonder how to get value for sorting&amp;nbsp; if the sort/group field is not accessible in element parameter ( eg. Count, Calculated Field).&lt;/P&gt;&lt;P&gt;here is my code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;private List&amp;lt;Element&amp;gt; ScheduledElement(Document doc,ViewSchedule view)
        {
				List&amp;lt;Element&amp;gt; elementsOnSchedule = new FilteredElementCollector(doc, view.Id)
					.WhereElementIsNotElementType()
					.ToElements().ToList();
					
				if(view.Definition.GetSortGroupFields().Count != 0)
				{
					elementsOnSchedule.Sort(new sortElement(view));
				}
				 	return elementsOnSchedule;
        }&lt;/PRE&gt;&lt;P&gt;IComparer Class:&lt;/P&gt;&lt;PRE&gt;public class sortElement : IComparer&amp;lt;Element&amp;gt;
	{
		private ViewSchedule vs {get; set;}
		
		public sortElement(ViewSchedule view)
		{
			vs = view;
		}
		
		public int Compare(Element x, Element y)  
	     {
			var sortField = (from i in vs.Definition.GetSortGroupFields() select i).First();
			var field = vs.Definition.GetField(sortField.FieldId);
			
			var Param1 = x.LookupParameter(field.GetName());
			var Param2 = y.LookupParameter(field.GetName());

				if (Param1.StorageType == StorageType.Integer)
				{
					return Param1.AsInteger().CompareTo(Param2.AsInteger());
				}
				else if (Param1.StorageType == StorageType.Double)
				{
					return Param1.AsDouble().CompareTo(Param2.AsDouble());
				}
				else if (Param1.StorageType == StorageType.String) 
				{
					return Param1.AsString().CompareTo(Param2.AsString());
				}
				else if (Param1.StorageType == StorageType.ElementId) 
				{
					return Param1.AsValueString().CompareTo(Param2.AsValueString());
				}
				return 0;
		}
	}&lt;/PRE&gt;&lt;P&gt;thanks for helping&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 14 Nov 2019 06:20:00 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/sort-scheduled-elements-base-on-it-s-sort-group-fields-to-be/m-p/9145595#M38691</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2019-11-14T06:20:00Z</dc:date>
    </item>
    <item>
      <title>Re: Sort Scheduled Elements  base on it's Sort/Group Fields to be export in Exce</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/sort-scheduled-elements-base-on-it-s-sort-group-fields-to-be/m-p/9145868#M38692</link>
      <description>&lt;P&gt;follow-up on ElementId and string error. i have figured out that i need to use string.compare.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-unicode-emoji" title=":grinning_face_with_sweat:"&gt;😅&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;my only issue now is how to get value if the sort field is not accessible from element(eg. count, formula, etc.)&lt;/P&gt;</description>
      <pubDate>Thu, 14 Nov 2019 09:11:07 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/sort-scheduled-elements-base-on-it-s-sort-group-fields-to-be/m-p/9145868#M38692</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2019-11-14T09:11:07Z</dc:date>
    </item>
    <item>
      <title>Re: Sort Scheduled Elements  base on it's Sort/Group Fields to be export in Excel</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/sort-scheduled-elements-base-on-it-s-sort-group-fields-to-be/m-p/12683171#M38693</link>
      <description>&lt;P&gt;hi&amp;nbsp;@Anonymous,&lt;/P&gt;&lt;P&gt;Hope below code will resolve your issue for grouping/sorting. You can change parameter value.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SchedulableField schedulableFieldForBaseLevel = def.GetSchedulableFields().FirstOrDefault(&lt;BR /&gt;sf =&amp;gt; sf.ParameterId == new ElementId(BuiltInParameter.SCHEDULE_BASE_LEVEL_PARAM));&lt;/P&gt;&lt;P&gt;if (schedulableFieldForBaseLevel != null)&lt;BR /&gt;{&lt;BR /&gt;baseLevelField = def.AddField(schedulableFieldForBaseLevel);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;if (baseLevelField != null)&lt;BR /&gt;{&lt;BR /&gt;var sortGroupField = new ScheduleSortGroupField(baseLevelField.FieldId);&lt;BR /&gt;sortGroupField.ShowHeader = true;&lt;BR /&gt;sortGroupField.SortOrder = ScheduleSortOrder.Ascending;&lt;BR /&gt;def.InsertSortGroupField(sortGroupField, 0);&lt;BR /&gt;}&lt;/P&gt;</description>
      <pubDate>Wed, 03 Apr 2024 06:52:27 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/sort-scheduled-elements-base-on-it-s-sort-group-fields-to-be/m-p/12683171#M38693</guid>
      <dc:creator>krishna_j64ECZ</dc:creator>
      <dc:date>2024-04-03T06:52:27Z</dc:date>
    </item>
  </channel>
</rss>

