C#?WPF實現數據記錄導出excel
引言
實現基于C#的WPF應用程序導出數據到 Excel 的功能,可以使用一個流行的庫,比如 EPPlus 或 ClosedXML。這些庫可以將 DataTable 數據導出為 Excel 文件,并提供簡單易用的 API。 下面是使用 EPPlus 庫實現導出功能的示例實現過程介紹。
為了更詳細說明實現過程,在 C# WPF 應用程序中,我們可以創(chuàng)建一個學生成績查詢系統(tǒng),該系統(tǒng)從數據庫中提取數據,在界面上顯示,并允許用戶將數據導出為 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
創(chuàng)建 WPF 界面
在 XAML 文件中,創(chuàng)建一個簡單的界面,包括一個 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 寫入 Excel worksheet.Cells["A1"].LoadFromDataTable(_scoreTable, true); // 保存到文件 FileInfo fileInfo = new FileInfo(saveFileDialog.FileName); package.SaveAs(fileInfo); MessageBox.Show("成績已成功導出到 Excel 文件。"); } } catch (Exception ex) { MessageBox.Show("導出時發(fā)生錯誤: " + ex.Message); } } } } }
EPPlus LicenseContext 屬性設置
由于EPPlus 5.0 及以上版本引入了一個商業(yè)許可模式,它需要在代碼中明確聲明使用的許可上下文。對于大多數非商業(yè)用途,可以將許可上下文設置LicenseContext.NonCommercial。這個非常重要,如果未設置將會在運行時報錯:
在ExcelPackage package = new ExcelPackage()報錯:Please set the ExcelPackage.LicenseContext property. See https://epplussoftware.com/developers/licenseexception
需要在代碼中設置 ExcelPackage.LicenseContext 屬性。這個非常重要,以下是解決上面問題的代碼示例:
// 在您的應用程序入口點,如 Main 方法或者其他初始化代碼中執(zhí)行以下設置 ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 設置為非商業(yè)使用
關鍵點說明
數據庫連接:使用 System.Data.SQLite 庫進行數據庫連接和數據檢索。確保連接字符串正確,并且數據庫文件可訪問。
數據綁定:將 DataTable 綁定到 DataGrid 的 ItemsSource,以便在界面上顯示數據。
EPPlus 導出:使用 EPPlus 庫將 DataTable 數據導出到 Excel。使用 LoadFromDataTable 方法可以輕松將表格加載到 Excel 工作表中。
用戶體驗:使用 SaveFileDialog 允許用戶選擇保存位置,并提供導出成功與否的反饋。
通過這些步驟,您可以在 WPF 應用程序中實現從數據庫讀取、顯示學生成績,并能夠將數據導出到 Excel 文件的功能。這種方法不僅簡單而且高效,能夠處理大多數常見的需求。
到此這篇關于C# WPF實現數據記錄導出excel的文章就介紹到這了,更多相關WPF數據導出excel內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C#用Parallel.Invoke方法盡可能并行執(zhí)行提供的每個線程
本文主要介紹了C#用Parallel.Invoke方法盡可能并行執(zhí)行提供的每個線程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-01-01c#實現服務器性能監(jiān)控并發(fā)送郵件保存日志
這篇文章主要介紹了c#實現服務器性能監(jiān)控并發(fā)送郵件保存日志的示例,代碼分為客戶端和服務端,客戶端可安裝為本地服務形式啟動2014-01-01利用MySqlBulkLoader實現批量插入數據的示例詳解
MySQLBulkLoader是MySQL?Connector/Net類中的一個類,用于包裝MySQL語句。本文將利用MySqlBulkLoader實現批量插入數據功能,感興趣的可以了解一下2022-06-06