private void btnEliminaeExplicacion_Click(object sender, RibbonControlEventArgs e) { Excel.Range currentCell = (Excel.Range)Globals.ThisAddIn.Application.ActiveCell; int NroRow = currentCell.Row; Excel.Worksheet NewActiveWorksheet = Globals.ThisAddIn.Application.ActiveSheet; currentCell = (Excel.Range)NewActiveWorksheet.Cells[NroRow, 1]; string indice = currentCell.Value2; if (indice.ToUpper().Trim() == "EXPLICACION") { NewActiveWorksheet.Unprotect(ExcelAddIn.Access.Configuration.PwsExcel); currentCell.EntireRow.Delete(Excel.XlDeleteShiftDirection.xlShiftUp); //ref string NombreHoja = NewActiveWorksheet.Name.ToUpper().Replace(" ", ""); List <oSubtotal> ColumnasST = Generales.DameColumnasST(NombreHoja); int _Registro = 1; Excel.Workbook wb = Globals.ThisAddIn.Application.ActiveWorkbook; string _NameFile = wb.Name; int row = Generales.DameRangoPrincipal(NroRow, NewActiveWorksheet); foreach (oSubtotal ST in ColumnasST) { if (_Registro == 1) { _Registro += 1; Generales.ActualizarReferencia(_NameFile, NewActiveWorksheet.Name.ToUpper(), ST.Columna + row.ToString(), 0, ST.Columna, row.ToString(), 1, "E"); } } //ref NewActiveWorksheet.Protect(ExcelAddIn.Access.Configuration.PwsExcel, true, true, false, true, true, true, true, false, false, false, false, false, false, true, false); } else { MessageBox.Show("La fila seleccionada no es una explicación ", "Eliminar Explicación", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
private void btnEliminarIndice_Click(object sender, RibbonControlEventArgs e) { Excel.Workbook wb = Globals.ThisAddIn.Application.ActiveWorkbook; Worksheet sheetControl = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet); Excel.Worksheet sheet = Globals.ThisAddIn.Application.ActiveSheet; string IndiceActivo = ""; string IndiceSiguiente = ""; string _NameFile = wb.Name; bool Eliminar = false; List <string> NombreRangos = new List <string>(); List <string> NombreRangosDEL = new List <string>(); List <int> FilaPadre = new List <int>(); int FilapadreAux = 0; long dif = 0; string NamedRange = ""; bool tienedif = false; Excel.Range objRange = null; Excel.Range currentCell = (Excel.Range)Globals.ThisAddIn.Application.Selection; // filas seleccionadas try { foreach (Excel.Range cell in currentCell.Cells) { try { foreach (Excel.Name item1 in wb.Names) { // comparo la direccion de la celda con la del nombre del rango if (item1.Name.Substring(0, 3) == "IA_") { if (item1.RefersToRange.Cells.get_Address() == cell.Address) { NamedRange = item1.Name; break; } } } FilapadreAux = cell.Row; if (!FilaPadre.Contains(FilapadreAux)) { FilaPadre.Add(FilapadreAux); } objRange = (Excel.Range)sheet.Cells[cell.Row, 1]; IndiceActivo = objRange.Value2; if (IndiceActivo.ToUpper().Trim() == "EXPLICACION") { MessageBox.Show("No es posible eliminar el índice EXPLICACION.", "Eliminar índice", MessageBoxButtons.OK, MessageBoxIcon.Warning); Eliminar = false; break; } if ((NamedRange != "IA_" + IndiceActivo) || (NamedRange == "")) { MessageBox.Show("No es posible eliminar un índice de formato guía", "Eliminar índice", MessageBoxButtons.OK, MessageBoxIcon.Warning); Eliminar = false; break; } else { Eliminar = true; NombreRangosDEL.Add("IA_" + IndiceActivo); } } catch (Exception ex) { //MessageBox.Show(ex.Message); } } if (Eliminar) { sheet.Unprotect(ExcelAddIn.Access.Configuration.PwsExcel); currentCell = (Excel.Range)Globals.ThisAddIn.Application.Selection; int CantRowDelete = currentCell.Cells.Rows.Count; objRange = (Excel.Range)sheet.Cells[currentCell.Cells.Row + 1, 1]; IndiceSiguiente = objRange.Value2; if (IndiceSiguiente != null) { if (IndiceSiguiente.ToUpper().Trim() == "EXPLICACION") { objRange.EntireRow.Delete(Excel.XlDeleteShiftDirection.xlShiftUp); CantRowDelete += 1; } } currentCell.EntireRow.Delete(Excel.XlDeleteShiftDirection.xlShiftUp); NombreRangosDEL.Sort(); string NM = NombreRangosDEL.FirstOrDefault(); sheetControl.Controls.Remove(NM); foreach (Excel.Name item2 in wb.Names) { if (item2.Name.Substring(0, 3) == "IA_") { NombreRangos.Add(item2.Name); } } string[] split = NM.Split('_'); NM = split[1]; // foreach (string Nm in NombreRangosDEL) long NamedRng = Convert.ToInt64(NM) + 100; string IndiceSig = "0" + Convert.ToString(NamedRng); string IndiceAnt = ""; while (NombreRangos.Contains("IA_" + IndiceSig)) { sheetControl.Controls.Remove("IA_" + IndiceSig); NamedRng = Convert.ToInt64(IndiceSig) + 100; IndiceSig = "0" + Convert.ToString(NamedRng); } FilaPadre.Sort(); int row = FilaPadre.FirstOrDefault(); objRange = (Excel.Range)sheet.Cells[row, 1]; if (objRange.get_Value(Type.Missing) != null) { IndiceActivo = objRange.get_Value(Type.Missing).ToString(); } objRange = (Excel.Range)sheet.Cells[row - 1, 1]; if (objRange.get_Value(Type.Missing) != null) { IndiceAnt = objRange.get_Value(Type.Missing).ToString(); } //me salto la explciacion if (IndiceAnt.Trim() == "EXPLICACION") { objRange = (Excel.Range)sheet.Cells[row - 2, 1]; if (objRange.get_Value(Type.Missing) != null) { IndiceAnt = objRange.get_Value(Type.Missing).ToString(); } } while (NombreRangos.Contains("IA_" + IndiceActivo)) { tienedif = false; dif = Convert.ToInt64(IndiceActivo) - Convert.ToInt64(IndiceAnt); while (dif != 100) { IndiceAnt = "0" + Convert.ToString(Convert.ToInt64(IndiceActivo) - 100); IndiceActivo = IndiceAnt; dif = dif - 100; tienedif = true; } objRange = (Excel.Range)sheet.Cells[row, 1]; objRange.Value2 = IndiceAnt; if (tienedif) { Generales.AddNamedRange(row, 1, "IA_" + Convert.ToString(IndiceAnt)); } //busco el siguiente activo row++; objRange = (Excel.Range)sheet.Cells[row, 1]; if (objRange.get_Value(Type.Missing) != null) { IndiceActivo = objRange.get_Value(Type.Missing).ToString(); } else { break; } } row = Generales.DameRangoPrincipal(FilaPadre.FirstOrDefault(), sheet);// busco el numero de fila OTRO para agregarle luego la sumatoria de los indices nuevos Excel.Range objRangeJ = ((Excel.Range)sheet.Cells[FilaPadre[0], 1]); objRangeJ.Select(); try { // limpio si hay error en la formula Excel.Range objRangeI = ((Excel.Range)sheet.Cells[row, 1]); //.SpecialCells(Excel.XlCellType.xlCellTypeFormulas, Excel.XlSpecialCellsValue.xlErrors);//obten las celdas con errores string NombreHoja = sheet.Name.ToUpper().Replace(" ", ""); List <oSubtotal> ColumnasST = Generales.DameColumnasST(NombreHoja); int _Registro = 1; foreach (oSubtotal ST in ColumnasST) { objRangeI = sheet.get_Range(ST.Columna + row.ToString(), ST.Columna + row.ToString()); //objRangeI.Clear(); if (_Registro == 1) { _Registro += 1; Generales.ActualizarReferencia(_NameFile, sheet.Name.ToUpper(), ST.Columna + row.ToString(), NombreRangos.Count, ST.Columna, row.ToString(), CantRowDelete, "E"); } } //wb.Save(); } catch (Exception ex) { } sheet.Protect(ExcelAddIn.Access.Configuration.PwsExcel, true, true, false, true, true, true, true, false, false, false, false, false, false, true, false); } } catch (Exception ex) { // MessageBox.Show(ex.Message); } }