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); }
/// <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()); } } }
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); }
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; } }
/// <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; } } }
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; }