Introduction
I have developed an easy way to copy/paste data between WPF application and Excel. This code's 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:
Prerequisites
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.
Installation
We will install from nuget:
SetUp
After installation has been completed, we will setup the WPF window. We will add the next import in XAML:
xmlns:ml="clr-namespace:MoralesLarios.Utilities.Excel;assembly=MoralesLarios.Utilities"
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:
- Ctrl + A -> CopyAll -> Copy all
DataGrid
Rows - Ctrl + C -> Copy Selected -> Copy
DataGrid
selected Rows. - Ctrl + 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"
CreateContextMenu
Enabled or disabled showed the context menu in the ItemsControl
.
ml:ExcelActions.CreateContextMenu="True"
True
is its default value.
ContainsHeader
Enabled or disabled copy control headers.
ml:ExcelActions.ContainsHeader="False"
True
is its default value.
PaintFlash
Show or hide the color flash mark in the control that occurs when we copy or paste in the control.
ml:ExcelActions.PaintFlash="True"
ColorFlash
Setup the color of flash of Copy Paste Action (is only visible if the property PaintFlash
is true
).
ml:ExcelActions.ColorFlash="Yellow"
Bruhes.Gray
is its default value.
ShowErrorMessages
This property specifies whether show error message if an errors occurs. For example, if the data copied isn’t compatibility with the datasource of control.
ml:ExcelActions.ShowErrorMessages="True"
True
is its default value.
In moving:
CancelWithErrors
When we copy many rows from Excel, if any row isn’t correct and if an error occurs, this property specifies if paste the correct rows or don’t paste any row.
True
-> Paste correct rows False
-> Don’t paste anything
True
is a default value.
Recommendations
It is necessary that the ItemsSource
property of ItemsControl
is an ObservableCollection
type, because this type refreshes the items correctly and informs the remove and add changes.
Limitations
In this version, in the paste action, only insert data, doesn’t update the rows, or paste incomplete types.
If someone wants, ask me and I will develop this part.
History
- 23rd February, 2017: Initial version