Exemplo n.º 1
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;
            }
        }