Unity 使用 ExcelDataReader 读取Excel表

文章目录

  • 1.下载NuGet包
  • 2.通过NuGet包获取dll
  • 3.将dll复制unity Plugins文件夹下
  • 4.代码获取Excel表内容

1.下载NuGet包

通过NuGet下载:

  • ExcelDataReader
  • ExcelDataReader.DataSet
  • 离线下载方法

2.通过NuGet包获取dll

根据编译时程序集找到dll位置,找到与unity3d的.net版本匹配的dll
在这里插入图片描述

3.将dll复制unity Plugins文件夹下

请添加图片描述

4.代码获取Excel表内容

这里给个异步读取Excel表的ExcelHelp类:

/** FileName:    ReadExcelTest* Author:      ming* CreateTime:  2024/11/15 10:52:36* Description: 读取Excel数据(程序运行期间只读取一次)*
*/using ExcelDataReader;
using System.Data;
using System.IO;
using System.Threading.Tasks;
using System;public class ExcelHelper
{private string _filePath;private DataSet _cacheDataSet;  // 缓存读取的DataSetprivate readonly object _lock = new object();   // 线程锁public ExcelHelper(string filePath){_filePath = filePath;}// 异步读取Excel数据public async Task<DataSet> ReadExcelAsync(){if (_cacheDataSet != null)return _cacheDataSet;return await Task.Run<DataSet>(() =>{lock (_lock){if (_cacheDataSet == null)  // 双重检查锁定{using (var stream = File.Open(_filePath, FileMode.Open, FileAccess.Read)){using (var reader = ExcelReaderFactory.CreateReader(stream)){_cacheDataSet = reader.AsDataSet();}}}}return _cacheDataSet;});}// 根据 sheet 名获取 DataTablepublic async Task<DataTable> GetSheetByNameAsync(string sheetName){await ReadExcelAsync();return _cacheDataSet.Tables[sheetName];}// 根据 sheet 索引获取 DataTablepublic async Task<DataTable> GetSheetByIndexAsync(int sheetIndex){await ReadExcelAsync();if (sheetIndex >= 0 && sheetIndex < _cacheDataSet.Tables.Count)return _cacheDataSet.Tables[sheetIndex];throw new ArgumentOutOfRangeException("Sheet index out of range");}// 获取指定行的内容(从 0 开始的行索引)public async Task<object[]> GetRowAsync(string sheetName, int rowIndex){var table = await GetSheetByNameAsync(sheetName);if (rowIndex >= 0 && rowIndex < table.Rows.Count){return table.Rows[rowIndex].ItemArray;}throw new ArgumentOutOfRangeException("Row index out of range");}// 获取指定列的内容(从 0 开始的列索引)public async Task<object[]> GetColumnAsync(string sheetName, int columnIndex){var table = await GetSheetByNameAsync(sheetName);if (columnIndex >= 0 && columnIndex < table.Rows.Count){var column = new object[table.Rows.Count];for (int i = 0; i < table.Rows.Count; i++){column[i] = table.Rows[i][columnIndex];}return column;}throw new ArgumentOutOfRangeException("Column index out of range");}// 获取指定单元格内容public async Task<object> GetCellAsync(string sheetName, int rowIndex, int columnIndex){var table = await GetSheetByNameAsync(sheetName);if ( rowIndex >= 0 && rowIndex < table.Rows.Count &&columnIndex >= 0 && columnIndex < table.Columns.Count ){return table.Rows[rowIndex][columnIndex];}throw new ArgumentOutOfRangeException("Row or column index out of range");}// 获取指定 Sheet 行数public async Task<int> GetRowCountAsync(string sheetName){var table = await GetSheetByNameAsync(sheetName);return table.Rows.Count;}// 获取指定 Sheet 列数public async Task<int> GetColumnCountAsync(string sheetName){var table = await GetSheetByNameAsync(sheetName);return table.Columns.Count;}
}

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

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

相关文章

【vmware+ubuntu16.04】ROS学习_博物馆仿真克隆ROS-Academy-for-Beginners软件包处理依赖报错问题

首先安装git 进入终端&#xff0c;输入sudo apt-get install git 安装后&#xff0c;创建一个工作空间名为tutorial_ws&#xff0c; 输入 mkdir tutorial_ws#创建工作空间 cd tutorial_ws#进入 mkdir src cd src git clone https://github.com/DroidAITech/ROS-Academy-for-Be…

九、FOC原理详解

1、FOC简介 FOC&#xff08;field-oriented control&#xff09;为磁场定向控制&#xff0c;又称为矢量控制&#xff08;vectorcontrol&#xff09;&#xff0c;是目前无刷直流电机&#xff08;BLDC&#xff09;和永磁同步电机&#xff08;PMSM&#xff09;高效控制的最佳选择…

Linux的指令(三)

1.grep指令 功能&#xff1a; 在文件中搜索字符串&#xff0c;将找到的行打印出来 -i&#xff1a;忽略大小写的不同&#xff0c;所以大小写视为一样 -n&#xff1a;顺便输出行号 -v:反向选择&#xff0c;就是显示出没有你输入要搜索内容的内容 代码示例&#xff1a; roo…

2025蓝桥杯(单片机)备赛--扩展外设之DS1302的使用(九)

1.DS1302数据手册的使用 a. DS1302 features: 工作电压&#xff1a;2V-5.5V 通信协议&#xff1a;3线接口&#xff08;CE、IO、SCLK&#xff09; 计时&#xff1a;秒、分、小时、月日期、月、星期、年&#xff08;闰年补偿器期至2100年&#xff09; b.原理图接线说明&#xff…

在CentOS中,通过nginx访问php

其实是nginx反向代理到php-fpm&#xff0c;就像nginx反向代理到tomcat。 1、安装PHP-FPM 1.1 安装 yum install php yum install php-fpm php-common 这里只安装了php-fpm&#xff0c;根据需要安装php模块&#xff0c;比如需要访问mysql则添加安装 php-mysqlnd。 1.2 启动…

Photino:通过.NET Core构建跨平台桌面应用程序,.net国产系统

一、Photino.NET简介&#xff1a; 最近发现了一个不错的框架 Photino.Net 一份代码运行&#xff0c;三个平台 windows max linux &#xff0c;其中windows10,windows11,ubuntu 18.04,ubuntu 20.04 已测试均可以。mac 因为没有相关电脑没有测试。 github:https://github.com/t…

编辑器vim 命令的学习

1.编辑器Vim 1.vim是一个专注的编辑器 2.是一个支持多模式的编辑器 1.1见一见&#xff1a; vim 的本质也是一条命令 退出来&#xff1a;-> Shift:q 先创建一个文件 再打开这个文件 进入后先按 I 然后就可以输入了 输入完后&#xff0c;保存退出 按Esc --> 来到最后一…

Ubuntu22.04LTS 部署前后端分离项目

一、安装mysql8.0 1. 安装mysql8.0 # 更新安装包管理工具 sudo apt-get update # 安装 mysql数据库&#xff0c;过程中的选项选择 y sudo apt-get install mysql-server # 启动mysql命令如下 &#xff08;停止mysql的命令为&#xff1a;sudo service mysql stop&#xff0…

Python爬虫:如何从1688阿里巴巴获取公司信息

在当今的数字化时代&#xff0c;数据已成为企业决策和市场分析的重要资产。对于市场研究人员和企业分析师来说&#xff0c;能够快速获取和分析大量数据至关重要。阿里巴巴的1688.com作为中国最大的B2B电子商务平台之一&#xff0c;拥有海量的企业档案和产品信息。本文将介绍如何…

10 基于深度学习的目标检测

首次完成时间&#xff1a;2024 年 11月 20 日 1. 使用OpenCV的dnn模块实现图像分类。 1&#xff09;程序代码&#xff1a; import numpy as np import cv2# 解析标签文件 row open("model1/synset_words.txt").read().strip().split("\n") class_label …

Spring WebFlux 高级实战(3-2)

1、SpringBoot 使用 1.1、Spring Core 中的响应式 Spring 生态系统的核心模块是Spring Core 模块。Spring 5.x 引入对响应式流和响应式库的原生支持&#xff0c;其中&#xff0c;响应式库包含RxJava 1/2 和Project Reactor 3。 1.1.1、响应式类型转换支持 为了支持响应式流规…

河道水位流量一体化自动监测系统:航运安全的护航使者

在广袤的水域世界中&#xff0c;航运安全始终是至关重要的课题。而河道水位流量一体化自动监测系统的出现&#xff0c;如同一位强大的护航使者&#xff0c;为航运事业的稳定发展提供了坚实的保障。 水位传感器&#xff1a;负责实时监测河道的水位变化。这些传感器通常采用先进的…

RHCE的学习(21)

第三章 Shell条件测试 用途 为了能够正确处理Shell程序运行过程中遇到的各种情况&#xff0c;Linux Shell提供了一组测试运算符。 通过这些运算符&#xff0c;Shell程序能够判断某种或者几个条件是否成立。 条件测试在各种流程控制语句&#xff0c;例如判断语句和循环语句中…

uni-app Vue3语法实现微信小程序样式穿透uview-plus框架

1 问题描述 我在用 uni-app vue3 语法开发微信小程序时&#xff0c;在项目中使用了 uview-plus 这一开源 UI 框架。在使用 up-text 组件时&#xff0c;想要给它添加一些样式&#xff0c;之前了解到微信小程序存在样式隔离的问题&#xff0c;也在uview-plus官网-注意事项中找到…

数据结构(双向链表——c语言实现)

双向链表相比于单向链表的优势&#xff1a; 1. 双向遍历的灵活性 双向链表&#xff1a;由于每个节点都包含指向前一个节点和下一个节点的指针&#xff0c;因此可以从头节点遍历到尾节点&#xff0c;也可以从尾节点遍历到头节点。这种双向遍历的灵活性使得在某些算法和操作中&a…

论文分享 | FuzzLLM:一种用于发现大语言模型中越狱漏洞的通用模糊测试框架

大语言模型是当前人工智能领域的前沿研究方向&#xff0c;在安全性方面大语言模型存在一些挑战和问题。分享一篇发表于2024年ICASSP会议的论文FuzzLLM&#xff0c;它设计了一种模糊测试框架&#xff0c;利用模型的能力去测试模型对越狱攻击的防护水平。 论文摘要 大语言模型中…

ES分词环境实战

文章目录 安装下载1.1 下载镜像1.2 单节点启动 防火墙设置异常处理【1】iptable链路中断 参考文档 参加完2024年11月软考&#xff0c;对ES的分词进行考查&#xff0c;前期有【 Docker 环境下安装部署 Elasticsearch 和 kibana】和【 Docker 环境下为 Elasticsearch 安装IK 分…

在 CentOS 系统上直接安装 MongoDB 4.0.25

文章目录 步骤 1&#xff1a;配置 MongoDB 官方源步骤 2&#xff1a;安装 MongoDB步骤 3&#xff1a;启动 MongoDB 服务步骤 4&#xff1a;验证安装步骤 5&#xff1a;可选配置注意事项 以下是在 CentOS 系统上直接安装 MongoDB 4.0.25 的详细步骤&#xff1a; 步骤 1&#x…

基于Vue+SpringBoot的求职招聘平台

平台概述 本平台是一个高效、便捷的人才与职位匹配系统&#xff0c;旨在为求职者与招聘者提供一站式服务。平台内设三大核心角色&#xff1a;求职者、招聘者以及超级管理员&#xff0c;每个角色拥有独特的功能模块&#xff0c;确保用户能够轻松完成从信息获取到最终录用的整个…

谈谈Spring的常见基础概念

文章是对Spring一些基础的底层概念进行分析&#xff0c;后续再遇到这些问题的时候&#xff0c;可以采用这些步骤进行详细解释。 一.谈谈SpringIOC的理解&#xff0c;原理与实现? 总&#xff1a; 1.控制反转&#xff1a; (1)原来的对象是由使用者来进行控制&#xff0c;有了S…