C# 基于WPF实现数据记载导出excel

守听  金牌会员 | 2024-11-29 19:29:20 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 812|帖子 812|积分 2436

引言        

        实现基于C#的WPF应用步伐导出数据到 Excel 的功能,可以利用一个流行的库,比如 EPPlus 或 ClosedXML。这些库可以将 DataTable 数据导出为 Excel 文件,并提供简单易用的 API。 下面是利用 EPPlus 库实现导出功能的示例实现过程先容。
       为了更具体说明实现过程,在 C# WPF 应用步伐中,我们可以创建一个门生结果查询体系,该体系从数据库中提取数据,在界面上显示,并允许用户将数据导出为 Excel 文件。我们将利用 DataGrid 显示数据,并利用 EPPlus 库实现导出功能。以下是实现该功能的具体步骤。
项目准备

步骤 1:设置数据库
假设我们利用 SQLite 数据库,此中有一个名为 StudentScores 的表。该表具有以下结构:
Column NameData TypeStudentIDINTEGERNameTEXTSubjectTEXTScoreREAL 步骤 2:安装 NuGet 包
在项目中安装以下 NuGet 包:


  • System.Data.SQLite:用于连接 SQLite 数据库。(根据现实应用中选择数据库,本文仅以 SQLite 数据库为例)
  • EPPlus:用于导出数据到 Excel。
  1. Install-Package System.Data.SQLite
  2. Install-Package EPPlus
复制代码

创建 WPF 界面

在 XAML 文件中,创建一个简单的界面,包括一个 DataGrid 和一个导出按钮。
  1. <Window x:Class="StudentScoreApp.MainWindow"
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.         Title="学生成绩查询" Height="400" Width="600">
  5.     <Grid>
  6.         <DataGrid x:Name="scoreDataGrid" AutoGenerateColumns="True" HeadersVisibility="Column" IsReadOnly="True"
  7.                   Margin="10,10,10,50" />
  8.         <Button Content="导出" Width="100" Height="30" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="10" Click="ExportScore_Click"/>
  9.     </Grid>
  10. </Window>
复制代码
后端代码

步骤 1:从数据库加载数据
在代码背面,编写从数据库加载数据的方法。
  1. using System;
  2. using System.Data;
  3. using System.Data.SQLite;
  4. using System.Windows;
  5. namespace StudentScoreApp
  6. {
  7.     public partial class MainWindow : Window
  8.     {
  9.         private DataTable _scoreTable;
  10.         public MainWindow()
  11.         {
  12.             InitializeComponent();
  13.             LoadData();
  14.         }
  15.         private void LoadData()
  16.         {
  17.             string connectionString = "Data Source=StudentScores.db;Version=3;";
  18.             using (SQLiteConnection connection = new SQLiteConnection(connectionString))
  19.             {
  20.                 connection.Open();
  21.                 string query = "SELECT StudentID, Name, Subject, Score FROM StudentScores";
  22.                 SQLiteDataAdapter adapter = new SQLiteDataAdapter(query, connection);
  23.                 _scoreTable = new DataTable();
  24.                 adapter.Fill(_scoreTable);
  25.                 scoreDataGrid.ItemsSource = _scoreTable.DefaultView;
  26.             }
  27.         }
  28.     }
  29. }
复制代码
步骤 2:导出数据到 Excel
实现 ExportScore_Click 方法,用于将数据导出到 Excel 文件。
  1. using OfficeOpenXml;
  2. using Microsoft.Win32;
  3. using System.IO;
  4. namespace StudentScoreApp
  5. {
  6.     public partial class MainWindow : Window
  7.     {
  8.         // 其他代码...
  9.         private void ExportScore_Click(object sender, RoutedEventArgs e)
  10.         {
  11.             if (_scoreTable == null || _scoreTable.Rows.Count == 0)
  12.             {
  13.                 MessageBox.Show("没有数据可导出。");
  14.                 return;
  15.             }
  16.             SaveFileDialog saveFileDialog = new SaveFileDialog
  17.             {
  18.                 Filter = "Excel Files|*.xlsx",
  19.                 Title = "保存为 Excel 文件",
  20.                 FileName = "StudentScores.xlsx"
  21.             };
  22.             if (saveFileDialog.ShowDialog() == true)
  23.             {
  24.                 try
  25.                 {
  26.                     using (ExcelPackage package = new ExcelPackage())
  27.                     {
  28.                         ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Scores");
  29.                         // 将 DataTable 写入 Excel
  30.                         worksheet.Cells["A1"].LoadFromDataTable(_scoreTable, true);
  31.                         // 保存到文件
  32.                         FileInfo fileInfo = new FileInfo(saveFileDialog.FileName);
  33.                         package.SaveAs(fileInfo);
  34.                         MessageBox.Show("成绩已成功导出到 Excel 文件。");
  35.                     }
  36.                 }
  37.                 catch (Exception ex)
  38.                 {
  39.                     MessageBox.Show("导出时发生错误: " + ex.Message);
  40.                 }
  41.             }
  42.         }
  43.     }
  44. }
复制代码
EPPlus  LicenseContext 属性设置

        由于EPPlus 5.0 及以上版本引入了一个商业许可模式,它须要在代码中明确声明利用的许可上下文。对于大多数非商业用途,可以将许可上下文设置LicenseContext.NonCommercial。这个非常重要,如果未设置将会在运行时报错:
  1. 在ExcelPackage package = new ExcelPackage()报错:Please set the ExcelPackage.LicenseContext property. See https://epplussoftware.com/developers/licenseexception
复制代码
须要在代码中设置 ExcelPackage.LicenseContext 属性。这个非常重要,以下是解决上面问题的代码示例:
  1. // 在您的应用程序入口点,如 Main 方法或者其他初始化代码中执行以下设置
  2. ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 设置为非商业使用
复制代码

关键点说明


  • 数据库连接:利用 System.Data.SQLite 库进行数据库连接和数据检索。确保连接字符串精确,而且数据库文件可访问。
  • 数据绑定:将 DataTable 绑定到 DataGrid 的 ItemsSource,以便在界面上显示数据。
  • EPPlus 导出:利用 EPPlus 库将 DataTable 数据导出到 Excel。利用 LoadFromDataTable 方法可以轻松将表格加载到 Excel 工作表中。
  • 用户体验:利用 SaveFileDialog 允许用户选择保存位置,并提供导出乐成与否的反馈。
通过这些步骤,您可以在 WPF 应用步伐中实现从数据库读取、显示门生结果,并能够将数据导出到 Excel 文件的功能。这种方法不仅简单而且高效,能够处理大多数常见的需求。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表