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; // 设置为非商业使用

关键点说明

  1. 数据库连接:使用 System.Data.SQLite 库进行数据库连接和数据检索。确保连接字符串正确,并且数据库文件可访问。

  2. 数据绑定:将 DataTable 绑定到 DataGridItemsSource,以便在界面上显示数据。

  3. EPPlus 导出:使用 EPPlus 库将 DataTable 数据导出到 Excel。使用 LoadFromDataTable 方法可以轻松将表格加载到 Excel 工作表中。

  4. 用户体验:使用 SaveFileDialog 允许用户选择保存位置,并提供导出成功与否的反馈。

通过这些步骤,您可以在 WPF 应用程序中实现从数据库读取、显示学生成绩,并能够将数据导出到 Excel 文件的功能。这种方法不仅简单而且高效,能够处理大多数常见的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925173.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

web安全之信息收集

在信息收集中,最主要是就是收集服务器的配置信息和网站的敏感信息,其中包括域名及子域名信息,目标网站系统,CMS指纹,目标网站真实IP,开放端口等。换句话说,只要是与目标网站相关的信息,我们都应该去尽量搜集。 1.1收集域名信息 知道目标的域名之后,获取域名的注册信…

网络原理(一)—— http

什么是 http http 是一个应用层协议&#xff0c;全称为“超文本传输协议”。 http 自 1991 年诞生&#xff0c;目前已经发展为最主流使用的一种应用层协议。 HTTP 往往基于传输层的 TCP 协议实现的&#xff0c;例如 http1.0&#xff0c;http1.0&#xff0c;http2.0 http3 是…

第四十二篇 EfficientNet:重新思考卷积神经网络的模型缩放

文章目录 摘要1、简介2、相关工作3、复合模型缩放3.1、 问题公式化3.2、扩展维度3.3、复合比例 4、EfficientNet架构5、实验5.1、扩展MobileNets和ResNets5.2、EfficientNet的ImageNet结果5.3、EfficientNet的迁移学习结果 6、讨论7、结论 摘要 卷积神经网络(ConvNets)通常在固…

典型组合逻辑电路设计

目录 行为级描述方式基本运算电路 一、半加器&#xff08;Half Adder&#xff09; 二、全加器&#xff08;Full Adder&#xff09; 1、逻辑门构成加法器 2、集成全加器 3、串行加法器 4、超前进位加法器 三、全减器(Full Deductor) 数值比较电路 一、一位比较器 二、…

【论文阅读】三平面相关与变体

文章目录 1. 【CVPR2023】Tri-Perspective View for Vision-Based 3D Semantic Occupancy Prediction动机可视化方法Pipeline 2. 【2023/08/31】PointOcc: Cylindrical Tri-Perspective View for Point-based 3D Semantic Occupancy Prediction动机&#xff08;针对雷达点云、与…

修改bag的frame_id的工具srv_tools

在使用数据集导航或者建图时&#xff0c;bag中的点云或者其他话题的frame_id没有和需要的对应 1.创建工作空间 2.cd xxxx/src 3.git clone https://github.com/srv/srv_tools.git cd .. catkin_make source ./devel/setup.bash rosrun bag_tools change_frame_id.py -t /要改…

hue 4.11容器化部署,已结合Hive与Hadoop

配合《Hue 部署过程中的报错处理》食用更佳 官方配置说明页面&#xff1a; https://docs.gethue.com/administrator/configuration/connectors/ 官方配置hue.ini页面 https://github.com/cloudera/hue/blob/master/desktop/conf.dist/hue.ini docker部署 注意&#xff1a; …

如何用Excel做数据可视化自动化报表?

作为一个经常需要做数据报表的人&#xff0c;我最常用的工具是Excel&#xff0c;对于我来说用Excel处理繁琐冗杂的数据并不难&#xff0c;但是我发现身边很多人用Excel做的数据报表非常的耗时&#xff0c;而且最后的成品也是难以直视&#xff0c;逻辑和配色等都非常的“灾难”。…

layui table 纵向滚动条导致单元格表头表体错位问题

我用的时layui2.6.8版本 历史项目维护&#xff0c;bug给我让我做了&#xff0c;本来利用前端手段强解决&#xff0c;后来发现很多table 找了解决办法 打开layui-v2.6.8/lay/modules/table.js 如果打开后时压缩的代码 直接搜索 e.find(".layui-table-patch") …

C语言学习笔记:流程控制和数据输入输出

流程控制和数据的输入输出 算法 著名计算机科学家沃思提出了一个公式&#xff1a; 数据结构 算法 程序 数据结构&#xff1a;对数据的描述 算法&#xff1a;对操作步骤的描述 算法定义 广义的说&#xff0c;为解决一个问题而采取的方法和有限的步骤&#xff0c;就称为“…

旋转图像(java)

题目描述&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 代码思路&#xff1a; class Solution {public void ro…

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环&#xff0c;网络上也有很多 UI 自动化相关的知识或资料&#xff0c;具体到 windows 端的 UI 自动化&#xff0c;我们需要从以下几个方面考虑&#xff1a; 开发语言 毋庸置疑&#xff0c;在 UI 自动化测试领域&am…

【R语言管理】Pycharm配置R语言及使用Anaconda管理R语言虚拟环境

目录 使用Anaconda创建R语言虚拟环境1. 安装Anaconda2. 创建R语言虚拟环境 Pycharm配置R语言1. 安装Pycharm2. R Language for IntelliJ插件 参考 使用Anaconda创建R语言虚拟环境 1. 安装Anaconda Anaconda的安装可参见另一博客-【Python环境管理工具】Anaconda安装及使用教程…

C语言进程编程

getpid函数&#xff1a; 原型&#xff1a;pid_t getpid(void) 特性&#xff1a;返回值是PID值 用途&#xff1a;获取当前进程PID 用法例 #include<stdio.h> #include <sys/types.h> #include<unistd.h> int main() {pid_t pid;pid getpid();printf(&qu…

SpringMVC |(一)SpringMVC概述

文章目录 &#x1f4da;SpringMVC概述&#x1f407;三层架构&#x1f407;异步调用 &#x1f4da;SpringMVC入门案例&#x1f407;入门案例&#x1f407;注意事项 &#x1f4da;小结 学习来源&#xff1a;黑马程序员SSM框架教程_SpringSpringMVCMaven高级SpringBootMyBatisPlus…

Android 桌面窗口新功能推进,聊一聊 Android 桌面化的未来

Android 桌面化支持可以说是 Android 15 里被多次提及的 new features&#xff0c;例如在 Android 15 QPR1 Beta 2 里就提到为 Pixel 平板引入了桌面窗口支持&#xff0c;桌面窗口允许用户在自由窗口同时运行多个应用&#xff0c;同时可以像在传统 PC 平台上一样调整这些窗口的…

Vue+Vite 组件开发的环境准备(零基础搭建)

一、什么是Vite Vue3作为一款现代化的JavaScript框架&#xff0c;配合Vite这样的构建工具&#xff0c;极大地简化了流程&#xff0c;提升了效率。Vite 是一个基于现代浏览器原生的 ES 模块系统&#xff0c;能够以原生模块导入的方式运行源代码的开发服务器。它被设计用来替代传…

linux高级系统编程之进程

进程 一个正在进行的程序 并行与并发 并行:执行的程序在不同CPU上同时执行 并发:一个CPU,多个进程交替执行,因为交替速度很快,所以从宏观上来看是同时执行的,但是从围观的角度是交替执行的 单道与多道 单道程序设计:所有进程一个一个排队执行,若A阻塞,B只能等待,,即使CPU处于空…

git 命令之只提交文件的部分更改

git 命令之只提交文件的部分更改 有时&#xff0c;我们在一个文件中进行了多个更改&#xff0c;但只想提交其中的一部分更改。这时可以使用 使用 git add -p 命令 Git add -p命令允许我们选择并添加文件中的特定更改。它将会显示一个交互式界面&#xff0c;显示出文件中的每个更…

Excel中根据某列内容拆分为工作簿

简介&#xff1a;根据A列的内容进行筛选&#xff0c;将筛选出来的数据生成一个新的工作簿(可以放到指定文件夹下)&#xff0c;且工作簿名为筛选内容。 举例&#xff1a; 将上面的内容使用VBA会在当前test1下生成5个工作簿&#xff0c;工作簿名分别为TEST1.xls TEST2.xls TEST3…