Пример #1
0
        public static void Exporta(DataGridViewPersonalizat dGV, List <string> pListaColoaneImprimare, string pEtichetaTotal, string pFisier, bool pDeschideDupaCreare)
        {
            string fisierSalvare = pFisier;

            DataType tipCelula = DataType.String;

            if (string.IsNullOrEmpty(fisierSalvare))
            {
                fisierSalvare = CCL.UI.IHMUtile.GetCaleSalvareFisier(CCL.UI.IHMUtile.GetFormParinte(dGV), ".xls");
            }

            if (string.IsNullOrEmpty(fisierSalvare))
            {
                return;
            }

            string         idStilHeader = "idSHeader";
            WorksheetStyle stilHeader   = new WorksheetStyle(idStilHeader);

            stilHeader.Font.Bold        = true;
            stilHeader.Interior.Pattern = StyleInteriorPattern.Solid;
            stilHeader.Interior.Color   = "#c0c0c0";

            string         idStilTotal = "idSTotal";
            WorksheetStyle stilTotal   = new WorksheetStyle(idStilTotal);

            stilTotal.Font.Bold        = true;
            stilTotal.Interior.Pattern = StyleInteriorPattern.Solid;
            stilTotal.Interior.Color   = "#80ff80";

            string         idStilNormal = "idSNormal";
            WorksheetStyle stilNormal   = new WorksheetStyle(idStilNormal);

            Workbook book = new Workbook();

            book.Styles.Add(stilHeader);
            book.Styles.Add(stilNormal);
            book.Styles.Add(stilTotal);

            Worksheet sheet = book.Worksheets.Add("iDava");

            List <string> listaNumeColoaneExportabile       = new List <string>();
            Dictionary <string, DataType> dictColoaneTipuri = new Dictionary <string, DataType>();
            string       valoareCelula = string.Empty;
            WorksheetRow rowHeader     = sheet.Table.Rows.Add();

            foreach (string numeColoana in pListaColoaneImprimare)
            {
                if (dGV.Columns[numeColoana].Visible && !dGV.SeIgnoraColoanaLaImprimare(numeColoana))
                {
                    listaNumeColoaneExportabile.Add(numeColoana); //pentru a exporta datele coloanelor pretabile pentru export
                    dictColoaneTipuri.Add(numeColoana, getDataType(dGV.Columns[numeColoana]));

                    valoareCelula = CUtil.InlocuiesteDiacritice(dGV.Columns[numeColoana].HeaderText);
                    rowHeader.Cells.Add(valoareCelula, dictColoaneTipuri[numeColoana], idStilHeader);
                }
            }

            List <DataGridViewRow> listaLiniiSelectate = dGV.GetListaLiniiSelectate();
            bool   existaValoareNumerica = false;
            double totalValoareNumerica  = 0;

            foreach (DataGridViewRow linie in listaLiniiSelectate)
            {
                if (linie.Tag == null)
                {
                    continue;                    //in Tag-ul tuturor liniilor din aplicatie salvam obiectul corespunzator liniei respective; lipsa acestuia implica ignorarea liniei
                }
                WorksheetRow rowValoare = sheet.Table.Rows.Add();
                foreach (string numeColoane in pListaColoaneImprimare)
                {
                    if (listaNumeColoaneExportabile.Contains(numeColoane))
                    {
                        if (linie.Cells[numeColoane].Tag != null && linie.Cells[numeColoane].Tag is String)
                        {
                            valoareCelula = CUtil.ConvertObjectToString(linie.Cells[numeColoane].Tag, true);
                        }
                        else
                        {
                            valoareCelula = CUtil.ConvertObjectToString(linie.Cells[numeColoane].EditedFormattedValue, true);
                        }

                        if (dGV.esteColoanaNumericaExport(numeColoane))
                        {
                            existaValoareNumerica = true;
                            totalValoareNumerica += CUtil.GetAsDouble(valoareCelula);
                            rowValoare.Cells.Add(valoareCelula, dictColoaneTipuri[numeColoane], idStilNormal);
                        }
                        else
                        {
                            rowValoare.Cells.Add(valoareCelula, dictColoaneTipuri[numeColoane], idStilNormal);
                        }
                    }
                }
            }

            if (existaValoareNumerica)
            {
                WorksheetRow rowValoare  = sheet.Table.Rows.Add();
                int          indexCelula = 0;
                foreach (string numeColoane in pListaColoaneImprimare)
                {
                    if (listaNumeColoaneExportabile.Contains(numeColoane))
                    {
                        if (dGV.esteColoanaNumericaExport(numeColoane))
                        {
                            rowValoare.Cells.Add(Convert.ToString(Math.Round(totalValoareNumerica, 2)), dictColoaneTipuri[numeColoane], idStilTotal);
                        }
                        else
                        {
                            if (indexCelula == 0)
                            {
                                rowValoare.Cells.Add(pEtichetaTotal, tipCelula, idStilTotal);
                            }
                            else
                            {
                                rowValoare.Cells.Add(string.Empty, tipCelula, idStilTotal);
                            }

                            indexCelula += 1;
                        }
                    }
                }
            }

            if (!string.IsNullOrEmpty(fisierSalvare))
            {
                book.Save(fisierSalvare);

                if (pDeschideDupaCreare)
                {
                    Process.Start(fisierSalvare);
                }
            }
        }