miércoles, 22 de febrero de 2017

Easy WPF Excel Copy/Paste

I have developed an easy way to copy/paste data between WPF application and Excel. This code is compatibility for the controls inherit from System.Windows.Controls.ItemsControls these are the controls with the ItemsSource property. Controls of this type are DataGrid, ListBox, ListView, etc.

Is OpendSource and its code is in GitHub.

Its use is very easy, we will install the utility by nuget and we will setup any properties of our control in the XAML code. 

This is how it works:


The utility has been tested in WPF applications, and we don’t know if run in (Silverlight, WP or WUP) apps.
It is necessary 4.5.2 NET Framework version or later.


We will install from nuget:


After installation has been completed, we will setup the WPF window we adding the next import in XAML:


We will Add the following properties in the ItemsControl in XAML:

<DataGrid x:Name="dataGrid" 
          ml:ExcelActions.EnabledCopyExcel ="True"  <!- enabled copy/copiall excel  -->
          ml:ExcelActions.EnabledPasteExcel="True"  <!- enabled paste        excel  -->

This simple code enabled the copy/paste data between DataGrid control and Excel.

In terms of its simple form, we will make the actions with the keyboard:

  • Ctrol + A à CopyAll            à Copy all DataGrid Rows
  • Ctrol + C à Copy Selected   à Copy DataGrid selected Rows.
  • Ctrol + P à Paste                  à Paste data in DataGrid.

Other AttachProperties

We can add functionality with the next 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"


Enabled or disabled showed the context menu in the ItemsControl.


True is its default value.


Enabled or disabled copy control headers.


True is its default value.


Show or hide the color flash mark in the control that occurs when we copy or we paste in the control.


True is its default value.


Setup the color of flash of Copy Paste Action (is only visible if the property PaintFlash is true).


Bruhes.Gray is its default value.


This property specify whether show error message if an errors occurs. For example if the data copied isn’t compatibility with the datasource of control.


True is its default value.

In moving:


When we copy many rows from excel, if any row isn’t correct and if an error occur, this property specifies if paste the correct rows or don’t paste any row.

  • True   à Paste correct rows
  • False à Don’t paste nohing.

True is a default value.


It is necessary that the ItemsSource property of ItemsControl is an ObservableCollection type, because this type refresh the items correctly and inform the removes and add changes.


In this version, in the paste action, only insert data, doesn’t update the rows, or paste incomplete types.

If someone wants asks me and I develop this part.