实现步骤:

1.向Unity导入EPPlus相关文件,助力Unity操作Excel文件

2.应用Unity自带UGUI制作基础表格

3.基于前两步制作可存可改Excel信息的表格

一、向Unity中导入EPPlus相关文件

请参考我的另一篇博客:导入EPPlus步骤

二、应用Unity制作基础表格

在学习CSDN的各种博客后,笔者结合自身需求与现有Unity(2021.1.19f1c1)版本给出以下步骤:

首先在场景内新建Canvas,在Canvas内新建一个Panel,在Panel内新建一个Scroll View,在Scroll View->Viewport->Content内新建一个空物体,命名随便(下文以row代替),如下图

然后在Content物体上添加如下组件,设置如图(其中的Spacing可以在最后根据自身情况调整)

然后在上文建立的row(上文中约定的别名,就是那个随便命名的东西)添加组件如下,设置如图(其中的Cell Size与Spacing可以在最后根据自身情况调整)

在row物体下新建至少两个InputField(方便修改Excel内容),方便纠错:),如图(如果你新建的物体没有变成蓝色,请不要担心,灰色才是应有的颜色,下图仅代表结构)

接下来建议将建立的InputField的背景改为透明,可以换上自己的背景,看起来更舒服(调整下图中的Source Image,UIMask为透明背景)

下面用鼠标左键按住row物体拖动到Project视图的存放资源的文件夹中,生成预制体(变蓝),再将row下任一InputField生成预制体

三、新建2个C#脚本:TableCreate.cs     myexcel.cs

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using OfficeOpenXml;
using System.IO;public class TableCreate : MonoBehaviour
{public GameObject Row_Prefab;public GameObject Cell_Prefab;private string address;public  int Row;public  int Col;private myexcel myexcel;private FileInfo fileInfo;private ExcelPackage excelPackage;private void Start(){Row = 1;Col = 1;myexcel = this.GetComponent<myexcel>();}private void Update(){if(myexcel.isok==true){fileInfo = myexcel.fileInfo;excelPackage = new ExcelPackage(fileInfo);ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];IEnumerator a = worksheet.Cells.GetEnumerator();while (true){address = (a.Current as ExcelRangeBase).Address;if (address[0] - 'A' + 1 > Col)Col = address[0] - 'A' + 1;int r=0;for(int i = 1;i<address.Length;i++){r = r * 10 + address[i] - '0';}if (r > Row)Row = r;if (a.MoveNext()==false){break;}}Debug.Log(address);Debug.Log(Row);Debug.Log(Col);for (int i = 1; i <= Row; i++){GameObject table = GameObject.Find("Canvas/look_Panel/Scroll View/Viewport/Content");GameObject row = GameObject.Instantiate(Row_Prefab, table.transform.position, table.transform.rotation) as GameObject;row.name = "row" + i;row.transform.SetParent(table.transform);row.transform.localScale = Vector3.one;if (worksheet.Cells[i , 1].Value != null)row.transform.Find("Cell1").GetComponent<InputField>().text = worksheet.Cells[i , 1].Value.ToString();if (worksheet.Cells[i , 2].Value != null)row.transform.Find("Cell2").GetComponent<InputField>().text = worksheet.Cells[i , 2].Value.ToString();if (worksheet.Cells[i , 3].Value != null)row.transform.Find("Cell3").GetComponent<InputField>().text = worksheet.Cells[i , 3].Value.ToString();for (int j = 4; j <= Col; j++){GameObject cell = GameObject.Instantiate(Cell_Prefab, row.transform.position, row.transform.rotation) as GameObject;cell.name = "Cell" + j; cell.transform.SetParent(row.transform);cell.transform.localScale = Vector3.one;if (worksheet.Cells[i , j ].Value != null)cell.GetComponent<InputField>().text = worksheet.Cells[i , j ].Value.ToString();}}myexcel.isok = false;}}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OfficeOpenXml;
using System.IO;
using UnityEngine.UI;public class myexcel : MonoBehaviour
{private  InputField Input_field;public Button Input_button;public Button Open_button;public InputField Filepath_field;public Text filename_text;public bool isok;public FileInfo fileInfo;private TableCreate tc;private ExcelPackage excelPackage;private string m_Path;private void Awake(){isok = false;tc = this.GetComponent<TableCreate>();Input_button.interactable = false;Input_button.GetComponent<Button>().onClick.AddListener(Input_button_OnClickDown);Open_button.GetComponent<Button>().onClick.AddListener(Open_button_OnClickDown);}void Input_button_OnClickDown(){using (excelPackage = new ExcelPackage(fileInfo)){ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1];for(int i=1;i<=tc.Row;i++){for(int j=1;j<=tc.Col;j++){Debug.Log("Canvas/look_Panel/Scroll View/Viewport/Content/row" + i.ToString() + "/Cell" + j.ToString());Input_field = GameObject.Find("Canvas/look_Panel/Scroll View/Viewport/Content/row" + i.ToString()+"/Cell"+j.ToString()).GetComponent<InputField>();if (Input_field.text.ToString() != null)worksheet.Cells[i, j].Value = Input_field.text.ToString();}}excelPackage.Save();}}void Open_button_OnClickDown(){m_Path = Filepath_field.text;//"D:/JK/try.xlsx";fileInfo = new FileInfo(m_Path);filename_text.text = Filepath_field.text;Input_button.interactable = true;Open_button.interactable = false;isok = true;}
}

在Hierarchy视图中最外层新建空物体,将上面两个脚本添加到此物体上,将此物体作为中控器

关于脚本所需外部录入值参考下图:

效果图:

操作先后:首先在输入框填入excel文件绝对路径,点击打开文件按钮,左下图表格出现文件内容,在格子里编辑文本后,点击按钮导入即可保存,最后退出

有可能出现的问题:

1.为啥自己的表没有表头?

答:我在新建row之上建立了另一个row‘,里面放Text物体,按照row设置即可,并不用设置预制体,但这种表头无法修改,推荐在excel文件表格里输入表头

2.为啥读不到第二张表?

答:设置的读第一张表,本文只为提供实现参考(技术参考),可以自己控制自己的软件读表,控制     ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1]; 里的1为其他数字即可(也可采用名称检索方式)

3.为啥自己的表格颜色不对,字不好看?

答:设置所有Canvas里的所有物体Source Image即可设置背景,在Text组件设置字体

4.为啥自己添加背景Canvas效果不好?

答:将背景Canvas设置改为下图,主Canvas不变

5.为啥自己按上面的结构设置时,有的按钮无法被点击到?

答:一个Canvas里添加多个Panel时,注意不要让Panel互相遮挡,点击Panel设置大小即可

最后,如若项目有任何问题,欢迎批评指正或讨论。

Unity应用自带UGUI与EPPlus库制作自制Excel(.xlsx)操作程序相关推荐

  1. mixamo网站FBX模型带骨骼绑定动作库

    mixamo网站FBX模型带骨骼绑定动作库,unity游戏各职业人物动画,兼容3dmax maya c4d iclone blender等主流3D软件 mixamo游戏3D模型带骨骼绑定FBX动作库 ...

  2. Unity教程之-UGUI美术字体的制作与使用

    文章转载自:http://www.unity.5helpyou.com/3211.html 游戏制作中,经常需要使用各种花哨的文字或者数字,而字体库往往不能达到我们需要的效果,因此需要一种用图片替代文 ...

  3. UNITY 优化之带Animator的Go.SetActive耗时问题,在手机上,这个问题似乎并不存在,因为优化了后手机上运行帧率并未明显提升...

    UNITY 优化之带Animator的Go.SetActive耗时问题,在手机上,这个问题似乎并不存在,因为优化了后手机上运行帧率并未明显提升 UNITY 优化之带Animator的Go.SetAct ...

  4. Unity 基础 之 在 UGUI 上简单实现VideoPlayer视频播放的功能,简单暂停播放/显示视频名称/显示时长/拖拽播放等

    Unity 基础 之 在 UGUI 上简单实现VideoPlayer视频播放的功能,简单暂停播放/显示视频名称/显示时长/拖拽播放等 目录 Unity 基础 之 在 UGUI 上简单实现VideoPl ...

  5. Unity之SkinMeshRenderer带骨骼的人体模型换装

    Unity之SkinMeshRenderer带骨骼的人体模型换装 SkinMeshRenderer系统 条件 换装解决方案 第一种解决方案 第二种解决方案 方案选择 代码 效果 参考链接 SkinMe ...

  6. PHP同义词伪原创程序V1.0 修复增强版 自带4万+词库

    介绍 PHP同义词伪原创程序V1.0 修复增强版 自带4万+词库是专门生成原创及伪原创文章的在线工具,可以把在互联网上复制的文章瞬间变成原创文章.本工具是一款免费的专业伪原创工具,专门针对谷歌.百度. ...

  7. python的科学计算库有哪些_python科学计算:带你初探scipy库的常量模块和函数模块...

    嗨,机智哥又跟大家见面了.前面几节课,我们了解了Numpy模块的一些基本功能,知道了如何运用Numpy模块中的一些函数解决一些我们生活中的问题. 当然,Numpy模块还有大部分我们没有讲到的函数,如果 ...

  8. 首个自带引擎与病毒库木马专杀工具面世

    3月13日,金山毒霸全球反病毒监测中心推出了国内首个"自带引擎病毒库"的木马专杀工具--"磁碟机"专杀工具. 自从去年的AV终结者事件之后,具备反安全产品功能和 ...

  9. Unity 毛玻璃效果(UGUI)—高斯模糊

    因为Unity 提供了GrabPass,可以在Shader中很方便的拿到Panel下面的图像,即_GrabTexture. 注:添加优化.原本的搞死模糊效果达不到苹果的那种细腻效果,修改参数即可. 修 ...

最新文章

  1. 服务器系统linux怎么安装教程,CentOS 8.0.1905 linux服务器系统安装与配置图解教程...
  2. Android 新手常见的10个误区(上)
  3. adsl服务器客户端配置cisco_基于ISE对Cisco网络设备部署AAA
  4. oracle 27504,ora-27504 ora-27300 ora-27301 ora-27302
  5. 经典C语言程序100例之八四
  6. “新基建”沙龙(一)精华回顾 | 5G与工业互联网的发展机遇与挑战
  7. 6个步骤卸载wine
  8. jQuery 入门教程(5): 显示/隐藏内容
  9. ajax error的用法,JQuery ajaxError()用法及代码示例
  10. 【长文】在《 Ray Tracing from the Ground Up》的基础上实现BART的动画
  11. 安卓recovery流程分析【第二篇】
  12. lingo纳什均衡代码_数学建模练习题.
  13. 2018~2021年软考下午真题考点总结-软考最新
  14. 国产系统-Ubuntu Kylin优麒麟图文(VIP典藏2022版)
  15. APP静默安装卸载管理器实现与上架到应用宝和豌豆荚
  16. 快递单号查询免费api接口(PHP示例)
  17. 世嘉VR虚拟乐园即将开业,位于二次元天堂秋叶原
  18. 计算机职业生涯规划书一万字,大学生职业规划一万字
  19. 备案 - 多个域名同时备案
  20. 如何下载PLSQL Developer历史版本?

热门文章

  1. K线形态识别_红三兵(三个白色武士)
  2. js获取当前ip地址
  3. 2016c语言模拟试卷一,2016年计算机程序员考试模拟试题及答案
  4. leetCode(GO)
  5. 地下水位监测仪 原理
  6. 句柄 android,android句柄泄漏
  7. Vue项目引入阿里巴巴矢量图标库
  8. 简单的爬虫程序(详解)
  9. Chakra-UI——React UI 框架
  10. 混沌映射与动态学习的自适应樽海鞘群算法-附代码