none
Problemas al generar Excel C# RRS feed

  • Pregunta

  • Buenas. Tengo un problema al generar un Excel desde C# y es que no me abre el SaveFileDialog

    Este es el código

    private void CargarTabla(int parDesde, int parHasta, DataGridView grilla)
            {
    
                int x = 0;
    
                String[,] myArr = new string[(parHasta - parDesde)+2, 10];
                Tamaño = parHasta - parDesde;
                progressBar1.Maximum = Tamaño+1;
    
                myArr[0, 0] = "NRO.CERTIF";
                myArr[0, 1] = "FECHA EMISION";
                myArr[0, 2] = "NOMBRE CLIENTE";
                myArr[0, 3] = "DIRECCION";
    
                SqlConnection SqlConexion = new SqlConnection();            
    
                try
                {
                    SqlConexion.ConnectionString = "Data Source=MiUsuario\\SQLEXPRESS;Initial Catalog=BaseDatos;Integrated Security=True;";
                    SqlConexion.Open();
    
                    while(parDesde <= parHasta)
                    {
    
                        SqlCommand SqlComando = new SqlCommand();
                        SqlComando.Connection = SqlConexion;
                        SqlComando.CommandText = "SELECT [numCertificado] as 'NRO.CERTIF', CONVERT(char(10), fechaTratamiento, 103) as 'FECHA EMISION', (SELECT C.[nombre] FROM [Clientes] C WHERE C.idCliente = T.idCliente) AS 'NOMBRE CLIENTE', (SELECT C.[direccion] FROM [Clientes] C WHERE C.idCliente = T.idCliente) AS 'DIRECCION' FROM Tratamientos T WHERE [numCertificado] = @ID ORDER BY [numCertificado]";
                        SqlComando.CommandType = CommandType.Text;
    
                        SqlParameter ValorDesde = new SqlParameter();
                        ValorDesde.ParameterName = "@ID";
                        ValorDesde.SqlDbType = SqlDbType.Int;
                        ValorDesde.Value = parDesde;
                        SqlComando.Parameters.Add(ValorDesde);
    
                        SqlDataReader reader = SqlComando.ExecuteReader();
    
                        if (reader.Read())
                        {
    
                            myArr[x+1, 0] = Convert.ToString(parDesde);
                            myArr[x+1, 1] = Convert.ToString(reader["FECHA EMISION"]);
                            myArr[x+1, 2] = Convert.ToString(reader["NOMBRE CLIENTE"]);
                            myArr[x+1, 3] = Convert.ToString(reader["DIRECCION"]);
                            myArr[x+1, 4] = Convert.ToString("HIDRAMETILNONA / CIPERMETRINA");
                            myArr[x+1, 5] = Convert.ToString("2,15 / 2");
                            myArr[x+1, 6] = Convert.ToString("AMONIO CUATERNARIO");
                            myArr[x+1, 7] = Convert.ToString("1");
                            myArr[x+1, 8] = Convert.ToString("BRODIFACUOM");
                            myArr[x+1, 9] = Convert.ToString("0,005");
    
                        }
                        else
                        {
                            
                            myArr[x + 1, 0] = Convert.ToString(parDesde);
                            myArr[x + 1, 1] = Convert.ToString("ANULADO");
                            myArr[x + 1, 2] = Convert.ToString("ANULADO");
                            myArr[x + 1, 3] = Convert.ToString("ANULADO");
                            myArr[x + 1, 4] = Convert.ToString("");
                            myArr[x + 1, 5] = Convert.ToString("");
                            myArr[x + 1, 6] = Convert.ToString("");
                            myArr[x + 1, 7] = Convert.ToString("");
                            myArr[x + 1, 8] = Convert.ToString("");
                            myArr[x + 1, 9] = Convert.ToString("");
    
                        }
    
                        parDesde = parDesde + 1;
    
                        x = x + 1;
    
                        backgroundWorker1.ReportProgress(x);
    
                        reader.Close();
                    }
    
                    Excel.Application xlApp = new Excel.Application();
                    //xlApp.Visible = true;
                    Excel.Workbook wb = xlApp.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
                    Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets.get_Item(1);
    
                       Excel.Range rng = ws.Cells.get_Resize(myArr.GetLength(0), myArr.GetLength(1));;
    
                    rng.Value2 = myArr;
    
                    ws.Rows.RowHeight = 21;
    
                    System.Drawing.Color colorCabecera = System.Drawing.Color.FromArgb(160, 160, 160);
    
                    ws.Range["A1:J1"].Interior.Color = colorCabecera;
    
                    ws.get_Range("A1", "ZZ1048576").Font.Name = "Calibri";
                    ws.get_Range("A1", "ZZ1048576").Font.Size = 8;
    
                    // Alto de cada fila
                    ws.Rows.RowHeight = 25;
    
                    // Alineacion vertical del texto "Centrada"
                    ws.get_Range("A1", "ZZ1048576").VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;
    
                    // Ajustamos todos los textos a las celdas
                    ws.get_Range("A1", "ZZ1048576").WrapText = true;
    
                    ws.get_Range("A1", "A1").ColumnWidth = 4.20;
                    ws.get_Range("B1", "B1").ColumnWidth = 8;
                    ws.get_Range("C1", "C1").ColumnWidth = 17.71;
                    ws.get_Range("D1", "D1").ColumnWidth = 17.71;
                    ws.get_Range("E1", "E1").ColumnWidth = 13.43;
                    ws.get_Range("F1", "F1").ColumnWidth = 3;
                    ws.get_Range("G1", "G1").ColumnWidth = 9.14;
                    ws.get_Range("H1", "H1").ColumnWidth = 2;
                    ws.get_Range("I1", "I1").ColumnWidth = 10.86;
                    ws.get_Range("J1", "J1").ColumnWidth = 4;
    
                    SaveFileDialog saveDialog = new SaveFileDialog();
                    saveDialog.FileName = rutaDescarga();
                    ws.SaveAs(saveDialog.FileName);
    
                    xlApp.Quit();
    
                    foreach (Process proc in Process.GetProcessesByName("EXCEL"))
                    {
                        proc.Kill();
                    }
    
                }
    
                catch (Exception ex)
                {
                    TablaDatos = null;
                    throw new Exception(ex.Message);
                }
    
            }

    Y esta es la función RutaDescarga

    private String rutaDescarga()
            {
                String ruta = "";
                SaveFileDialog saveFile = new SaveFileDialog();
                saveFile.Filter = "Archivo Excel (*.xlsx)|*.xlsx";
                saveFile.Title = "Guardar Como";
    
                if (saveFile.ShowDialog() == DialogResult.OK)//El problema es acña, no se ejecuta el ShowDialog
                {
                    ruta = saveFile.FileName;
                }
                saveFile.Dispose();
                return ruta;
            }

    Espero sus respuestas, saludos :D


    Skull

    lunes, 30 de diciembre de 2019 21:47

Todas las respuestas