Ejemplo n.º 1
0
        public Result Execute(
            ExternalCommandData commandData,
            ref string message,
            ElementSet elements)
        {
            UIApplication uiapp = commandData.Application;
            Application   app   = uiapp.Application;
            Document      doc   = uiapp.ActiveUIDocument.Document;

            Category cat = doc.Settings.Categories.get_Item(
                Lab4_3_1_CreateAndBindSharedParam.Target);

            // Launch Excel (same as in Lab 4_2, so we really
            // should have better created some utils...)

            X.Application excel = new X.ApplicationClass();
            if (null == excel)
            {
                LabUtils.ErrorMsg("Failed to get or start Excel.");
                return(Result.Failed);
            }
            excel.Visible = true;
            X.Workbook  workbook = excel.Workbooks.Add(Missing.Value);
            X.Worksheet worksheet;
            //while( 1 < workbook.Sheets.Count )
            //{
            //  worksheet = workbook.Sheets.get_Item( 0 ) as X.Worksheet;
            //  worksheet.Delete();
            //}
            worksheet             = excel.ActiveSheet as X.Worksheet;
            worksheet.Name        = "Revit " + cat.Name;
            worksheet.Cells[1, 1] = "ID";
            worksheet.Cells[1, 2] = "Level";
            worksheet.Cells[1, 3] = "Tag";
            worksheet.Cells[1, 4] = LabConstants.SharedParamsDefFireRating;
            worksheet.get_Range("A1", "Z1").Font.Bold = true;

            List <Element> elems = LabUtils.GetTargetInstances(doc,
                                                               Lab4_3_1_CreateAndBindSharedParam.Target);

            // Get Shared param Guid

            Guid paramGuid = LabUtils.SharedParamGUID(app,
                                                      LabConstants.SharedParamsGroupAPI,
                                                      LabConstants.SharedParamsDefFireRating);

            if (paramGuid.Equals(Guid.Empty))
            {
                LabUtils.ErrorMsg("No Shared param found in the file - aborting...");
                return(Result.Failed);
            }

            // Loop through all elements and export each to an Excel row

            int row = 2;

            foreach (Element e in elems)
            {
                worksheet.Cells[row, 1] = e.Id.IntegerValue; // ID

                // Level:

                //worksheet.Cells[row, 2] = e.Level.Name; // 2013
                //worksheet.Cells[row, 2] = doc.GetElement( e.LevelId ).Name; // 2014

                // When attaching a shared parameter to Material
                // elements, no valid level is defined, of course:

                ElementId levelId = e.LevelId;
                string    levelName
                    = ElementId.InvalidElementId == levelId
            ? "N/A"
            : doc.GetElement(levelId).Name;
                worksheet.Cells[row, 2] = levelName;

                // Tag:

                Parameter tagParameter = e.get_Parameter(
                    BuiltInParameter.ALL_MODEL_MARK);
                if (null != tagParameter)
                {
                    worksheet.Cells[row, 3] = tagParameter.AsString();
                }

                // FireRating:

                Parameter parameter = e.get_Parameter(paramGuid);
                if (null != parameter)
                {
                    worksheet.Cells[row, 4] = parameter.AsDouble();
                }
                ++row;
            }
            return(Result.Succeeded);
        }