Unity3D读取Excel表格写入Excel表格

系列文章目录

unity工具


文章目录

  • 系列文章目录
  • 👉前言
  • 👉一、读取Excel表格
  • 👉二、写入Excel表格
  • 👉三、Fileinfo和Directoryinfo的操作
  • 👉四、壁纸分享
  • 👉总结


👉前言

有时候难免会遇到读取文件写入文件的操作,今天就来记录一下写入读取Excel的操作,阅读可能会花费几分钟时间,不要着急,慢慢赏阅哦,有什么不足,欢迎评论
大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
下面就让我们进入正文吧 !


提示:以下是本篇文章正文内容,下面案例可供参考

👉一、读取Excel表格

里面读取了表格数据和模型名字进行对比,然后给模型设置新的名字,具体需求还是自己修改代码,读取就是这么读取的,自行测试就好了哦
注意一下,如果代码报错的话,需要导入一下操作Excel的几个dll文件,如果不报错的话,就说明已经导入过了
dll下载链接请自取
代码如下

using Excel;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
public class ReadExcelController1 : MonoBehaviour
{public string excelName;  //表格文件名字public Transform cubetrans;Dictionary<string, string > tableData = new Dictionary<string, string>();// Start is called before the first frame updatevoid Start(){ReadDataGame(ExcelControl(Application.streamingAssetsPath + "/"+excelName+".xlsx"));//BianLiModel();}public void BianLiModel(){foreach (var item in cubetrans.GetComponentsInChildren <MeshRenderer>()){if (tableData.ContainsKey(item.name)){item.name = tableData[item.name];}else{Debug.LogError(item.name);}}}/// <summary>/// 表格数据集合/// </summary>//private DataSet mResultSet;/// <summary>/// 读取表数据/// </summary>/// <param name="excelFile">Excel file.</param>public DataSet ExcelControl(string excelFile){DataSet mResultSet=new DataSet ();FileStream mStream = File.Open(excelFile, FileMode.Open, FileAccess.Read);IExcelDataReader mExcelReader = ExcelReaderFactory.CreateOpenXmlReader(mStream);mResultSet = mExcelReader.AsDataSet();return mResultSet;}public void ReadDataGame(DataSet mResultSet){if (mResultSet.Tables.Count < 1)return;//默认读取第一个数据表DataTable mSheet = mResultSet.Tables[0];//判断数据表内是否存在数据if (mSheet.Rows.Count < 1)return;//读取数据表行数和列数int rowCount = mSheet.Rows.Count;int colCount = mSheet.Columns.Count;Debug.Log("行:" + rowCount + "列:" + colCount);//准备一个列表存储整个表的数据List<Dictionary<string, object>> table = new List<Dictionary<string, object>>();//读取数据for (int i = 1; i < rowCount; i++){//准备一个字典存储每一行的数据Dictionary<string, object> row = new Dictionary<string, object>();string strname="";string strname1 = "";for (int j = 0; j < 2; j++){//读取第1行数据作为表头字段string field = mSheet.Rows[0][j].ToString();//Key-Value对应row[field] = mSheet.Rows[i][j];//因为我只需要表格前两个数据,所以只保存前两个,有需要全部的把上面的for j<2 改成j<colCount就行了if (mSheet.Rows[i][0].ToString()==null){continue;}//获取表格里面的数据  0就是第一列  1 是第二列strname = (mSheet.Rows[i][1].ToString());strname1 = (mSheet.Rows[i][0].ToString());}Debug.Log(strname1 + "  " + strname);if (!tableData.ContainsKey (strname1)){tableData.Add(strname, strname1);}//添加到表数据中table.Add(row);}Debug.Log("添加结束");}private void Update(){if (Input.GetKeyDown (KeyCode.K)){BianLiModel();}}
}

👉二、写入Excel表格

测试写的把模型子物体名字写入到表格中
具体代码如下

using OfficeOpenXml;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;public class CreExcelDatas : MonoBehaviour
{public string pathExcel;public Transform transform1, transform2;// Start is called before the first frame updatevoid Start(){pathExcel = Application.streamingAssetsPath + "/数据.xlsx";WriteExcel(pathExcel);}/// <summary>/// 写入表格数据/// </summary>/// <param name="outpath"></param>public void WriteExcel(string outpath){FileInfo newFile = new FileInfo(outpath);//不存在此文件会自动生成文件if (newFile.Exists){//如果存在就删除数据重新生成newFile.Delete();newFile = new FileInfo(outpath);}    using (ExcelPackage package = new ExcelPackage(newFile)){ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet1");for (int i = 0; i < transform1.childCount; i++){//1  就是第一列   2就是第二列    i+1就是第一行  worksheet.Cells[i + 1, 1].Value = transform1.GetChild (i).name;}for (int i = 0; i < transform2.childCount ; i++){worksheet.Cells[i + 1, 2].Value = transform2.GetChild(i).name;}package.Save();Debug.Log("文件保存完成");}}}

接下来在记录一下文件操作和文件夹的操作吧

👉三、Fileinfo和Directoryinfo的操作

对于文件和文件夹的操作,Fileinfo和Directoryinfo是对文件和文件夹进行一些属性类的操作,比如文件的创造,移动,删除,重建,是不能对文件里面具体的内容进行操作的。
FileInfo 类 fileinfo类是对于文件的操作

判断文件存在不存在的方法

 FileInfo strint = new FileInfo(str.ToString());if (!strint.Exists )  //如果不存在 就创建{strint.Create();}

下面是directoryinfo类主要是对文件夹进行操作

DirectoryInfo dirinfo = new DirectoryInfo(@"D:\text");//获取其父目录;if (!dirinfo.Exists)//如果该文件夹不存在,则新建一个该文件夹{dirinfo.Create();}dirinfo.CreateSubdirectory("这是子目录");

对文件的其他操作,判断存不存在

//1.判断指定路径内是否有指定文件夹-Directory.Existsif (System.IO.Directory.Exists(){Debug.Log("文件夹已经存在");            }else{Debug.Log("文件夹不存在");            }//2.判断指定路径内是否有指定文件- File.Existsif (System.IO.File.Exists(){Debug.Log("文件已经存在");            }else{Debug.Log("文件不存在");            }

具体其他的文件操作类,什么写入读取啊请参考我其他文章吧,这里我就不写的了
其他类的链接分享

👉四、壁纸分享

请添加图片描述
请添加图片描述

👉总结

本次总结的就是读取写入表格的操作,有需要会继续添加新的
如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒

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

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

相关文章

uniapp页面vue3下拉触底发送获取新数据请求实现分页功能

页面下拉触底获取新数据实现分页功能实现方式有两种&#xff0c;根据自己的业务需求来定&#xff0c;不同的方案适用场景不一样&#xff0c;有的是一整个页面下拉获取新数据&#xff0c;有的是部分盒子内容滚动到底部时候实现获取新数据&#xff0c;下面讨论一下两种方式的区别…

网络通讯聊天工具的实现

学习网络与通信&#xff0c;实现聊天界面能够通过服务器进行私聊和群聊的功能。 1.服务器&#xff1a;ServeSocket 客户端先发送消息给服务器&#xff0c;服务器接受消息后再发送给客户端。 利用服务器随时监听。等待客户端的请求&#xff0c;一旦有请求便生产一个socket套接…

js深入理解对象的 属性(properties)的特殊 特性(attributes)

对象 js对象 // 构造一个对象 let obj {}; let obj new Object(); 我们知道js中一切皆对象&#xff0c;对象是一个键值对集合&#xff08;key: value)&#xff0c;一个键(key)对应一个值(value)&#xff0c;而每个键都是这个对象的属性&#xff0c;我们可以通过对象的属性来…

Java绩效考核系统源码 springboot员工绩效考核系统源码

Java绩效考核系统源码 springboot员工绩效考核系统源码-009 源码下载地址&#xff1a;https://download.csdn.net/download/xiaohua1992/89352195 项目介绍 本系统的功能分为管理员和员工两个角色 管理员的功能有&#xff1a; &#xff08;1&#xff09;个人中心管理功能&a…

一点点 cv 经验 1:cv方向、模型评估、输入尺寸、目标检测器设计

一点点 cv 经验 1&#xff1a;cv方向、模型评估、输入尺寸、目标检测器设计 cv 方向Pytorch数据集划分 模型评估误差偏差方差噪声 输入尺寸方法一&#xff1a;让数据适应模型方法二&#xff1a;修改模型适应数据方法三&#xff1a;划分Patch&#xff0c;分别处理 目标检测器结构…

【Redis】 关于列表类型

文章目录 &#x1f343;前言&#x1f340;常见操作命令介绍&#x1f6a9;lpush&#x1f6a9;lpushx&#x1f6a9;rpush&#x1f6a9;rpushx&#x1f6a9;lrange&#x1f6a9;lpop&#x1f6a9;rpop&#x1f6a9;lindex&#x1f6a9;linsert&#x1f6a9;llen&#x1f6a9;lrem&…

Python3 笔记:Python之禅

打开Python Shell&#xff0c;输入import this&#xff0c;按回车键运行程序。 Beautiful is better than ugly. 优雅胜于丑陋。 Explicit is better than implicit. 明确胜于含糊。 Simple is better than complex. 简单胜于复杂。

Ansible02-Ansible Modules模块详解

目录 写在前面4. Ansible Modules 模块4.1 Ansible常用模块4.1.1 Command模块4.1.2 shell模块4.1.3 scrpit模块4.1.4 file模块4.1.5 copy模块4.1.6 lineinfile模块4.1.7 systemd模块4.1.8 yum模块4.1.9 get_url模块4.1.10 yum_repository模块4.1.11 user模块4.1.12 group模块4.…

在C++中自定义命名空间,在命名空间中定义string变量,同时定义一个函数实现单词逆置

代码 #include <iostream> #include <cstring> using namespace std; namespace my_space {string s;void reverse(string s);//定义逆置函数 } using namespace my_space; void my_space::reverse(string s){int lens.size();int i0;int jlen-1;while(i<j){//…

设计模式17——模板方法模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 模板方法模式&#xff08;Temp…

买车是小米su7还是model3?这个AI在我这里“干掉了”百万车评人

作者 | 曾响铃 文 | 响铃说 43天交付1万辆新车&#xff01;雷军的微博一发&#xff0c;又把小米汽车推上了热搜。 自小米su7问世以来&#xff0c;天天刷屏。说不心动&#xff0c;那是假的&#xff0c;身边好几个朋友都按捺不住要下订一台了。 但真要买&#xff0c;还是忍不住…

容器组件:页面和自定义组件生命周期(HarmonyOS学习第五课)

页面和自定义组件生命周期 先明确自定义组件和页面的关系&#xff1a; 自定义组件:Component装饰的UI单元&#xff0c;可以组合多个系统组件实现U的复用。 页面:即应用的UI页面。可以由一个或者多个自定义组件组成&#xff0c;Entry装饰的自定义组件为贞面的入口组件&#xf…

5月26(信息差)

&#x1f30d; 珠峰登顶“堵车”后冰架断裂 5人坠崖 2人没爬上来&#xff01; 珠峰登顶“堵车”后冰架断裂 5人坠崖 2人没爬上来&#xff01; &#x1f384; Windows 11 Beta 22635.3646 预览版发布&#xff1a;中国大陆地区新增“微软电脑管家”应用 ✨ 成都限购解除即将满…

DOS学习-目录与文件应用操作经典案例-ren

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 案例 1&#xff1a;重命名当前目录下的文件 案例 2&#xff1a…

Postman快捷功能-快速填写请求头

大家好&#xff0c;之前给大家分享关于 Postman 工具的基础使用&#xff0c;今天给大家介绍一个快捷功能&#xff0c;可以一定程度提高我们使用 Postman 工具的效率&#xff0c;在我们进行接口测试时&#xff0c;几乎每个接口都需要填写 Headers&#xff0c;且 Headers 中的参数…

【leetcode面试经典150题】-80. 删除有序数组中的重复项 II

【leetcode面试经典150题】-80. 删除有序数组中的重复项 II 1 题目介绍2 个人解题思路2.1 代码2.2 思路 3 官方题解 1 题目介绍 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组…

一键接入大模型:One-Api本地安装配置实操,POSTMAN、APIFOX调用CURL

前言 最近准备学习一下 Semantic Kernel, OpenAI 的 Api 申请麻烦,所以想通过 One-api 对接一下国内的在线大模型,先熟悉一下 Semantic Kernel 的基本用法,本篇文章重点记录一下OneApi安装配置的过程。 讯飞星火有 3.5 模型的 200w 个人免费 token,可以拿来学习。 讯飞星…

推导2维镜像变换(Reflection Transform)的公式

我们知道2维的旋转变换公式为 Q ( cos ⁡ ( θ ) sin ⁡ ( θ ) − sin ⁡ ( θ ) cos ⁡ ( θ ) ) Q\left( \begin{matrix} \cos \left( \theta \right)& \sin \left( \theta \right)\\ -\sin \left( \theta \right)& \cos \left( \theta \right)\\ \end{matrix} \r…

UTF-8格式大统一:转码高效指南,彻底解决文件编码乱码问题!

文章目录 1 背景说明2 统一的好处3 对增量代码怎么进行统一4 对存量代码怎么进行统一4.1 指定单一文件夹&#xff0c;对里面的 .h .cpp 文件全转换4.2 指定单一文件夹&#xff0c;对里面的.h .cpp文件按需转换4.3 指定多文件夹&#xff0c;对里面的.h .cpp文件全部转换4.4 指定…

用数据,简单点!奇点云2024 StartDT Day数智科技大会,直播见

在充满挑战的2024&#xff0c;企业如何以最小化的资源投入和试错成本&#xff0c;挖掘新的增长机会&#xff0c;实现确定性发展&#xff1f; “简单点”是当前商业环境的应对策略&#xff0c;也是奇点云2024 StartDT Day的核心理念。 5月28日&#xff0c;由奇点云主办的2024 S…