He desarrollado una forma sencilla de copy y pegar
datos entre Excel y una aplicación WPF. Este código es compatible con
controles que heredan de System.Windows.Control.ItemsControls,
ósea que poseen la propiedad ItemsSource.
Algunos de estos controles son DataGrid, ListBox, ListView, etc.
Es de código abierto y su código está en GitHub.
Su uso es extremadamente sencillo y se puede instalar fácilmente
desde nuget.
Una vez instalado simplemente configuraremos un import en el XAML y unas
AttachProperties
en el control en cuestión.
Así trabaja:
Prerequisitos
Esta utilidad ha sido testeada en aplicaciones WPF, no se ha probado en aplicaciones (Silverlight, WP or WUP).
Es compatible con la versión 4.5.2 NET Framework
o posterior.
Instalación
Instalaremos
desde nuget:
Configuración
Después de que la instalación haya sido completada
comonfiguraremos nuestra Window WPF
, añadiremos el siguiente import
al código XAML:
xmlns:ml="clr-namespace:MoralesLarios.Utilities.Excel;assembly=MoralesLarios.Utilities"
Añadiremos las siguientes propiedades al ItemsControl en XAML:
<DataGrid x:Name="dataGrid" ml:ExcelActions.EnabledCopyExcel ="True" <!—- enabled copy/copiall excel --> ml:ExcelActions.EnabledPasteExcel="True" <!—- enabled paste excel --> />
Este simple código habilita el copy / paste entre Excel
y un objeto DataGrid.
Al realizar una configuración tan simple, será necesario realizar
las acciones de copy/paste mediante combinaciones de teclado:
- Ctrol + A à CopyAll à Copia todos los registros
- Ctrol + C à Copy Selected à Copia los registros seleccionados.
- Ctrol + P à Paste à Pega los datos en el ItemsSource.
Otras AttachProperties
Iremos añadiendo funcionalidad con otras AttachProperties:
ml:ExcelActions.EnabledCopyExcel ="True" ml:ExcelActions.EnabledPasteExcel ="True" ml:ExcelActions.ContainsHeader ="False" ml:ExcelActions.CreateContextMenu ="True" ml:ExcelActions.CancelWithErrors ="False" ml:ExcelActions.PaintFlash ="True" ml:ExcelActions.ColorFlash ="Yellow" ml:ExcelActions.ShowErrorMessages ="True"
CreateContextMenu
Habilita o deshabilita el menu contextual en el objeto ItemsControl.
ml:ExcelActions.CreateContextMenu="True"
True
es su valor por defecto.
ContainsHeader
Habilita o deshabilita el copiado de las cabeceras.
ml:ExcelActions.ContainsHeader="False"
True
es su valor por defecto.
PaintFlash
Muestra u oculta el destello
de color que ocurre en el control cuando se realiza una operación de copiado o
pegado.
ml:ExcelActions.PaintFlash="True"
True
es el valor por defecto.
ColorFlash
Configura el color del destello de la acción de copy/paste
(es solo visible cuando la propiedad PaintFlash está
configurada a True).
ml:ExcelActions.ColorFlash="Yellow"
Bruhes.Gray
es su valor por defecto.
ShowErrorMessages
Esta propiedad especifica si se muestra o no un mensaje de error, cuando ocurre alguna excepción en la creación de alguna columna en la acción de paste. Normalmente esto ocurre, cuando los datos copiados de Excel, no son suficientes, o no son compatibles con el tipo de datos del ItemsSource del ItemsControl.
ml:ExcelActions.ShowErrorMessages="True"
True
es su valor por defecto.
En movimiento:
CancelWithErrors
Cuando copiamos varias filas de un Excel y alguna de estas no produce un error, esta propiedad especifica
si se pegan los registros válidos, o por el contrario no se pega ningún dato.
- True à Pega los registros correctos
- False à No pega nada.
- True es el valor por defecto.
Recomendaciones
Para un correcto funcionamiento de pegado, es necesario que
el tipo de datos de la propiedad ItemsSource
del ItemsControl sea ObservableCollection, ya que es la
forma de que en la acción de pegado los registros se refresquen sin
contratiempos.
Limitaciones
Esta versión solo da soporte a la acción de inserción en el
pegado de datos, por lo que no actualiza registros, o completa parte de filas
del control WPF.
Si tiene éxito y alguien lo necesita, que me lo pida y
actualizaré la librería con esta funcionalidad.
No hay comentarios :
Publicar un comentario