Unity3D读取Excel表格写入Excel表格

news2024/11/20 3:33:48

系列文章目录

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 update
    void 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 update
    void 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.Exists

  if (System.IO.Directory.Exists()
        {
            Debug.Log("文件夹已经存在");            
        }
        else
        {
        Debug.Log("文件夹不存在");            

        }

//2.判断指定路径内是否有指定文件- File.Exists

if (System.IO.File.Exists()
        {
            Debug.Log("文件已经存在");            
        }
        else
        {
        Debug.Log("文件不存在");            

        }

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

👉四、壁纸分享

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

👉总结

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

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

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

相关文章

基于STM32看Cotex-M内核中断向量表重定向

文章目录 ARM处理器的启动流程嵌套中断向量控制器NVIC向量表和向量表重定位IAP过程中的重定向没有VTOR寄存器的情况 中断向量表重定向在芯片IAP(或OTA)升级过程中&#xff0c;是不可避免的问题。 在Cotex-M3/M4内核中有向量表偏移寄存器VTOR 在Cortex-M0内核中没有向量表偏移寄…

什么是住宅IP代理?为什么需要家庭 IP 代理

家庭代理 IP 允许您选择特定位置&#xff08;国家、城市或移动运营商&#xff09;并作为代理上网该区域的真实用户。住宅代理 IP 可以定义为保护用户免受一般网络流量影响的中介。它们在隐藏您的 IP 地址的同时充当缓冲区。住宅代理 IP 是服务提供商分配给用户的替代 IP 地址。…

Windows部署Jar包到系统服务(Service)

使用WinSW工具 1、工具下载地址&#xff1a;https://github.com/winsw/winsw/releases 选择最新版本下载 根据机器32位或者64位分别下载exe&#xff0c;再下载sample-minimal.xml文件 2、修改文件名 将两个文件名称修改为服务名&#xff0c;如&#xff1a; test.exe 和 test…

Nodejs+Socket.io+Web端完成聊天

前言 源码获取:nodeexpresssocket.ioweb: 聊天demo (gitee.com) 目录结构 后端依赖 启动方式 前端是html正常启动 后端是node app.js 后端app.js核心代码 const express require(express) const app express() var http require(http).Server(app) var io require(so…

Ping32和IPguard两款文件透明加密软件进行实测分享

透明加密软件在现代企业的数据安全保护中扮演着至关重要的角色。它们通过自动加密和解密文件&#xff0c;确保数据在存储、传输和使用过程中的安全性&#xff0c;从而防止敏感信息泄露。本文将介绍几种常见的透明加密软件&#xff0c;并对Ping32和IPguard两款加密软件进行实测分…

压铸模具适合采用3D打印随形水路吗

3D打印随形水路是一种基于3D打印技术的新型模具冷却水路设计。这种设计方式可以很好地贴合产品形状&#xff0c;有效提升产品良率和冷却效率&#xff0c;3D打印随形水路最初多应用在注塑模具上&#xff0c;而随着3D打印技术的发展和新材料的不断丰富&#xff0c;压铸模具在逐步…

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

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 一.前言 DOS系统的more命令是一个用于查看文本文件内容的工具。…

一个典型的分布式缓存系统是什么样的?no.32

分布式 Redis 服务 由于本课程聚焦于缓存&#xff0c;接下来&#xff0c;我将以微博内的 分布式 Redis 服务系统为例&#xff0c;介绍一个典型的分布式缓存系统的组成。 微博的 Redis 服务内部也称为 RedisService。RedisService 的整体架构如图所示。主要分为Proxy、存储、集…

日处理100吨污水处理设备安装需要多久

日处理100吨污水处理设备的安装时间取决于多种因素&#xff0c;包括设备的复杂性、安装地点的条件、所需的基础设施建设、以及安装团队的经验和效率等。以下是一个大致的安装时间框架和相关的考虑因素&#xff1a; 前期准备&#xff1a; 现场勘查和设计&#xff1a;1-2周&#…

【科研小小白】Faster R-CNN论文阅读笔记+与FAST RCNN区别对比+个人补充知识

论文阅读笔记 网络结构 整个Faster R-CNN可以分为三部分&#xff1a; **backbone&#xff1a;**共享基础卷积层&#xff0c;用于提取整张图片的特征。例如VGG16&#xff0c;或Resnet101&#xff0c;去除其中的全连接层&#xff0c;只留下卷基层&#xff0c;输出下采样后的特征…

SMERF,使用SD地图来增强模型的拓扑感知

论文链接 2311.04079v1 (arxiv.org)https://arxiv.org/pdf/2311.04079v1 研究背景 理解道路的拓扑关系是自动驾驶中很重要的一个环节&#xff0c;以往这个部分都是通过HD地图&#xff0c;及高精度地图的数据训练来实现的。高精度地图具备很多的标注信息和很明确的语义信息&a…

docker 指定jdk11镜像执行jar

dockerfile :下载jdk11 并将上传的jar 放入jdk11容器/root&#xff0c;改名为app.jar vi dockerfile 。。。。内容见下图 # 构建jdk11镜像 docker build -t demo . # 也可以通过jdk11镜像&#xff08;前提有jdk11镜像&#xff09;外挂载目录方式运行jar docker run --name d…

使用小技巧:PREEvision权限管理进阶篇

Review 在《浅谈PREEvision权限管理》一文中&#xff0c;我们介绍了如何在PREEvision中初始化一个权限模型&#xff0c;但只有模型还不够&#xff0c;我们需要对各个用户在不同Project中进行权限的配置&#xff0c;以及在EEA工程中对各个Package配置权限。 Roles and Right …

成都青年AI人才崭露头角,知了汇智科技助力孵化营大放异彩

5月18日-19日&#xff0c;为期两天的成都国际商贸城青年&#xff08;大学生&#xff09;AI应用孵化营活动在热烈的氛围中圆满落幕。本次活动由成都国际商贸城、成都成商数字科技有限公司、成都知了汇智科技有限公司及成都电商职教集团联合举办&#xff0c;旨在为青年&#xff0…

Project Reactor 响应式编程

Project Reactor 响应式编程 什么是响应式编程 响应式编程&#xff08;Reactive Programming&#xff09;是一种编程范式&#xff0c;致力于处理异步数据流和变化。它的核心思想是构建响应于变化的系统&#xff0c;即当数据流或事件发生变化时&#xff0c;系统能够自动地调整…

iOS单元测试覆盖率报告导出功能实现

一、插件安装 在Mac电脑上&#xff0c;安装slather插件。插件地址&#xff1a;https://github.com/SlatherOrg/slather 安装命令&#xff1a; gem install slather二、在Xcode上设置Code Coverage&#xff0c;Targets指定XXX 三、在终端切换到项目根目录下&#xff0c;执行单…

HTML静态网页成品作业(HTML+CSS)——魅族商城首页网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

Nginx - 常用的控制请求处理和响应生成的指令的高阶用法和最佳实践

文章目录 指令列表returnbreakrewriteifproxy_passtry_files 执行顺序基础用法高阶使用最佳实践 指令列表 return 作用&#xff1a;用于立即结束当前请求的处理并生成响应。用法&#xff1a;return code [text]; code 是 HTTP 状态码&#xff0c;如 200、301、404 等。text 是…

GitLab集成DingTalk(超级详细)

目录 参考文档1 简介2 集成方法2.1 钉钉测操作2.2 极狐GitLab侧操作2.3 钉钉群内操作 参考文档 钉钉集成 1 简介 极狐GitLab集成钉钉&#xff0c;可以在群组中机器人或者直接与机器人创建一对一的聊天框发送消息。当您未将钉钉账户和极狐GitLab 账户进行绑定时&#xff0c;机…

Blazor 下支持 Azure AD 的多套登录方案

比如上图配置了两套不同的登录方案&#xff0c;各有自己的 TenantId 和 ClientId &#xff0c;要同时支持他们的登录&#xff08;其实在同一套 TenantId 和 ClientId 里面配置多个登录账户不就好了&#xff0c;但是......那套登录的管理是在客户自己的Azure AD账户管理下的&…