public void CreateImportFile(IndicatorManagerOptions indicatorManagerOptions, string filename)
        {
            ImporterBase importer = new ImporterBase();

            Microsoft.Office.Interop.Excel.Application xlsApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
            Microsoft.Office.Interop.Excel.Workbook xlsWorkbook;
            Microsoft.Office.Interop.Excel.Workbooks xlsWorkbooks;
            Microsoft.Office.Interop.Excel.Sheets xlsWorksheets;
            Microsoft.Office.Interop.Excel.Worksheet xlsWorksheet;
            Microsoft.Office.Interop.Excel.Worksheet xlsValidation;
            object oMissing = System.Reflection.Missing.Value;
            validationRanges = new Dictionary<string, string>();

            //Create new workbook
            xlsWorkbooks = xlsApp.Workbooks;
            xlsWorkbook = xlsWorkbooks.Add(true);
            xlsWorksheets = xlsWorkbook.Worksheets;

            //Get the first worksheet
            xlsWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)(xlsWorkbook.Worksheets[1]);

            // add hidden validation worksheet
            xlsValidation = (Microsoft.Office.Interop.Excel.Worksheet)xlsWorksheets.Add(oMissing, xlsWorksheet, oMissing, oMissing);
            xlsValidation.Name = validationSheetName;
            xlsValidation.Visible = Microsoft.Office.Interop.Excel.XlSheetVisibility.xlSheetHidden;

            // row 1 column headers
            xlsWorksheet.Cells[1, 1] = "Indicator ID";
            xlsWorksheet.Cells[1, 2] = "Type ID";
            xlsWorksheet.Cells[1, 3] = "Type Name";
            xlsWorksheet.Cells[1, 4] = "Form Name"; // Drop down
            xlsWorksheet.Cells[1, 5] = "Indicator Name English";
            xlsWorksheet.Cells[1, 6] = "Indicator Name French";
            xlsWorksheet.Cells[1, 7] = "Indicator Name Portuguese";
            xlsWorksheet.Cells[1, 8] = "Indicator Name Bahasa";
            xlsWorksheet.Cells[1, 9] = "Indicator Type"; // Drop down
            xlsWorksheet.Cells[1, 10] = "Is Required";
            xlsWorksheet.Cells[1, 11] = "Aggregation Rule"; // Drop down
            xlsWorksheet.Cells[1, 12] = "Merge Rule"; // Drop down
            xlsWorksheet.Cells[1, 13] = "Split Rule"; // Drop down
            xlsWorksheet.Cells[1, 14] = "Sort Order"; 

            // row 2+ indicators
            int xlsRowCount = 2;
            foreach (var ind in indicatorManagerOptions.SelectedIndicators)
            {
                xlsWorksheet.Cells[xlsRowCount, 1] = ind.ID;
                xlsWorksheet.Cells[xlsRowCount, 2] = (int)indicatorManagerOptions.EntityType;
                xlsWorksheet.Cells[xlsRowCount, 3] = indicatorManagerOptions.EntityType.ToString();
                importer.AddDataValidation(xlsWorksheet, xlsValidation, Util.GetExcelColumnName(4), xlsRowCount, "", "", indicatorManagerOptions.FormTypes, System.Threading.Thread.CurrentThread.CurrentCulture);
                xlsWorksheet.Cells[xlsRowCount, 4] = ind.FormName;

                var english = new TranslationLookupInstance(new CultureInfo("en-US"));
                xlsWorksheet.Cells[xlsRowCount, 5] = english.GetValue(ind.Key, ind.Key);
                var french = new TranslationLookupInstance(new CultureInfo("fr-FR"));
                xlsWorksheet.Cells[xlsRowCount, 6] = french.GetValue(ind.Key, ind.Key);
                var port = new TranslationLookupInstance(new CultureInfo("pt-PT"));
                xlsWorksheet.Cells[xlsRowCount, 7] = port.GetValue(ind.Key, ind.Key);
                var bahasa = new TranslationLookupInstance(new CultureInfo("id-ID"));
                xlsWorksheet.Cells[xlsRowCount, 8] = bahasa.GetValue(ind.Key, ind.Key);

                importer.AddDataValidation(xlsWorksheet, xlsValidation, Util.GetExcelColumnName(9), xlsRowCount, "", "", Enum.GetNames(typeof(IndicatorDataType)).ToList(), System.Threading.Thread.CurrentThread.CurrentCulture);
                xlsWorksheet.Cells[xlsRowCount, 9] = ((IndicatorDataType)ind.DataTypeId).ToString();
                xlsWorksheet.Cells[xlsRowCount, 10] = ind.IsRequired.ToString();
                importer.AddDataValidation(xlsWorksheet, xlsValidation, Util.GetExcelColumnName(11), xlsRowCount, "", "", Enum.GetNames(typeof(IndicatorAggType)).ToList(), System.Threading.Thread.CurrentThread.CurrentCulture);
                xlsWorksheet.Cells[xlsRowCount, 11] = ((IndicatorAggType)ind.AggregationRuleId).ToString();
                importer.AddDataValidation(xlsWorksheet, xlsValidation, Util.GetExcelColumnName(12), xlsRowCount, "", "", Enum.GetNames(typeof(MergingRule)).ToList(), System.Threading.Thread.CurrentThread.CurrentCulture);
                xlsWorksheet.Cells[xlsRowCount, 12] = ((MergingRule)ind.MergeRule).ToString();
                importer.AddDataValidation(xlsWorksheet, xlsValidation, Util.GetExcelColumnName(13), xlsRowCount, "", "", Enum.GetNames(typeof(RedistrictingRule)).ToList(), System.Threading.Thread.CurrentThread.CurrentCulture);
                xlsWorksheet.Cells[xlsRowCount, 13] = ((RedistrictingRule)ind.SplitRule).ToString();
                xlsWorksheet.Cells[xlsRowCount, 14] = ind.SortOrder;
                xlsRowCount++;
            }

            // Auto fit
            var last = xlsWorksheet.Cells.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeLastCell, Type.Missing);
            var range = xlsWorksheet.get_Range("A1", last);
            range.Columns.AutoFit();

            // Save and display
            xlsApp.DisplayAlerts = false;
            xlsWorkbook.SaveAs(filename, Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook, oMissing,
                oMissing, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
                Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlUserResolution, true,
                oMissing, oMissing, oMissing);
            xlsApp.Visible = true;
            Marshal.ReleaseComObject(xlsWorksheets);
            Marshal.ReleaseComObject(xlsWorksheet);
            Marshal.ReleaseComObject(xlsValidation);
            Marshal.ReleaseComObject(xlsWorkbooks);
            Marshal.ReleaseComObject(xlsWorkbook);
            Marshal.ReleaseComObject(xlsApp);
        }
 public IndStepIndicators(IndicatorManagerOptions o)
     : base()
 {
     opts = o;
     InitializeComponent();
 }