Unity3D读取Excel表格写入Excel表格

系列文章目录

unity工具


文章目录


👉前言

有时候难免会遇到读取文件写入文件的操作,今天就来记录一下写入读取Excel的操作,阅读可能会花费几分钟时间,不要着急,慢慢赏阅哦,有什么不足,欢迎评论

大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

下面就让我们进入正文吧 !


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

👉一、读取Excel表格

里面读取了表格数据和模型名字进行对比,然后给模型设置新的名字,具体需求还是自己修改代码,读取就是这么读取的,自行测试就好了哦

注意一下,如果代码报错的话,需要导入一下操作Excel的几个dll文件,如果不报错的话,就说明已经导入过了
dll下载链接请自取

代码如下

csharp 复制代码
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表格

测试写的把模型子物体名字写入到表格中

具体代码如下

csharp 复制代码
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类是对于文件的操作

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

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

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

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

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

csharp 复制代码
//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开发技巧,觉得有用记得一键三连哦。么么哒

相关推荐
bin91533 小时前
【EXCEL数据处理】000010 案列 EXCEL文本型和常规型转换。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。
大数据·数据库·信息可视化·数据挖掘·数据分析·excel·数据可视化
一个散步者的梦10 小时前
Excel常用函数
excel
Artistation Game10 小时前
九、怪物行为逻辑
游戏·unity·游戏引擎
百里香酚兰11 小时前
【AI学习笔记】基于Unity+DeepSeek开发的一些BUG记录&解决方案
人工智能·学习·unity·大模型·deepseek
妙为11 小时前
unreal engine5制作动作类游戏时,我们使用刀剑等武器攻击怪物或敌方单位时,发现攻击特效、伤害等没有触发
游戏·游戏引擎·虚幻·碰撞预设
dangoxiba13 小时前
[Unity Demo]从零开始制作空洞骑士Hollow Knight第十三集:制作小骑士的接触地刺复活机制以及完善地图的可交互对象
游戏·unity·visualstudio·c#·游戏引擎
bin915320 小时前
【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和常规型数字格式的区别
大数据·前端·数据库·信息可视化·数据分析·excel·数据可视化
先生沉默先1 天前
使用Materialize制作unity的贴图,Materialize的简单教程,Materialize学习日志
学习·unity·贴图
Eiceblue1 天前
Python保留数据删除Excel单元格的函数和公式
开发语言·python·excel
bin91531 天前
【EXCEL数据处理】000014 案例 EXCEL分类汇总、定位和创建组。附多个操作案例。
信息可视化·数据挖掘·数据分析·excel·数据可视化·数据图表·excel 数据分析