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

使用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.xdnf.cn/news/142769.html

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

相关文章

作为一名独立开发者,如何获取客户?

很多程序员想成为一名独立开发者&#xff0c;从事自由职业&#xff0c;最大的困难在于如何赚钱&#xff0c;进一步来说&#xff0c;就是如何找到自己的客户&#xff0c;有很多开发者拥有丰富的经验&#xff0c;优秀的能力&#xff0c;但无法吸引客户。这篇文章的灵感正是为此而…

Python实现猎人猎物优化算法(HPO)优化随机森林回归模型(RandomForestRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

一创聚宽的实盘就要关闭了,有没有好用的实盘平台推荐

挺多的&#xff0c;比较普遍的是QMT和Ptrade&#xff0c;python语言&#xff0c;易上手&#xff0c;通用性好&#xff0c;要说适用性可以考虑Ptrade&#xff0c;问一下你的客户经理有没有&#xff0c;用Ptrade的券商也多&#xff0c;如果之前用一创聚宽你可以无缝切换&#xff…

单链表详细解析|画图理解

前言&#xff1a; 在前面我们学习了顺序表&#xff0c;相当于数据结构的凉菜&#xff0c;今天我们正式开始数据结构的硬菜了&#xff0c;那就是链表&#xff0c;链表有多种结构&#xff0c;但我们实际中最常用的还是无头单向非循环链表和带头双向循环链表&#xff0c;我们今天先…

ELF文件结构

目录 ELF文件类型 ELF文件结构 通过链接视角分析目标文件 ELF文件头(ELF Header) 节头表 .text代码节 .data 数据节 .rodata 只读数据节 .bss节 其他常见的节 字符串节 符号表 重定位表 通过运行视角分析目标文件 本节内容&#xff1a; ELF文件类型ELF文件结构 …

san.js源码解读之工具(util)篇——splitStr2Obj函数

一、 源码解析 /*** 将字符串逗号切分返回对象** param {string} source 源字符串* return {Object}*/ function splitStr2Obj(source) {var result {};each( // 2source.split(,), // 1function (key) { // 3result[key] key;});return result; }把字符串通过 split 函数以…

【AI视野·今日Robot 机器人论文速览 第三十六期】Tue, 19 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Tue, 19 Sep 2023 (showing first 100 of 112 entries) Totally 112 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;In-Hand Object Rotation, RotateIt 提出了一种基于视觉与触觉的物体旋转朝向的方法…

一文了解优先考虑结果的以「意图」为中心的 Intent-Centric 架构

Web3 用户体验成是阻碍区块链被大规模采用的原因之一&#xff0c;而 Intent-Centric 架构形式极大简化了用户的体验门槛。 Ac-Core&#xff1a;实现意图所需元素&#xff1a;1&#xff09;账户抽象&#xff1a;利用捆绑器加代付合约完成适合开发者的狭义意图&#xff1b;2&…

【萌新的RiscV学习之流水线结构的概述-7】

萌新的RiscV学习之流水线结构的概述-7 之前写完了单周期的指令 目前朝着流水线迈进 由于涉及学业机密 就不展示代码了 主要展示学习过程和一些想法 由于时钟周期必须满足所有指令中最坏的情况&#xff0c;所以不能使用那些缩短常用指令执行时间而不改变最坏情况的实现技术。因…

链表(单链表、双链表)

前言&#xff1a;链表是算法中比较难理解的部分&#xff0c;本博客记录单链表、双链表学习&#xff0c;理解节点和指针的使用&#xff0c;主要内容包括&#xff1a;使用python创建链表、实现链表常见的操作。 目录 单链表 双链表 单链表 引入链表的背景&#xff1a; 先来看…

2023年最新电商某东app端sign签名算法与cipher加解密逆向分析(2023-09-26)

前言&#xff1a; 本文仅供学习交流&#xff0c;只提供关键思路不会给出完整代码&#xff0c;严禁用于非法用途&#xff0c;若有侵权请联系我删除&#xff01;技术交流合作请私信&#xff01; 一.工具的选择&#xff08;抓包工具的选择&#xff0c;是门学问&#xff09; 用…

Android存储权限完美适配(Android11及以上适配)

一、Bug简述 一个很普通的需求&#xff0c;需要下载图片到本地&#xff0c;我的三个测试机&#xff08;荣耀Android10&#xff0c;红米 11 和小米Android 13都没有问题&#xff09;。 然后&#xff0c;主角登场了&#xff0c;测试的三星Android 13 死活拉不起存储权限弹窗。 …

深入理解红黑树

小白慎入&#xff01;本文难度比较高&#xff0c;需要对红黑树有一定的了解再来看&#xff01; 红黑树 红黑树是一种高级数据结构&#xff0c;是平衡树大家族中的一员&#xff0c;并且听名字就知道这个玩意不是凡物&#xff0c;可能你从未听过&#xff0c;但是你一定会为这样的…

华为OD七日集训第6期 十一特辑 - 按算法分类,由易到难,循序渐进,玩转OD

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、优先队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治…

大咖共探AGI时代机遇,腾讯云助力大模型规模化应用提速

引言 2023 年&#xff0c;科技圈的“顶流”莫过于大模型。自 ChatGPT 的问世拉开大模型与生成式 AI 产业的发展序幕后&#xff0c;国内大模型快速跟进&#xff0c;已完成从技术到产品、再到商业的阶段跨越&#xff0c;并深入垂直行业领域。 新技术的爆发&#xff0c;催生新的应…

mdobus ASCII转CAN OPEN JAE1939协议网关

Modbus RTU协议转换网关是一种常见的设备&#xff0c;用于将Modbus RTU协议转换为其他通信协议。而CANopen是一种基于CAN总线的通信协议&#xff0c;主要用于工业自动化和控制系统中。本文将介绍Modbus RTU协议转换网关如何支持CANopen协议&#xff0c;以及该功能的应用场景和优…

洗地机哪个牌子好用又实惠?口碑最好的洗地机推荐

智能技术飞速发展的时代&#xff0c;扫地机器人这类智能家电其实也在顺应潮流和用户需求&#xff0c;不断更新迭代。暂且不说市面上现有多少个洗地机品牌&#xff0c;单单一个洗地机品牌旗下&#xff0c;其实每年都会有多个系列的新品亮相&#xff0c;我们面对的选择多了&#…

javaee之黑马乐优商城6

商品品牌的查询 上面就是我们需要根据分类id去找品牌 假设我们现在拿到的是 商品的分类id&#xff0c;我们需要根据分类id查询出对应的品牌即可 下面我们拿到上面的接口&#xff0c;直接撸代码 这个是和品牌相关联的操作&#xff0c;因为先去看一下BrandMapper,这个mapper是…

OpenCV显示10bit Raw数据

参考&#xff1a;10 12 14bit图像存储格式&#xff0c;利用Opencv显示10bit Raw数据,并根据鼠标的移动显示对应位置的灰度值。其他bit位数的Raw数据方法类似。 代码实现&#xff1a; #include<opencv2/opencv.hpp> #include<iostream> #include<opencv/highgu…

Qt扩展-QCustomPlot 简介及配置

QCustomPlot 简介及配置 一、概述二、安装教程三、帮助文档的集成 一、概述 QCustomPlot是一个用于绘图和数据可视化的Qt 控件。它没有进一步的依赖关系&#xff0c;并且有良好的文档记录。这个绘图库专注于制作好看的、发布质量的2D绘图、图形和图表&#xff0c;以及为实时可…