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.mzph.cn/pingmian/14148.shtml

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

相关文章

提供一个c# winform的多语言框架源码,采用json格式作为语言包,使用简单易于管理加载且不卡UI,支持“语言分级”管理

提供一个c# winform的多语言框架源码&#xff0c;采用json格式作为语言包&#xff0c;不使用resx资源&#xff0c;当然本质一样的&#xff0c;你也可以改为resx 一、先看下测试界面 演示了基本的功能&#xff1a;切换语言&#xff0c;如何加载语言&#xff0c;如何分级加载语…

【webrtc】内置opus解码器的移植

m98 ,不知道是什么版本的opus,之前的交叉编译构建: 【mia】ffmpeg + opus 交叉编译 【mia】ubuntu22.04 : mingw:编译ffmpeg支持opus编解码 看起来是opus是1.3.1 只需要移植libopus和opus的webrtc解码部分即可。 linux构建的windows可运行的opus库 G:\NDDEV\aliply-0.4\C…

如何为社交feed场景设计缓存体系?no.35

Feed 流场景分析 Feed 流是很多移动互联网系统的重要一环&#xff0c;如微博、微信朋友圈、QQ 好友动态、头条/抖音信息流等。虽然这些产品形态各不相同&#xff0c;但业务处理逻辑却大体相同。用户日常的“刷刷刷”&#xff0c;就是在获取 Feed 流&#xff0c;这也是 Feed 流的…

达梦数据库详解

达梦认证是指针对中国数据库管理系统&#xff08;DBMS&#xff09;厂商达梦公司所推出的数据库产品&#xff0c;即达梦数据库&#xff08;DMDB&#xff09;&#xff0c;进行的一种官方认证体系。达梦认证旨在验证数据库管理人员对达梦数据库产品的掌握程度&#xff0c;及其在数…

【HUST】信道编码|基于LDPC码的物理层安全编码方案概述

本文对方案的总结是靠 Kimi 阅读相关论文后生成的&#xff0c;我只看了标题和摘要感觉确实是这么回事&#xff0c;并没有阅读原文。 行文逻辑&#xff1a;是我自己设定的&#xff0c;但我并不是这个研究领域的&#xff0c;所以如果章节划分时有问题&#xff0c;期待指出&#x…

FTP文件传输议

FTP是一种文件传输协议&#xff1a;用来上传和下载&#xff0c;实现远程共享文件&#xff0c;和统一管理文件 工作原理&#xff1a;用于互联网上的控制文件的双向传输是一个应用程序。工作在TCP/IP协议簇的&#xff0c;其传输协议是TCP协议提高文件传输的共享性和可靠性&#…

8.STL中Vector容器的常见操作(附习题)

目录 1.vector的介绍 2 vector的使用 2.1 vector的定义 2.2 vector iterator 的使用 2.3 vector 空间增长问题 2.3 vector 增删查改 2.4 vector 迭代器失效问题 2.5 vector 在OJ中的使用 1.vector的介绍 vector是表示可变大小数组的序列容器。 就像数组一样&#xff0…

【Unitydemo制作】音游制作—控制器与特效

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;就业…

儿童卧室灯品牌该如何挑选?几款专业儿童卧室灯品牌分享

近视在儿童中愈发普遍&#xff0c;许多家长开始认识到&#xff0c;除了学业成绩之外&#xff0c;孩子的视力健康同样重要。毕竟&#xff0c;学业的落后可以逐渐弥补&#xff0c;而一旦孩子近视&#xff0c;眼镜便可能成为长期伴随。因此&#xff0c;专业的护眼台灯对于每个家庭…

大泽动力应急排水方舱功能介绍

一、排水方舱简介及其应用 排水方舱&#xff0c;亦被称为扬水设备&#xff0c;主要用于排除船舶内的积水&#xff0c;保证船体内的稳定与干燥。它常与抽水设备结合使用&#xff0c;能将船体内的水抽离并排放到外部&#xff0c;从而确保船只的正常运行。 二、排水方舱的运作方式…

链表经典OJ问题【环形链表】

题目导入 题目一&#xff1a;给你一个链表的头节点 head &#xff0c;判断链表中是否有环 题目二&#xff1a;给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 NULL。 题目一 给你一个链表的头节点 head &#xff0c;…

leetcode230 二叉搜索树中第K小的元素

题目 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 示例 输入&#xff1a;root [5,3,6,2,4,null,null,1], k 3 输出&#xff1a;3 解析 这道题应该是能做出…

【HMGD】STM32/GD32 I2C DMA 主从通信

STM32 I2C配置 主机配置 主机只要配置速度就行 从机配置 从机配置相同速度&#xff0c;可以设置第二地址 因为我的板子上面已经有了上拉电阻&#xff0c;所以可以直接通信 STM32 I2C DMA 定长主从通信代码示例 int state 0; static uint8_t I2C_recvBuf[10] {0}; stat…

扭矩拧紧螺栓简便的估算方法

扭矩拧紧螺栓简便的估算方法。 计算公式&#xff1a; T K x D x P 其中&#xff1a;T为拧紧力矩&#xff1b;D为螺纹公称直径&#xff1b;P为预紧力&#xff1b;K为拧紧系数。 预紧力计算公式&#xff1a;P(0.75~0.9) σsAs&#xff1b;其中前面系数对可拆连接取0.75&#xff0…

NLP(18)--大模型发展(2)

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 Transformer结构&#xff1a; LLM的结构变化&#xff1a; Muti-head 共享&#xff1a; Q继续切割为muti-head,但是K,V少切&#xff0c;比如切为2个&#xff0c;然后复制到n个muti-head减少参数量&#xff0c;加速训练 atte…

运维开发.索引引擎ElasticSearch.倒序索引的概念

运维开发.索引引擎ElasticSearch 倒序索引的概念 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn…

两步将 CentOS 6.0 原地升级并迁移至 RHEL 7.9

《OpenShift / RHEL / DevSecOps 汇总目录》 说明 本文介绍如何将一个 CentOS 6.0 的系统升级并转换迁移到 RHEL 7.9。 本文是《在离线环境中将 CentOS 7.X 原地升级并迁移至 RHEL 7.9》阶进篇。 所有被测软件的验证操作可参见上述前文中对应章节的说明。 准备 CentOS 6.…

如何选择序列化协议:关键因素与场景分析

如何选择序列化协议&#xff1a;关键因素与场景分析 序列化协议的选择直接影响着系统的性能、可维护性及跨平台兼容性。以下是针对不同场景下&#xff0c;几种常见序列化协议的选择建议&#xff1a; 1. 公司间系统调用&#xff08;性能要求宽松&#xff09; SOAP (基于XML)&a…

1103 缘分数(测试点4)

solution 测试点4&#xff1a;1 1不符合缘分数定义&#xff0c;但是这个判断能够通过记得排除掉 #include<iostream> #include<cmath> using namespace std; bool judge(int n){int t sqrt(n);if(t * t n) return true;return false; } int main(){int n, m, c…

【大比武07】人工智能技术赋能城建档案高质量发展

关注我们 - 数字罗塞塔计划 - # 大比武2024 本篇是参加“华夏伟业”杯第二届档案信息化公司业务与技术实力大比武&#xff08;简称“大比武 2024”&#xff09;的投稿文章&#xff0c;来自讯飞知喻&#xff08;安徽&#xff09;科技有限公司&#xff0c;作者&#xff1a;张海剑…