none
Pasar Datos de un datagridview a excel RRS feed

  • Pregunta

  • Hola a todos nuevamente solicitando de su apoyo en esta oportunidad lo que necesito saber es lo siguiente

    ¿como se podria enviar los datos de un datagrid a un formato de excel ya diseñado

    por ejemplo tengo una libreta de notas, el formato ya esta listo para que  se descarguen

    he logrado crear un archivo nuevo con las notas pero no es el formato predefinido que se necesita como puedo hacer que la maquina reconozca el excel correcto y solo abra el archivo agregue las notas y lo guarde?

    se puede hacer eso?

    espero su pronta respuesta gracias

     

    jueves, 26 de enero de 2012 16:15

Todas las respuestas

  • Hola Aprendiz saludes,

    primero que nada como estas obteniendo los datos del datagrid? pues puedes hacer una clase que te obtenga los datos necesarios a insertar en tu archivo excel y luego lo metes en un ObservableCollection y luego haces referencia a una dll de Microsoft.interoperabilidad.excel y haces los datos aca te dejo un ejemplo peque;o

     public class AuxItem
            {
                 public int Number { get; set; }
                public DateTime Date { get; set; }
                public int Reference { get; set; }
                public string Concept { get; set; }
                public decimal Debit { get; set; }
                public decimal Credit { get; set; }
                public decimal Balance { get; set; }

          }

    luego obtengo los datos que se agregaron al datagrid

    public List<AuxItem> Datos=new List<AuxItem>(); supongo que los datos q enlazaste a tu datagrid lo puedes reutilizar pues esta misma es la que vas a ocupar para mostrar estos datos en la exportacion

    List<ReportsHelper.AuxItem> objectsList = AccountSystem.ReportsHelper.Datos;
                //una vez optenido los opjetos hacer una reduccion porq hay elementos repetidos

                DateTime date = AccountSystem.ReportsHelper.mo;
                DateTime dates = AccountSystem.ReportsHelper.endtime;
                bool isDolar = AccountSystem.ReportsHelper.ismoney;
                string coin = null;
                if (isDolar)
                    coin = "Expresado en Dólares";
                else
                    coin = "Expresado en Córdobas";
                var excelApp = new Excel.Application();
                // Make the object visible.
                excelApp.Visible = true;
                excelApp.Workbooks.Add();
                Excel._Worksheet workSheet = excelApp.ActiveSheet;
                workSheet.StandardWidth = 25;
                workSheet.Cells[1, "B"] = "ESESA";
                workSheet.Cells[2, "B"] = "Auxiliar de Cuenta";
                workSheet.Cells[3, "B"] = ReportsHelper.titletexts[0];
                workSheet.Cells[4, "B"] = ReportsHelper.datetexts[0] + "" + date.ToString("dd MMMM") + " de " + date.ToString("yyyy");// +"," + dates.ToString("dd MMMM") + " de " + dates.ToString("yyyy");
                workSheet.Cells[5, "A"] = "Journal No";
                workSheet.Cells[5, "B"] = "Fecha";
                workSheet.Cells[5, "C"] = "Referencia";
                workSheet.Cells[5, "D"] = "Conceptos";
                workSheet.Cells[5, "E"] = "Debitos";
                workSheet.Cells[5, "F"] = "Creditos";
                workSheet.Cells[5, "G"] = "Saldos";
                var row = 6;
                foreach (var item in objectsList)
                {
                    workSheet.Cells[row, "A"] = item.Number;
                    workSheet.Cells[row, "B"] = item.Date.ToShortDateString();
                    workSheet.Cells[row, "C"] = item.Reference;
                    workSheet.Cells[row, "D"] = item.Concept;
                    workSheet.Cells[row, "E"] = item.Debit;
                    workSheet.Cells[row, "F"] = item.Credit;
                    workSheet.Cells[row, "G"] = item.Balance;
                    row++;
                }
            }
      

    lunes, 20 de febrero de 2012 6:28
  • victor_23

    Yo ya he bajado los datos en un archivo nuevo lo que necesito es saber como bajar los datos del datagridview  a un excel con un formato prederminado
    que yo busque desde una ruta lo encuentre y alli descargue los datos.

    lunes, 20 de febrero de 2012 19:47
  • Hola

    Create una clase con el orden que queres o que deberían tener las columnas de Excel:

        
    Public Class Dato
    
            Implements INotifyPropertyChanged
    
            Private _datoColumna1 As String
            Private _datoColumna2 As String
    
            Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
    
            Public Property DatoColumna1 As String
                Get
                    Return _datoColumna1
                End Get
                Set(value As String)
                    _datoColumna1 = value
                    OnPropertyChanged("DatoColumna1")
                End Set
            End Property
    
            Public Property DatoColumna2 As String
                Get
                    Return _datoColumna2
                End Get
                Set(value As String)
                    _datoColumna2 = value
                    OnPropertyChanged("DatoColumna2")
                End Set
            End Property
    
    End Class

    Dentro de la clase crea una lista:

        Public Class ExtensionesIP
            Inherits List(Of ExtensionIP)
        End Class
    


    Creas un datagrid que le asignas los datos por binding, modo de selección extendido, excluir los nombres de columnas en la copia  y que auto genere las columnas:

    <Grid>
                        <toolkit:DataGrid ItemsSource="{Binding}" Grid.Row="1" Name="dgDatos" SelectionMode="Extended" SelectionUnit="FullRow" ClipboardCopyMode="ExcludeHeader" AutoGenerateColumns="True" IsReadOnly="True" Margin="5,5,5,5">
                        </toolkit:DataGrid>
                    </Grid>
    

    A ese datagrid (llamado en el ej. dgDatos) le asignas los datos que lees desde la base de datos con la clase que creaste.

    Cuando tenes el dataset con la información de la base de datos haces esto para llenar la clase (por ahí hay otra forma más simple, pero a mí me funciona):

    Dim _datos as New Datos()
    
    For indice=0 to DataSet.Tables("Alguna").Rows.Count -1
    
    Dim _dat as New Dato()
    
    _dat.DatoColumna1=DataSet.Tables("Alguna).Row(indice)("Campo1")
    _dat.DatoColumna2=DataSet.Tables("Alguna).Row(indice)("Campo2")
    
    _datos.Add(_dat)
    
    Next indice
    
    dgDatos.ItemsSource=_datos
    
    

    Ahí estas tomando cada dato de la base y lo estás "guardando" en la clase que creaste con el orden que deberías tener. Luego esa clase se la asignas al ItemsSource del Datagrid que creaste, eso te debería de mostrar los datos en formato correcto.

    Ahora abrimos el Excel y vamos a copiar los datos desde el Datagrid ordenado y pegarlos con el Clipboard:

                Dim _excelApplication As New Microsoft.Office.Interop.Excel.Application()
                Dim wbs As Microsoft.Office.Interop.Excel.Workbooks = _excelApplication.Workbooks
                Dim wb As Microsoft.Office.Interop.Excel.Workbook
    
    _excelApplication.Visible = False
                wb = wbs.Open(directorio & _archivoBase & ".xlsm")
    
    Dim wsHoja1 As Microsoft.Office.Interop.Excel._Worksheet = CType(shs.Item(1), Microsoft.Office.Interop.Excel._Worksheet)
    
    dgDatos.SelectAllCells()
    ApplicationCommands.Copy.Execute(Nothing, dgDatos)
    
    wsHoja1.Activate()
    
    _excelApplication.Worksheets("Hoja1").Cells(1, 1).Select()
    
    wsHoja1.Paste()
    
    wb.Save()
    
    My.Computer.Clipboard.Clear()

    Espero te sirva, cualquier cosa consultame.

    Saludos.


    Jorge Lorenzo Developer Freelance .NET

    martes, 28 de febrero de 2012 19:29