В этой статье я хочу создать простое приложение для импорта данных из excel таблицы в DataGrid.
- Приложение будет состоять из двух элементов: кнопки для выбора файла и таблицы DataGrid для отображения полученных данных.
MainWindows.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<Window x:Class="WPFExcelView.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WPFExcelView" mc:Ignorable="d" Title="DataGrid For Excel" Height="556.647" Width="973.637" ResizeMode="NoResize"> <StackPanel> <Button x:Name="OpenExcel" Content="Выбрать файл" HorizontalAlignment="Left" VerticalAlignment="Top" Height="43" FontFamily="Tahoma" FontSize="16" Margin="10,10,0,0" FontWeight="Bold" Cursor="Hand" Click="OpenExcel_Click" Width="181"/> <DataGrid x:Name="DbGrig" ItemsSource="{Binding}" Margin="10" Height="444" /> </StackPanel> </Window> |
2. Для чтения excel файлов я использовал две библиотеки ExcelDataReader и ExcelDataReader.DataSet. Скачать их можно через диспетчер пакетов NuGet.
3. Функционал приложения описан в файле MainWindows.xaml.cs.
MainWindows.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
using System.Windows; using Microsoft.Win32; using ExcelDataReader; using System.Data; using System.IO; namespace WPFExcelView { public partial class MainWindow : Window { IExcelDataReader edr; public MainWindow() { InitializeComponent(); } private void OpenExcel_Click(object sender, RoutedEventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "EXCEL Files (*.xlsx)|*.xlsx|EXCEL Files 2003 (*.xls)|*.xls|All files (*.*)|*.*"; if (openFileDialog.ShowDialog() != true) return; DbGrig.ItemsSource = readFile(openFileDialog.FileName); } private DataView readFile(string fileNames) { var extension = fileNames.Substring(fileNames.LastIndexOf('.')); // Создаем поток для чтения. FileStream stream = File.Open(fileNames, FileMode.Open, FileAccess.Read); // В зависимости от расширения файла Excel, создаем тот или иной читатель. // Читатель для файлов с расширением *.xlsx. if (extension == ".xlsx") edr = ExcelReaderFactory.CreateOpenXmlReader(stream); // Читатель для файлов с расширением *.xls. else if (extension == ".xls") edr = ExcelReaderFactory.CreateBinaryReader(stream); //// reader.IsFirstRowAsColumnNames var conf = new ExcelDataSetConfiguration { ConfigureDataTable = _ => new ExcelDataTableConfiguration { UseHeaderRow = true } }; // Читаем, получаем DataView и работаем с ним как обычно. DataSet dataSet = edr.AsDataSet(conf); DataView dtView = dataSet.Tables[0].AsDataView(); // После завершения чтения освобождаем ресурсы. edr.Close(); return dtView; } } } |
Готовое приложение
Полезные ссылки: