Exemplo n.º 1
0
        private DataRow GetEntitaFromRange(Excel.Range rng)
        {
            DefinedNames d = _categoriaNomiDefiniti
                             .Where(kv => kv.Value.Sheet == rng.Worksheet.Name)
                             .Select(kv => kv.Value)
                             .FirstOrDefault();



            DataRow o = null;

            if (d != null && d.IsDefined(rng.Row))
            {
                string nome        = d.GetNameByAddress(rng.Row, rng.Column);
                string siglaEntita = nome.Split(Simboli.UNION[0])[0];

                DataView categoriaEntita = Workbook.Repository[DataBase.TAB.CATEGORIA_ENTITA].DefaultView;
                categoriaEntita.RowFilter = "SiglaEntita = '" + siglaEntita + "' AND IdApplicazione = " + Workbook.IdApplicazione;

                if (categoriaEntita.Count > 0)
                {
                    o = categoriaEntita[0].Row;
                }
            }
            return(o);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Funzione per il salvataggio dei valori originali del foglio prima di aver salvato le modifiche di incremento.
        /// </summary>
        /// <param name="Target">Sheet.</param>
        /// <param name="tableName">Range.</param>
        /// <param name="Categoria">Range.</param>
        public static void SaveOriginValues(Excel.Range Target, string tableName, string Categoria = "")
        {
            DefinedNames definedNames = new DefinedNames(Target.Worksheet.Name, DefinedNames.InitType.SaveDB);

            DataTable dt = Workbook.Repository[tableName];

            foreach (Excel.Range r in Target)
            {
                string[] parts = definedNames.GetNameByAddress(r.Row, r.Column).Split(Simboli.UNION[0]);

                string data;
                if (parts.Length == 4)
                {
                    data = Date.GetDataFromSuffisso(parts[2], parts[3]);
                }
                else
                {
                    data = Date.GetDataFromSuffisso(parts[2], "");
                }

                if (dt.Rows.Find(new object[] { parts[0], parts[1], data }) == null)
                {
                    dt.Rows.Add(string.IsNullOrEmpty(Categoria) ? "" : Categoria, parts[0], parts[1], data, r.Value2, r.Comment == null ? "" : r.Comment.Text());
                }
            }
        }
Exemplo n.º 3
0
        private string GetInfoFromRange(Excel.Range rng)
        {
            DefinedNames d = _categoriaNomiDefiniti
                             .Where(kv => kv.Value.Sheet == rng.Worksheet.Name)
                             .Select(kv => kv.Value)
                             .FirstOrDefault();

            string o = null;

            if (d != null && d.IsDefined(rng.Row))
            {
                string nome = d.GetNameByAddress(rng.Row, rng.Column);
                //string siglaEntita = nome.Split(Simboli.UNION[0])[0];
                o = nome.Split(Simboli.UNION[0])[1];
            }
            return(o);
        }
Exemplo n.º 4
0
        public override void Range(object Sh, Excel.Range Target)
        {
            if (Workbook.CategorySheets.Contains(Target.Worksheet))
            {
                //Se la funzione scrive in altre celle, ricordarsi di disabilitare gli handler per la modifica delle celle
                //Workbook.WB.SheetChange -= Handler.StoreEdit;
                Workbook.RemoveStdStoreEdit();
                Workbook.WB.SheetChange -= this.Range;


                Excel.Worksheet ws        = Target.Worksheet;
                Excel.Worksheet wsMercato = Workbook.Sheets[Workbook.Mercato];

                bool wasProtected = wsMercato.ProtectContents;
                if (wasProtected)
                {
                    wsMercato.Unprotect(Workbook.Password);
                    ws.Unprotect(Workbook.Password);
                }

                DefinedNames definedNames        = new DefinedNames(ws.Name);
                DefinedNames definedNamesMercato = new DefinedNames(Workbook.Mercato);

                DataTable entita = Workbook.Repository[DataBase.TAB.CATEGORIA_ENTITA];

                string[] ranges = Target.Address.Split(',');

                foreach (string range in ranges)
                {
                    Range rng = new Range(range);

                    foreach (Range cell in rng.Cells)
                    {
                        string[] parts = definedNames.GetNameByAddress(cell.StartRow, cell.StartColumn).Split(Simboli.UNION[0]);

                        string siglaEntita       = parts[0];
                        string siglaInformazione = parts[1];
                        string suffissoData      = parts[2];
                        string suffissoOra       = parts[3];

                        var rif =
                            (from r in entita.AsEnumerable()
                             where r["IdApplicazione"].Equals(Workbook.IdApplicazione) && r["SiglaEntita"].Equals(siglaEntita)
                             select new { SiglaEntita = r["Gerarchia"] is DBNull ? r["SiglaEntita"] : r["Gerarchia"], Riferimento = r["Riferimento"] }).First();

                        string quarter = Regex.Match(siglaInformazione, @"Q\d").Value;
                        quarter = quarter == "" ? "Q1" : quarter;

                        Range rngMercato = new Range(definedNamesMercato.GetRowByName(rif.SiglaEntita, "UM", "T") + 2, definedNamesMercato.GetColFromName("RIF" + rif.Riferimento, "PROGRAMMA" + quarter));
                        rngMercato.StartRow += (Date.GetOraFromSuffissoOra(suffissoOra) - 1);

                        wsMercato.Range[rngMercato.ToString()].Value  = ws.Range[cell.ToString()].Value;
                        ws.Range[cell.ToString()].Interior.ColorIndex = wsMercato.Range[rngMercato.ToString()].DisplayFormat.Interior.ColorIndex;
                    }
                }

                if (wasProtected)
                {
                    wsMercato.Protect(Workbook.Password);
                    ws.Protect(Workbook.Password);
                }

                //Se la funzione scrive in altre celle, ricordarsi di riabilitare gli handler per la modifica delle celle
                //Workbook.WB.SheetChange += Handler.StoreEdit;
                Workbook.AddStdStoreEdit();
                Workbook.WB.SheetChange += this.Range;
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Funzione per il salvataggio delle modifiche apportate a ranges anche non contigui.
        /// </summary>
        /// <param name="Target">L'insieme dei ranges modificati</param>
        /// <param name="annotaModifica">Se la modifica va segnalata all'utente attraverso il commento sulla cella oppure no.</param>
        /// <param name="fromCalcolo">Flag per eseguire azioni particolari nel caso la provenienza del salvataggio sia da un calcolo.</param>
        /// <param name="tableName">La tabella in cui inserire le modifiche. Di default Tab.Modifica. Utile specificarme una diversa nel caso di esportazione XML.</param>
        public static void StoreEdit(Excel.Range Target, int annotaModifica = -1, bool fromCalcolo = false, string tableName = DataBase.TAB.MODIFICA)
        {
            if (Workbook.IdUtente != 0 && Workbook.CategorySheets.Contains(Target.Worksheet))        //non salva sulla tabella delle modifiche se l'utente non è configurato
            {
                Excel.Worksheet ws             = Target.Worksheet;
                bool            wasProtected   = ws.ProtectContents;
                bool            screenUpdating = ws.Application.ScreenUpdating;
                if (wasProtected)
                {
                    ws.Unprotect(Workbook.Password);
                }

                if (screenUpdating)
                {
                    Workbook.ScreenUpdating = false;
                }

                DefinedNames definedNames = new DefinedNames(Target.Worksheet.Name, DefinedNames.InitType.SaveDB);
                DataTable    dt           = Workbook.Repository[tableName];

                if (ws.ChartObjects().Count > 0 && !fromCalcolo)
                {
                    Sheet s = new Sheet(ws);
                    s.AggiornaGrafici();
                }

                string[] ranges = Target.Address.Split(',');
                foreach (string range in ranges)
                {
                    Range  rng       = new Range(range);
                    Range  merged    = null;
                    object mergedVal = null;
                    try
                    {   //controllo se c'è un merge nel range
                        merged = new Range(ws.Range[rng.ToString()].MergeArea.Address);
                        //salvo il valore
                        mergedVal = ws.Range[rng.ToString()].Value;
                        rng       = merged;
                    }
                    catch { }


                    foreach (Range row in rng.Rows)
                    {
                        if (definedNames.SaveDB(row.StartRow))
                        {
                            bool annota = annotaModifica == -1 ? definedNames.ToNote(row.StartRow) : annotaModifica == 1;
                            foreach (Range column in row.Columns)
                            {
                                string[] parts = definedNames.GetNameByAddress(column.StartRow, column.StartColumn).Split(Simboli.UNION[0]);

                                string data;
                                if (parts.Length == 4)
                                {
                                    data = Date.GetDataFromSuffisso(parts[2], parts[3]);
                                }
                                else
                                {
                                    data = Date.GetDataFromSuffisso(parts[2], "");
                                }

                                if (!Workbook.Application.WorksheetFunction.IsErr(ws.Range[column.ToString()]))
                                {
                                    DataRow r = dt.Rows.Find(new object[] { parts[0], parts[1], data });
                                    if (r != null)
                                    {
                                        object val = ws.Range[column.ToString()].Value ?? "";

                                        if (merged == null)
                                        {
                                            r["Valore"] = (val.Equals("-") ? "0" : val);
                                        }
                                        else
                                        {
                                            r["Valore"] = mergedVal ?? "";
                                        }
                                    }
                                    else
                                    {
                                        DataRow newRow = dt.NewRow();

                                        object val = ws.Range[column.ToString()].Value ?? "";

                                        newRow["SiglaEntita"]       = parts[0];
                                        newRow["SiglaInformazione"] = parts[1];
                                        newRow["Data"] = data;
                                        if (merged == null)
                                        {
                                            newRow["Valore"] = (val.Equals("-") ? "0" : val);
                                        }
                                        else
                                        {
                                            newRow["Valore"] = mergedVal ?? "";
                                        }
                                        newRow["AnnotaModifica"] = annota ? "1" : "0";
                                        newRow["IdApplicazione"] = Workbook.IdApplicazione;
                                        newRow["IdUtente"]       = Workbook.IdUtente;

                                        dt.Rows.Add(newRow);
                                    }

                                    if (annota)
                                    {
                                        ws.Range[column.ToString()].ClearComments();
                                        ws.Range[column.ToString()].AddComment("Valore inserito manualmente").Visible = false;
                                    }
                                }
                            }
                        }
                    }
                }

                if (wasProtected)
                {
                    ws.Protect(Workbook.Password);
                }

                if (screenUpdating)
                {
                    ws.Application.ScreenUpdating = true;
                }
            }
        }
Exemplo n.º 6
0
        public FormRampe(Excel.Range rng)
        {
            InitializeComponent();
            this.Text = Simboli.NomeApplicazione + " - Rampe";

            _ws           = (Excel.Worksheet)Workbook.ActiveSheet;
            _definedNames = new DefinedNames(_ws.Name, DefinedNames.InitType.Naming);

            string nome = _definedNames.GetNameByAddress(rng.Row, rng.Column);

            _siglaEntita  = nome.Split(Simboli.UNION[0])[0];
            _suffissoData = Regex.Match(nome, @"DATA\d+").Value;
            _oreGiorno    = Date.GetOreGiorno(_suffissoData);

            _pRif =
                (from r in Workbook.Repository[DataBase.TAB.ENTITA_PROPRIETA].AsEnumerable()
                 where r["IdApplicazione"].Equals(Workbook.IdApplicazione) &&
                 r["SiglaEntita"].Equals(_siglaEntita) &&
                 r["SiglaProprieta"].Equals("SISTEMA_COMANDI_PRIF")
                 select Double.Parse(r["Valore"].ToString())).FirstOrDefault();

            _entitaRampa           = Workbook.Repository[DataBase.TAB.ENTITA_RAMPA].DefaultView;
            _entitaRampa.RowFilter = "SiglaEntita = '" + _siglaEntita + "' AND IdApplicazione = " + Workbook.IdApplicazione;
            _sigleRampa            =
                (from DataRowView r in _entitaRampa
                 select r["SiglaRampa"]).ToList();

            int assetti = Workbook.Repository[DataBase.TAB.ENTITA_ASSETTO].AsEnumerable().Count(r => r["SiglaEntita"].Equals(_siglaEntita));

            Range profilo = _definedNames.Get(_siglaEntita, "PQNR_PROFILO", _suffissoData).Extend(colOffset: _oreGiorno);

            object[,] values = _ws.Range[profilo.ToString()].Value;
            _profiloPQNR     = values.Cast <object>().ToArray();

            _pMin = new double[_profiloPQNR.Length];
            for (int i = 0; i < _pMin.Length; i++)
            {
                _pMin[i] = double.MaxValue;
            }

            for (int i = 0; i < assetti; i++)
            {
                Range rngPmin = _definedNames.Get(_siglaEntita, "PMIN_TERNA_ASSETTO" + (i + 1), _suffissoData).Extend(colOffset: _oreGiorno);
                for (int j = 0; j < _oreGiorno; j++)
                {
                    _pMin[j] = Math.Min(_pMin[j], (double)(_ws.Range[rngPmin.Columns[j].ToString()].Value ?? 0d));
                }
            }

            if (DataBase.OpenConnection())
            {
                DataTable dtFermata = DataBase.Select(DataBase.SP.GET_ORE_FERMATA, "@SiglaEntita=" + _siglaEntita);
                if (dtFermata != null && dtFermata.Rows.Count > 0)
                {
                    _oreFermata = int.Parse(dtFermata.Rows[0]["OreFermata"].ToString());
                }
            }
            _childWidth          = panelValoriRampa.Width / _oreGiorno;
            this.Width           = tableLayoutDesRampa.Width + (_childWidth * _oreGiorno) + (this.Padding.Left);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
        }