public static Type GetAttributeType(this GM_NSIReferenceAttribute attributeType)
        {
            switch ((NSIDataTypes)attributeType.ReferenceAttributeType)
            {
            case NSIDataTypes.String:
                return(typeof(string));

            case NSIDataTypes.Integer:
                return(typeof(int));

            case NSIDataTypes.Real:
                return(typeof(decimal));

            case NSIDataTypes.DateTime:
                return(typeof(DateTime));

            case NSIDataTypes.ReferenceRecord:
                return(typeof(GM_NSIReferenceRecord));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        public void Execute(object parameter)
        {
            HourGlass.Enable = true;
            TableView view = parameter as TableView;

            if (view == null)
            {
                return;
            }

            MainViewModel  mainViewModel  = view.DataContext as MainViewModel;
            OpenFileDialog openFileDialog = new OpenFileDialog
            {
                DefaultExt       = ".xlsx",
                InitialDirectory = @"C:\",
                Filter           = "excel file (*.xlsx)|*.xlsx"
            };

            if (openFileDialog.ShowDialog() == true)
            {
                SplashScreenManager.ShowForm(typeof(frmWaitForm), true, true);
                SplashScreenManager.Default.SetWaitFormCaption("Импортирую...");
                var excelApp = new Application();
                var workbook = excelApp.Workbooks.Open(openFileDialog.FileName);
                worksheet = (Worksheet)excelApp.ActiveSheet;
                try
                {
                    //last row,column excel
                    SplashScreenManager.Default.SetWaitFormDescription("Определение данных в таблице");
                    var lastRow    = excelApp.Cells.SpecialCells(XlCellType.xlCellTypeLastCell).Row;
                    var lastColumn = excelApp.Cells.SpecialCells(XlCellType.xlCellTypeLastCell).Column;
                    for (int i = lastColumn; i >= 1; i--)
                    {
                        if (GetValueExcel(7, i) == "")
                        {
                            lastColumn--;
                        }
                        else
                        {
                            break;
                        }
                    }

                    // блок атрибутов справочника
                    ObservableCollection <GM_NSIReferenceAttribute> listAttributes = new ObservableCollection <GM_NSIReferenceAttribute>();

                    for (int i = 3; i <= lastColumn; i++)
                    {
                        GM_NSIReferenceAttribute attribute = new GM_NSIReferenceAttribute();
                        attribute.ReferenceAttributeId   = GetValueExcel(6, i);
                        attribute.ReferenceAttributeName = GetValueExcel(7, i);
                        attribute.ReferenceAttributeType = Convertation(GetValueExcel(8, i));
                        if (Convertation(GetValueExcel(8, i)) == 4)
                        {
                            attribute.RefReferenceId = GetValueExcel(6, i);
                        }
                        listAttributes.Add(attribute);
                    }


                    //Таблица с данными
                    SplashScreenManager.Default.SetWaitFormDescription("Импорт таблицы");
                    ObservableCollection <DynamicListItem> Records = new ObservableCollection <DynamicListItem>();
                    for (int i = 9; i <= lastRow; i++)
                    {
                        DynamicListItem rowItem = new DynamicListItem();
                        for (int j = 1; j <= lastColumn; j++)
                        {
                            rowItem.ValueDictionary.Add(GetValueExcel(7, j), GetValueExcel(i, j));
                        }
                        Records.Add(rowItem);
                    }
                    SplashScreenManager.Default.SetWaitFormDescription("Настраиваю вьюху");
                    ObservableCollection <ColumnEx> Columns = new ObservableCollection <ColumnEx>();
                    for (int j = 1; j <= lastColumn; j++)
                    {
                        ColumnEx CE = new ColumnEx();
                        CE.CellSource = GetValueExcel(7, j);
                        CE.Header     = GetValueExcel(7, j);
                        CE.Type       = 0;
                        Columns.Add(CE);
                    }
                    GM_NSIReference selectedNsi = new GM_NSIReference();

                    selectedNsi.ReferenceId      = GetValueExcel(1, 2);
                    selectedNsi.ReferenceName    = GetValueExcel(2, 2);
                    selectedNsi.ReferenceGroupId = GetValueExcel(3, 2);
                    selectedNsi.UserGroupId      = GetValueExcel(4, 2);

                    mainViewModel.isExcel         = true;
                    mainViewModel.ignoreNsiUpdate = true;
                    mainViewModel.SelectedNsi     = selectedNsi;
                    mainViewModel.ReferenceAttributeCollection = listAttributes;
                    mainViewModel.Columns = Columns;
                    mainViewModel.Records = Records;
                    mainViewModel.RunExportButtonEnabled = true;
                    mainViewModel.ExportSQL = false;

                    //    view.DataContext = mainViewModel;
                }
                catch (Exception e)
                {
                    MessageBox.Show("ЧТо то пошло не так!" + e);
                }
                finally
                {
                    SplashScreenManager.CloseForm();
                    mainViewModel.ignoreNsiUpdate = false;
                    HourGlass.Enable = false;
                    workbook.Close();
                    excelApp.Quit();
                }
            }
        }
        public static void ReferenceAttributeCache_QueryAttributeInfo(object sender, NSIAttributeEventArgs e)
        {
            GM_NSIReferenceAttribute attribute = GetAttribute(e.ReferenceID, e.AttributeID);

            e.NSIAttributeInfo = new NSIAttributeInfo(attribute.RecId, attribute.ReferenceAttributeType, attribute.RefReferenceId);
        }