引言
实现基于C#的WPF应用程序导出数据到 Excel 的功能,可以使用一个流行的库,比如 EPPlus 或 ClosedXML。这些库可以将 DataTable 数据导出为 Excel 文件,并提供简单易用的 API。 下面是使用 EPPlus 库实现导出功能的示例实现过程介绍。
为了更详细说明实现过程,在 C# WPF 应用程序中,我们可以创建一个学生成绩查询系统,该系统从数据库中提取数据,在界面上显示,并允许用户将数据导出为 Excel 文件。我们将使用 DataGrid
显示数据,并使用 EPPlus
库实现导出功能。以下是实现该功能的详细步骤。
项目准备
步骤 1:设置数据库
假设我们使用 SQLite 数据库,其中有一个名为 StudentScores
的表。该表具有以下结构:
Column Name | Data Type |
---|---|
StudentID | INTEGER |
Name | TEXT |
Subject | TEXT |
Score | REAL |
步骤 2:安装 NuGet 包
在项目中安装以下 NuGet 包:
System.Data.SQLite
:用于连接 SQLite 数据库。(根据实际应用中选择数据库,本文仅以 SQLite 数据库为例)EPPlus
:用于导出数据到 Excel。
Install-Package System.Data.SQLite
Install-Package EPPlus
创建 WPF 界面
在 XAML 文件中,创建一个简单的界面,包括一个 DataGrid
和一个导出按钮。
<Window x:Class="StudentScoreApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="学生成绩查询" Height="400" Width="600"><Grid><DataGrid x:Name="scoreDataGrid" AutoGenerateColumns="True" HeadersVisibility="Column" IsReadOnly="True" Margin="10,10,10,50" /><Button Content="导出" Width="100" Height="30" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="10" Click="ExportScore_Click"/></Grid>
</Window>
后端代码
步骤 1:从数据库加载数据
在代码后面,编写从数据库加载数据的方法。
using System;
using System.Data;
using System.Data.SQLite;
using System.Windows;namespace StudentScoreApp
{public partial class MainWindow : Window{private DataTable _scoreTable;public MainWindow(){InitializeComponent();LoadData();}private void LoadData(){string connectionString = "Data Source=StudentScores.db;Version=3;";using (SQLiteConnection connection = new SQLiteConnection(connectionString)){connection.Open();string query = "SELECT StudentID, Name, Subject, Score FROM StudentScores";SQLiteDataAdapter adapter = new SQLiteDataAdapter(query, connection);_scoreTable = new DataTable();adapter.Fill(_scoreTable);scoreDataGrid.ItemsSource = _scoreTable.DefaultView;}}}
}
步骤 2:导出数据到 Excel
实现 ExportScore_Click
方法,用于将数据导出到 Excel 文件。
using OfficeOpenXml;
using Microsoft.Win32;
using System.IO;namespace StudentScoreApp
{public partial class MainWindow : Window{// 其他代码...private void ExportScore_Click(object sender, RoutedEventArgs e){if (_scoreTable == null || _scoreTable.Rows.Count == 0){MessageBox.Show("没有数据可导出。");return;}SaveFileDialog saveFileDialog = new SaveFileDialog{Filter = "Excel Files|*.xlsx",Title = "保存为 Excel 文件",FileName = "StudentScores.xlsx"};if (saveFileDialog.ShowDialog() == true){try{using (ExcelPackage package = new ExcelPackage()){ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Scores");// 将 DataTable 写入 Excelworksheet.Cells["A1"].LoadFromDataTable(_scoreTable, true);// 保存到文件FileInfo fileInfo = new FileInfo(saveFileDialog.FileName);package.SaveAs(fileInfo);MessageBox.Show("成绩已成功导出到 Excel 文件。");}}catch (Exception ex){MessageBox.Show("导出时发生错误: " + ex.Message);}}}}
}
EPPlus LicenseContext
属性设置
由于EPPlus 5.0 及以上版本引入了一个商业许可模式,它需要在代码中明确声明使用的许可上下文。对于大多数非商业用途,可以将许可上下文设置LicenseContext.NonCommercial
。这个非常重要,如果未设置将会在运行时报错:
在ExcelPackage package = new ExcelPackage()报错:Please set the ExcelPackage.LicenseContext property. See https://epplussoftware.com/developers/licenseexception
需要在代码中设置 ExcelPackage.LicenseContext
属性。这个非常重要,以下是解决上面问题的代码示例:
// 在您的应用程序入口点,如 Main 方法或者其他初始化代码中执行以下设置
ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 设置为非商业使用
关键点说明
-
数据库连接:使用
System.Data.SQLite
库进行数据库连接和数据检索。确保连接字符串正确,并且数据库文件可访问。 -
数据绑定:将
DataTable
绑定到DataGrid
的ItemsSource
,以便在界面上显示数据。 -
EPPlus 导出:使用
EPPlus
库将DataTable
数据导出到 Excel。使用LoadFromDataTable
方法可以轻松将表格加载到 Excel 工作表中。 -
用户体验:使用
SaveFileDialog
允许用户选择保存位置,并提供导出成功与否的反馈。
通过这些步骤,您可以在 WPF 应用程序中实现从数据库读取、显示学生成绩,并能够将数据导出到 Excel 文件的功能。这种方法不仅简单而且高效,能够处理大多数常见的需求。