C# WPF实现数据记录导出excel

 更新时间:2024年11月26日 09:21:36   作者:猿享天开  
这篇文章主要为大家详细介绍了C#如何基于WPF实现数据记录导出excel的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

引言        

实现基于C#的WPF应用程序导出数据到 Excel 的功能,可以使用一个流行的库,比如 EPPlus 或 ClosedXML。这些库可以将 DataTable 数据导出为 Excel 文件,并提供简单易用的 API。 下面是使用 EPPlus 库实现导出功能的示例实现过程介绍。

为了更详细说明实现过程,在 C# WPF 应用程序中,我们可以创建一个学生成绩查询系统,该系统从数据库中提取数据,在界面上显示,并允许用户将数据导出为 Excel 文件。我们将使用 DataGrid 显示数据,并使用 EPPlus 库实现导出功能。以下是实现该功能的详细步骤。

项目准备

步骤 1:设置数据库

假设我们使用 SQLite 数据库,其中有一个名为 StudentScores 的表。该表具有以下结构:

Column NameData Type
StudentIDINTEGER
NameTEXT
SubjectTEXT
ScoreREAL

步骤 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 写入 Excel
                        worksheet.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 文件的功能。这种方法不仅简单而且高效,能够处理大多数常见的需求。

到此这篇关于C# WPF实现数据记录导出excel的文章就介绍到这了,更多相关WPF数据导出excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#实现扫描局域网内的所有IP和端口

    C#实现扫描局域网内的所有IP和端口

    这篇文章主要为大家详细介绍了如何利用C#实现扫描局域网内的所有IP和端口的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • C#中图片旋转和翻转(RotateFlipType)用法分析

    C#中图片旋转和翻转(RotateFlipType)用法分析

    这篇文章主要介绍了C#中图片旋转和翻转(RotateFlipType)用法,实例分析了C#图片旋转及翻转Image.RotateFlip方法属性的常用设置技巧,需要的朋友可以参考下
    2015-06-06
  • C# WebApi 路由机制剖析

    C# WebApi 路由机制剖析

    这篇文章主要介绍了C# WebApi 路由机制剖析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • WinForm实现程序一段时间不运行自动关闭的方法

    WinForm实现程序一段时间不运行自动关闭的方法

    这篇文章主要介绍了WinForm实现程序一段时间不运行自动关闭的方法,涉及WinForm计时器及进程操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • 使用C#调用百度地图并实现坐标点的设置以及读取示例

    使用C#调用百度地图并实现坐标点的设置以及读取示例

    这篇文章主要介绍了使用C#调用百度地图并实现坐标点的设置以及读取示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • C#学习笔记之状态模式详解

    C#学习笔记之状态模式详解

    这篇文章主要为大家详细介绍了C#学习笔记之状态模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • C#中桥接模式的具体使用

    C#中桥接模式的具体使用

    桥接模式是一种结构型设计模式,用于将抽象部分与实现部分分离,本文就来介绍一下C#中桥接模式的具体使用,感兴趣的可以了解一下
    2024-11-11
  • C#12中的Primary Constructors主构造函数详解

    C#12中的Primary Constructors主构造函数详解

    主构造函数把参数添加到class与record的类声明中就是主构造函数,这篇文章主要介绍了C#12中的Primary Constructors 主构造函数,需要的朋友可以参考下
    2023-11-11
  • C#实现HTTP下载文件的方法

    C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下
    2014-11-11
  • C#实现PDF文件添加图片背景

    C#实现PDF文件添加图片背景

    这篇文章主要介绍了C#实现PDF文件添加图片背景的相关资料,需要的朋友可以参考下
    2016-02-02

最新评论