使用EPPlus实现C#控件Excel文件内容导入转换

news2024/11/24 22:24:34

使用EPPlus实现C#控件Excel文件内容导入转换

1.添加EPPlus

在使用EPPlus库时,你需要确保在项目中添加了正确的引用。你可以通过以下方式添加引用:

  1. 打开你的项目。

  2. 在“解决方案资源管理器”中,右键单击“引用”并选择“管理NuGet程序包”。
    请添加图片描述

  3. 在NuGet包管理器中,搜索“EPPlus”。
    请添加图片描述

  4. 安装EPPlus库。
    请添加图片描述

请添加图片描述

一旦你完成了这些步骤,你的项目就会包含所需的EPPlus引用,并且你应该能够在代码中使用using OfficeOpenXml;而不会遇到错误。

如果你仍然遇到问题,请确保你的开发环境中已经安装了EPPlus库,并且你的项目引用了正确的库版本。

2.示例操作

要实现将Excel表格中的数据解析为CurveEntity实体类,并将解析后的数据存储到curveEntities列表中,然后传递给控件,可以使用C#和一些库来处理Excel文件。

在这个示例中,我将使用EPPlus库来读取Excel文件。首先,确保你已经将EPPlus库添加到你的项目中。

接下来,创建一个方法来解析Excel表格并将数据存储到curveEntities列表中。下面是一个示例代码:

// *****************************************************************************
// File: ExcelParser.cs
// Author: 李文国
// Email: LJHX5470@qq.com
// Date: 2023-09-25
// Project Name: WCSDynamics
// Version: 1.2.3
// Company: EVADA
// Mentor: 叶信文
// Copyright (C) 2023 EVADA. All rights reserved.
// *****************************************************************************

using OfficeOpenXml;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using WCSDynamics.MinWCSDynamics.DataInput;

namespace WCSDynamics.MinWCSDynamics.Utility
{
    public class ExcelParser
    {
        private List<CurveEntity> curveEntities = new List<CurveEntity>();

        public List<CurveEntity> ParseExcel(string filePath)
        {
            FileInfo fileInfo = new FileInfo(filePath);

            using (ExcelPackage package = new ExcelPackage(fileInfo))
            {
                ExcelPackage.LicenseContext = LicenseContext.NonCommercial;//EPPlus 5.0 以后的版本需要指定 商业证书 或者非商业证书。你需要在代码里指定证书或者降低EPPlus版本。在代码里面指定非商业证书
                ExcelWorksheet worksheet = package.Workbook.Worksheets.FirstOrDefault();

                if (worksheet == null)
                {
                    throw new Exception("Excel文件为空或不包含任何工作表。");
                }

                int rowCount = worksheet.Dimension.Rows;

                for (int row = 2; row <= rowCount; row++)
                {
                    string name = worksheet.Cells[row, 1].Text; // 读取曲线名称
                    Color lineColor = ColorTranslator.FromHtml(worksheet.Cells[row, 2].Text); // 读取曲线颜色
                    List<PointF> dataSource = ParsePointData(worksheet.Cells[row, 3].Text); // 读取数据点
                    bool isVisible = bool.Parse(worksheet.Cells[row, 4].Text); // 读取是否可见
                    int pointCount = dataSource.Count; // 计算数据点个数
                    string description = worksheet.Cells[row, 5].Text; // 读取曲线介绍

                    CurveEntity curveEntity = new CurveEntity
                    {
                        Name = name,
                        LineColor = lineColor,
                        _dataSource = dataSource,
                        IsVisible = isVisible,
                        PointCount = pointCount,
                        Description = description
                    };

                    curveEntities.Add(curveEntity);
                }
            }

            return curveEntities;
        }

        private List<PointF> ParsePointData(string pointData)
        {
            // 解析逗号分隔的坐标数据,例如:"1.0,2.0;3.0,4.0;5.0,6.0"
            List<PointF> points = new List<PointF>();
            string[] pointPairs = pointData.Split(';');
            foreach (string pair in pointPairs)
            {
                string[] coordinates = pair.Split(',');
                if (coordinates.Length == 2)
                {
                    float x = float.Parse(coordinates[0]);
                    float y = float.Parse(coordinates[1]);
                    points.Add(new PointF(x, y));
                }
            }
            return points;
        }
    }

}

以上代码切记不可缺少:

ExcelPackage.LicenseContext = LicenseContext.NonCommercial;//EPPlus 5.0 以后的版本需要指定 商业证书 或者非商业证书。你需要在代码里指定证书或者降低EPPlus版本。在代码里面指定非商业证书

要实现将Excel表格中的数据解析为CurveEntity实体类,并将解析后的数据存储到curveEntities列表中,然后传递给控件,你可以使用C#和一些库来处理Excel文件。在这个示例中,我将使用EPPlus库来读取Excel文件。首先,确保你已经将EPPlus库添加到你的项目中。

接下来,创建一个方法来解析Excel表格并将数据存储到curveEntities列表中。下面是一个示例代码:

csharpCopy codeusing OfficeOpenXml;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;

public class ExcelParser
{
    private List<CurveEntity> curveEntities = new List<CurveEntity>();

    public List<CurveEntity> ParseExcel(string filePath)
    {
        FileInfo fileInfo = new FileInfo(filePath);

        using (ExcelPackage package = new ExcelPackage(fileInfo))
        {
            ExcelWorksheet worksheet = package.Workbook.Worksheets.FirstOrDefault();

            if (worksheet == null)
            {
                throw new Exception("Excel file is empty or does not contain any worksheets.");
            }

            int rowCount = worksheet.Dimension.Rows;

            for (int row = 2; row <= rowCount; row++)
            {
                string name = worksheet.Cells[row, 1].Text;
                Color lineColor = ColorTranslator.FromHtml(worksheet.Cells[row, 2].Text);
                List<PointF> dataSource = ParsePointData(worksheet.Cells[row, 3].Text);
                bool isVisible = bool.Parse(worksheet.Cells[row, 4].Text);
                int pointCount = dataSource.Count;
                string description = worksheet.Cells[row, 5].Text;

                CurveEntity curveEntity = new CurveEntity
                {
                    Name = name,
                    LineColor = lineColor,
                    _dataSource = dataSource,
                    IsVisible = isVisible,
                    PointCount = pointCount,
                    Description = description
                };

                curveEntities.Add(curveEntity);
            }
        }

        return curveEntities;
    }

    private List<PointF> ParsePointData(string pointData)
    {
        // 解析逗号分隔的坐标数据,例如:"1.0,2.0;3.0,4.0;5.0,6.0"
        List<PointF> points = new List<PointF>();
        string[] pointPairs = pointData.Split(';');
        foreach (string pair in pointPairs)
        {
            string[] coordinates = pair.Split(',');
            if (coordinates.Length == 2)
            {
                float x = float.Parse(coordinates[0]);
                float y = float.Parse(coordinates[1]);
                points.Add(new PointF(x, y));
            }
        }
        return points;
    }
}

然后,在你的应用程序中,你可以使用上述类来解析Excel文件,并将解析后的数据传递给控件。示例代码如下:

public class YourApplicationClass
{
    private List<CurveEntity> curveEntities;

    public void LoadExcelData(string filePath)
    {
        ExcelParser excelParser = new ExcelParser();
        curveEntities = excelParser.ParseExcel(filePath);

        // 将解析后的数据传递给控件
        wcsDynamicsControl1.curveEntities = curveEntities;
    }
}

确保将LoadExcelData方法调用与Excel文件的实际路径一起使用,以加载和解析数据并传递给控件。

以下是使用之前设计的ExcelParser类来解析Excel表格数据并传递给控件的示例控件测试代码:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace Test
{
    public partial class Form1 : Form
    {
        private List<CurveEntity> curveEntities = new List<CurveEntity>();

        public Form1()
        {
            InitializeComponent();

            // 解析Excel数据并将其存储到curveEntities集合中
            ExcelParser excelParser = new ExcelParser();
            curveEntities = excelParser.ParseExcel("your_excel_file_path.xlsx");

            // 将解析后的数据传递给控件
            wcsDynamicsControl1.curveEntities = this.curveEntities;
        }
    }
}

请将your_excel_file_path.xlsx替换为你实际的Excel文件路径。这段代码在构造函数中使用ExcelParser类来解析Excel文件,并将解析后的数据传递给控件。确保你的项目中已经包含了ExcelParser类的定义,并且已经正确引用了EPPlus库。

3.Excel文件举例

要创建一个.xlsx文件,以便使用之前提供的ExcelParser类来解析数据,你可以使用Excel编辑器(如Microsoft Excel)来创建文件,并确保以下格式:

  1. 创建一个包含以下列的Excel工作表:
    • 列1: 曲线名称
    • 列2: 曲线颜色(使用HTML颜色表示,例如"#FF0000"表示红色)
    • 列3: 数据点坐标(以逗号分隔的坐标对,用分号分隔不同的数据点,例如"1.0,2.0;3.0,4.0;5.0,6.0")
    • 列4: 是否可见(使用"true"或"false"表示)
    • 列5: 曲线介绍
  2. 在工作表的行中填入数据。以下是一个示例:
曲线名称曲线颜色数据点坐标是否可见曲线介绍
SPU1#FF00001.0,2.0;2.0,4.0;3.0,6.0true曲线1
监控2#0000FF1.0,3.0;2.0,5.0;3.0,7.0true曲线2
电力3#FFFF001.0,4.0;2.0,6.0;3.0,8.0true曲线3

我是将军,我一直都在,。!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 文件和目录列表(ls 命令)

Linux 文件和目录列表&#xff08;ls 命令&#xff09; 要想知道系统中有哪些文件&#xff0c;可以使用列表命令&#xff08; ls &#xff09;。 文章目录 Linux 文件和目录列表&#xff08;ls 命令&#xff09;一、基本列表功能1. ls 命令基本形式2. ls 命令 -F 参数3. ls 命…

【笔记】ssh link-local 地址登录

1. link-local 地址 IPv6 中在局域网中是使用 link-local 地址通信的。其以 fe80:: 开头。它的形式跟物理地址 mac 关联。只要 mac 没变&#xff0c;那么&#xff0c;link-local 地址就不变。 2. 使用 link-local 地址的场景 自己搭建了一个局域网&#xff0c;有两台主机&am…

Spring整合RabbitMQ——消费者

1.配置consumer xml配置文件 2. 实现MessageListener接口 并重写onMessage方法

UG NX二次开发(C++)-采用NXOpen方法创建同步建模中的偏置曲面

文章目录 1、 前言2、在UG NX中的偏置操作3、采用NXOpen二次开发偏置曲面4、测试方法4.1 创建UI界面4.2 创建工程4.3 生成结果1、 前言 在UG NX二次开发(C++)中,通过UFun(Open C)函数进行开发的文章比较多,我们这个专栏的博客是主要采用NXOpen开发的,对于这二者的区别,我…

【面试题】面试官:说说你对js中的 防抖 和 节流 的理解

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 表妹一键制作自己的五星红旗国庆头像&#xff0c;超好看 前言 看到这个题目我想肯定会有人说&#xff1a;不会吧&#xff0c;都3202年了&#xff0c;还…

网络安全--IDS--入侵检测

1. 什么是IDS&#xff1f; IDS---入侵检测是防火墙的一个有力补充&#xff0c;形成防御闭环&#xff0c;可以及时、准确、全面的发现入侵弥补防火墙对应用层检查的缺失。对系统的运行状态进行监视&#xff0c;发现各种攻击企图、过程、结果&#xff0c;来保证系统资源的安全&a…

vue造轮子完整指南--npm组件包开发步骤

一、项目包文件的创建和初始化。 1. 新建项目包。 vue create <Project Name> //用于发布npm包的项目文件名 ps:一般选择自定义&#xff0c;然后不需要Vuex和Router&#xff0c;其他选项按自己实际情况选择安装即可。 2.修改原始src文件名、新增组件项目存放文件和修改…

大模型时代,如何找准AI发展新方向?TVP读书会与你共探

引言 随着 ChatGPT 掀起人工智能的发展狂潮&#xff0c;大模型时代悄然来临。大模型的出现让人们看到了人工智能在某些方面几乎接近人类智能的“威力”&#xff0c;也由此使人们产生了关于 AGI 的期盼与隐忧。其中&#xff0c;关于大模型是否是人工智能发展的拐点、科技从业者又…

使用chat GPT 生成一个js 生成天数的方法

function calculateDaysDifference(targetDateString) {const currentDate new Date();const targetDate new Date(targetDateString);// 计算毫秒差异const timeDifference targetDate - currentDate;// 计算天数差异&#xff0c;如果结果为负数&#xff0c;则设置为0const…

c语言结构体的内存对齐

前言&#xff1a; c语言中结构体的空间大小怎么算呢&#xff1f;就是把里面所有变量的字节大小全部加起来吗&#xff1f; 如果你这么想&#xff0c;说明你对结构体还不够了解&#xff0c;而要想知道结构体开辟空间的规则&#xff0c;那我们就必须先要知道内存对齐是什么。 接…

【链表】排序链表-力扣148题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

Spring整合第三方框架-MyBatis原始操作代码

建议自己写一下 实体类&#xff0c;用于封装数据库数据 package com.example.pojo;import java.util.Date;public class Emp {private Integer id;private String username;private String password;private String name;private Integer gender;private String image;privat…

“ElementUI实现动态树和动态表格的综合应用“

目录 引言1. ElementUI树1.1 树的基本概念1.2 示例代码和效果展示 2. ElementUI实现动态表格2.1 表格的基本概念2.2 示例代码和效果展示 总结 引言 在前端开发中&#xff0c;动态树和动态表格是常见的功能需求。ElementUI是一套基于Vue.js的组件库&#xff0c;提供了丰富的UI组…

酒店预订小程序制作详细步骤解析

" 随着移动设备的普及和互联网技术的不断发展&#xff0c;小程序成为了一个备受关注的应用领域。特别是在酒店预订行业&#xff0c;小程序可以为酒店带来更多的客源和方便快捷的预订服务。下面是酒店预订小程序的制作详细步骤解析。 第一步&#xff1a;注册登录【乔拓云】…

消费增值模式:消费送积分,只涨不跌的商业模式!

大家好&#xff0c;我是微三云吴军&#xff0c;您们的专属私域电商管家&#xff0c;国庆将至&#xff0c;中秋将至&#xff0c;祝大家度过一个愉快的节假日。 我今天给大家带来的案例分析是我们一个客户的落地成功案例&#xff0c;一个月也做到了上百万&#xff0c;但是用户数…

24届近3年中国矿业大学自动化考研院校分析

所谓又专又精&#xff0c;专是指我们售后群团队上百人都是自动化研究生&#xff0c;精是指我们只做自动化这一门专业学科7年了&#xff0c;研究到极致&#xff01; &#x1f509;今天学姐给大家带来的是中国矿业大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 目录…

5+单细胞+脂质代谢+预后模型+实验

今天给同学们分享一篇5单细胞脂质代谢预后模型实验的生信文章“Single-cell transcriptome analysis reveals the metabolic changes and the prognostic value of malignant hepatocyte subpopulations and predict new therapeutic agents for hepatocellular carcinoma”&am…

【独家专访】“数网”同防筑牢屏障——新型电力系统网络安全保障体系需加快调整

随着全球数字化进程不断加快&#xff0c;在国际竞争和冲突中&#xff0c;网络战和数据战已然屡见不鲜。电力作为关系国计民生的关键行业&#xff0c;更成为网络攻击的重要对象。加强电力等关键信息基础设施的网络安全保障&#xff0c;是国家今后一段时期的重点工作。7月15日召开…

微信开发者工具appdata\local\微信开发者工具有啥用,能删掉吗?占用空间8G

你好这边 微信开发者工具\User Data 存储的都是一些用户开发者在工具的一些数据存储&#xff0c;不建议全部删除&#xff0c;这样可能你较常用的一些项目记录和缓存信息就会找不到&#xff0c;如果需要清理的话&#xff0c;可以考虑删除&#xff1a; WeappApplication 应用更新…

混淆技术研究笔记(一)常见工具介绍

混淆技术研究笔记包含多篇内容&#xff0c;记录了一次混淆的研究和应用的过程。 本文首发于 CSDN&#xff0c;随后会发布在 MyBatis 微信公众号&#xff0c;通过公众号可以免费阅读。 最近有一个 Java 的底层框架需要进行混淆&#xff08;从原始的 Java 项目改造为了 Maven 多模…