C# WPF上位机开发(报表导出)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

对于在工厂上班的小伙伴来说,导出生产数据、生成报表,这是很习以为常的一个工作。之前的文章中,虽然我们也介绍了json脚本、sqlite数据库、mysql数据库这类数据保存的方式,但是它们只是我们程序员比较熟悉的数据保存形式。而工厂里面的工人,或者车间的管理人员来说,他们比较习惯的树汇总方式其实还是报表,简单来说就是excel表格。

今天,我们正好学习下如果用c# wpf生成excel表格。在这过程中需要安装一下开源库ClosedXML。

1、安装好开源库ClosedXML

ClosedXml里面有一个Excel库,里面确实实现可以帮助我们创建生成excel文件的功能。所以,第一步,还是要麻烦大家安装一下ClosedXml库,直接用NuGet安装就可以了,

2、准备好测试界面

测试界面可以做的比较简单一点,比如就是一个按钮就行,内容如下所示,

复制代码
<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp"
        mc:Ignorable="d"
        Title="ExportDemo" Height="450" Width="800">
    <Grid>
        <Button x:Name="export"  Content="export" Foreground="Green" Click="Start_Click" HorizontalAlignment="Left" Margin="300,195,0,0" VerticalAlignment="Top" Width="95" Height="45">
            <Button.Resources>
                <Style TargetType="{x:Type Border}">
                    <Setter Property="CornerRadius" Value="5"></Setter>
                </Style>
            </Button.Resources>
        </Button>
    </Grid>
</Window>

转成界面的话,就应该是这样,

3、开始设计代码

代码中,最主要的内容其实就是按钮的回调函数。在函数中,一般有三个部分,第一就是准备excel的基本数据,这个数据结构DataTable就可以完成;第二个部分,就是选择保存的地址,一般会弹出一个对话框,让用户来进行选择;第三呢,就是用XlWorkbook把之前的DataTable数据收入进来,同时保存到对应的目录,如果整个过程没有问题,代表我们的过程就是ok的。

复制代码
using ClosedXML.Excel;
using System;
using System.Collections.Generic;
using System.Data;
using System.Windows;

namespace WpfApp
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        // construct function
        public MainWindow()
        {
            InitializeComponent();
        }

        // start button function
        private void Start_Click(object sender, RoutedEventArgs e)
        {
            // set the title for each column
            DataTable dataTable = new DataTable("Report");
            dataTable.Columns.Add("Name", typeof(string));
            dataTable.Columns.Add("Age", typeof(int));
            dataTable.Columns.Add("Gender", typeof(string));

            // add data
            dataTable.Rows.Add("Bill", 30, "Male");
            dataTable.Rows.Add("Jack", 25, "Male");
            dataTable.Rows.Add("Lily", 20, "Female");
      
            // choose path
            Microsoft.Win32.SaveFileDialog saveFileDialog = new Microsoft.Win32.SaveFileDialog();
            saveFileDialog.FileName = "Report";
            saveFileDialog.DefaultExt = ".xlsx";
            saveFileDialog.Filter = "Excel Workbook (.xlsx)|*.xlsx|All Files (*.*)|*.*";

            bool? result = saveFileDialog.ShowDialog();
            if (result == true)
            {
                try
                {
                    // create file
                    using (var workbook = new XLWorkbook())
                    {
                        // create datasheet
                        workbook.Worksheets.Add(dataTable);

                        // save it to relevant path
                        workbook.SaveAs(saveFileDialog.FileName);
                    }

                    MessageBox.Show("Successfully export the file!", "Success", MessageBoxButton.OK, MessageBoxImage.Information);
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error is:{ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
        }
    }
}

4、测试和验证

编译无误之后,就可以开始测试和验证。验证有两个部分,第一,需要看下对话框有没有弹出,提示我们文件已经成功导出;第二,需要看下导出的文件,里面的内容和我们之前设计的部分是不是真的一致。

相关推荐
嘉琪0018 分钟前
2025 js——面试题(7)——ajax相关
开发语言·javascript·ajax
SoniaChen3310 分钟前
Rust基础-part3-函数
开发语言·后端·rust
一个天蝎座 白勺 程序猿13 分钟前
飞算JavaAI进阶:重塑Java开发范式的AI革命
java·开发语言·人工智能
liu_yueyang15 分钟前
JavaScript VMP (Virtual Machine Protection) 分析与调试
开发语言·javascript·ecmascript
前端 贾公子17 分钟前
tailwindCSS === 使用插件自动类名排序
java·开发语言
10岁的博客17 分钟前
代码编程:一场思维与创造力的革命
开发语言·算法
七七七七0717 分钟前
C++类对象多态基础语法【超详细】
开发语言·c++
C嘎嘎嵌入式开发44 分钟前
python之set详谈
开发语言·python
定偶44 分钟前
进制转换小题
c语言·开发语言·数据结构·算法
小庞在加油1 小时前
Apollo源码架构解析---附C++代码设计示例
开发语言·c++·架构·自动驾驶·apollo