راه های مختلفی برای صادرات داده های DataGrid به صفحه اکسل با استفاده از Microsoft.Office.Interpo dll و با استفاده از اشیاء کاربرگ اکسل وجود دارد. اگر بخواهیم داده های DataGrid را با کمک Interpo dll به صفحه اکسل صادر کنیم، مراحل زیر را انجام می دهیم:
- رفرنس Microsoft.Office.Inerpo dll.
- ایجاد شی از کلاس اکسل.
- ایجاد شی از کلاس WorkSheet.
- ایجاد شی از کلاس Range (می توانیم داده ها را با استفاده از شی سلول وارد کنیم، اما در اینجا در مورد محدوده توضیح می دهم).
- و درج شبکه داده در محدوده.
- ذخیره برگه اکسل و پاک کردن شی.
در اینجا میخواهم روش دیگری را برای صادرات دادههای شبکه داده به صفحه اکسل نشان دهم. برای انجام این کار من 3 مرحله ساده زیر را دنبال کردم:
- شبکه داده پر شده با مقداری داده.
- داده های شبکه داده با اطلاعات سرصفحه در کلیپ برد کپی شد.
- این داده های کپی شده را در برگه اکسل ذخیره کرد.
DataGrid را پر کنید
DataGrid خود را با هر مجموعه ای پر کنید، در اینجا من داده های جمع آوری اطلاعات دانش آموز را گرفته ام. جزئیات در مورد یک دانش آموز
کپی داده های DataGrid در کلیپ بورد
برای ذخیره در اکسل با کمک ApplicationCommands، داده های شبکه داده را در کلیپ بورد کپی کنید. در اینجا من کدی را نوشته ام که به کپی کردن داده های شبکه داده کمک می کند:
- this.dgvStudents.SelectAllCells();
- this.dgvStudents.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
- ApplicationCommands.Copy.Execute(null, this.dgvStudents);
- this.dgvStudents.UnselectAllCells();
در این کد 1 بالا، من تمام سلول ها را انتخاب کرده ام و در کد 2 ویژگی ClipboardCopyMode را روی IncludeHeader قرار داده ام که به ما کمک می کند تا داده های دیتاگرید را با هدر ستون کپی کنیم. در خط 3 دستور copy را با کمک کلاس ApplicationcCommands اجرا کردم. در خط 4 دوباره
تمام سلول های DataGrid را از حالت انتخاب خارج کردم.
ذخیره داده های کپی شده از کلیپ بورد در صفحه اکسل
کد زیر به کمک کلاس StreamWriter به ذخیره یا ذخیره داده ها از کلیپ بورد به برگه اکسل کمک می کند.
- String result = (string) Clipboard.GetData(DataFormats.CommaSeparatedValue);
- try
- {
- StreamWriter sw = new StreamWriter("export.csv");
- sw.WriteLine(result);
- sw.Close();
- Process.Start("export.csv");
- }
- catch(Exception ex)
- {}
داده هایی که اکنون در کلیپ بورد هستند در خط 01 با کمک GetData از کلاس کلیپ بورد که به یک متغیر رشته ای ارسال می شود، بازیابی می شوند. سپس در خط 04 یک شی از کلاس StreamWriter با عبور نام فایل csv اکسل با پسوند سازنده کلاس StreamWriter ایجاد کرد. آن داده را با کمک تابع WriteLine در فایل csv نوشت و StreamWriter را بست. در خط 07 فایل اکسل را با کمک کلاس process باز کنید.
کد زیر کامل است که به شما در درک درست کمک می کند.
XAML
- <Window x:Class="WPFDataGridExport.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525">
- <DockPanel>
- <StackPanel Orientation="Horizontal" FlowDirection="RightToLeft" DockPanel.Dock="Bottom">
- <Button Content="Export" Click="Button_Click_1" Margin="5"></Button>
- </StackPanel>
- <DataGrid AutoGenerateColumns="False" Name="dgvStudents">
- <DataGrid.Columns>
- <DataGridTextColumn Header="Name" Width="*" Binding="{Binding Path=Name, Mode=Default}"></DataGridTextColumn>
- <DataGridTextColumn Header="Roll no." Width="100" Binding="{Binding Path=RollNo, Mode=Default}"></DataGridTextColumn>
- <DataGridTextColumn Header="Age" Width="100" Binding="{Binding Path=Age, Mode=Default}"></DataGridTextColumn>
- </DataGrid.Columns>
- </DataGrid>
- </DockPanel>
- </Window>
پشت کد
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace WPFDataGridExport
- {
- /// <summary>
- /// Interaction logic for MainWindow.xaml
- /// </summary>
- public partial class MainWindow: Window
- {
- public List < Student > Students
- {
- get;
- set;
- }
- public MainWindow()
- {
- InitializeComponent();
- FillDate();
- }
- private void FillDate()
- {
- this.Students = new List < Student > ();
- this.Students.Add(new Student()
- {
- Name = "Kailash", RollNo = 1, Age = 10
- });
- this.Students.Add(new Student()
- {
- Name = "Munna", RollNo = 2, Age = 10
- });
- this.Students.Add(new Student()
- {
- Name = "Suraj", RollNo = 3, Age = 10
- });
- this.Students.Add(new Student()
- {
- Name = "Kiran", RollNo = 4, Age = 10
- });
- this.Students.Add(new Student()
- {
- Name = "Akash", RollNo = 5, Age = 10
- });
- this.Students.Add(new Student()
- {
- Name = "Vishal", RollNo = 6, Age = 10
- });
- this.Students.Add(new Student()
- {
- Name = "Manoj", RollNo = 7, Age = 10
- });
- this.Students.Add(new Student()
- {
- Name = "Ajay", RollNo = 8, Age = 10
- });
- this.Students.Add(new Student()
- {
- Name = "Rushi", RollNo = 9, Age = 10
- });
- this.Students.Add(new Student()
- {
- Name = "Ruchit", RollNo = 10, Age = 10
- });
- this.dgvStudents.ItemsSource = this.Students;
- }
- private void Button_Click_1(object sender, RoutedEventArgs e)
- {
- this.dgvStudents.SelectAllCells();
- this.dgvStudents.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
- ApplicationCommands.Copy.Execute(null, this.dgvStudents);
- this.dgvStudents.UnselectAllCells();
- String result = (string) Clipboard.GetData(DataFormats.CommaSeparatedValue);
- try
- {
- StreamWriter sw = new StreamWriter("export.csv");
- sw.WriteLine(result);
- sw.Close();
- Process.Start("export.csv");
- }
- catch(Exception ex)
- {}
- }
- }
- }
امیدواریم یاد گرفته باشید که چگونه داده های شبکه داده را به صفحه اکسل به روشی ساده و بدون استفاده از Interop dll صادر کنید.