示例#1
0
        /// <summary>Función para Insertar la Explicación.
        /// <para>Inserta la Explicación en el archivo de Excel. Referencia: <see cref="InsertaExplicacion(Excel.Worksheet, Excel.Range, string)"/> se agrega la referencia ExcelAddIn.Generales para invocarla.</para>
        /// <seealso cref="InsertaExplicacion(Excel.Worksheet, Excel.Range, string)"/>
        /// </summary>
        public static void InsertaExplicacion(Excel.Worksheet xlSht, Excel.Range currentCell, string Explicacion)
        {
            var rangej = xlSht.get_Range(string.Format("{0}:{0}", currentCell.Row + 1, Type.Missing));

            rangej.Select();

            rangej.Insert(Excel.XlInsertShiftDirection.xlShiftDown, Excel.XlInsertFormatOrigin.xlFormatFromLeftOrAbove);
            xlSht.Cells[currentCell.Row + 1, 1] = " EXPLICACION ";
            xlSht.Cells[currentCell.Row + 1, 2] = Explicacion;

            ((Excel.Range)xlSht.Cells[currentCell.Row + 1, 2]).NumberFormat = "General";
            ((Excel.Range)xlSht.Cells[currentCell.Row + 1, 2]).WrapText     = true;

            currentCell.Select();
            currentCell            = xlSht.Range[xlSht.Cells[currentCell.Row + 1, 1], xlSht.Cells[currentCell.Row + 1, 2]];
            currentCell.Font.Color = System.Drawing.Color.FromArgb(0, 0, 255);
            currentCell.Locked     = true;

            int iTotalColumns = xlSht.UsedRange.Columns.Count;
            int k             = 3;

            while (k <= iTotalColumns)
            {
                currentCell        = xlSht.Range[xlSht.Cells[currentCell.Row, k], xlSht.Cells[currentCell.Row, k]];
                currentCell.Locked = true;
                k++;
            }
            //ref
            string           NombreHoja = xlSht.Name.ToUpper().Replace(" ", "");
            List <oSubtotal> ColumnasST = Generales.DameColumnasST(NombreHoja);
            int _Registro = 1;

            Excel.Workbook wb           = Globals.ThisAddIn.Application.ActiveWorkbook;
            string         _NameFile    = wb.Name;
            int            NroPrincipal = currentCell.Row + 1;
            int            row          = DameRangoPrincipal(NroPrincipal, xlSht);

            foreach (oSubtotal ST in ColumnasST)
            {
                if (_Registro == 1)
                {
                    _Registro += 1;
                    Generales.ActualizarReferencia(_NameFile, xlSht.Name.ToUpper(), ST.Columna + row.ToString(), 0, ST.Columna, row.ToString(), 0, "A");
                }
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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);
            }
        }