Unity实用功能之读写Excel表格| 8月更文挑战[通俗易懂]

Unity实用功能之读写Excel表格| 8月更文挑战[通俗易懂]在项目开发过程中,经常会用到大量的可编辑的数据,而这些数据使用Json,XML等形式存储又比较麻烦 所以就有了使用Excel表格进数据的存储和读取。

概述

在项目开发过程中,经常会用到大量的可编辑的数据,而这些数据使用Json,XML等形式存储又比较麻烦 PS:对于不懂电脑的客户来说完全就是看天书,后期编辑也比较费事。所以就有了使用Excel表格进行数据的存储和读取。比如:人员名单(姓名,班级,学号等信息)。所以本篇文章就分享一下如何使用Unity读写Excel表格。

准备工作

此篇文章中使用的是Unity2019.4.17版本,VS2017。需要引入EPPlus.dll,Excel.dll 和ICSharpCode.SharpZipLib库文件。

读取Excel表格

下图是我们要读取的数据

image.png

读取Excel需要用到Excel.dll 和ICSharpCode.SharpZipLib库文件。将其放到Plugins文件夹下。 首先需要引入命名空间

  1. using System.IO;此命名空间主要用于对Excel文件的加载作用,没有此命名空间将无法使用FileStream加载文件
  2. using Excel;此命名空间主要用于对Excel的读取功能。 使用如下脚本,首先加载Excel文件

FileStream fileStream = File.Open(Application.streamingAssetsPath + "/"+ 表格名, FileMode.Open, FileAccess.Read);

上一句代码为Unity的StreamingAssets目录下的.xlsx文件的路径:Application.streamingAssetsPath + “/表格名.xlsx”

读取文件之后要对文件进行类似实例化解析操作,

IExcelDataReader excelDataReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream);

将所有数据全部读取出来

DataSet result = excelDataReader.AsDataSet();

接下来获取表格的行数和列数

// 获取表格有多少列
int columns = result.Tables[0].Columns.Count;
// 获取表格有多少行 
int rows = result.Tables[0].Rows.Count;

代码100分

接下来我们要把读取到的每一行每一列数据进行整合,通过for循环,将每一行的数据进行记录,首先读取每一行,然后在读取这一行中的每一列,从而获得整行数据信息。具体代码信息如下

代码100分        // 根据行列依次打印表格中的每个数据 
        List<string> excelDta = new List<string>();

        //第一行为表头,不读取。没有表头从0开始
        for (int i = 1; i < rows; i++)
        {
            value = null;
            all = null;
            for (int j = 0; j < columns; j++)
            {
                // 获取表格中指定行指定列的数据 
                value = result.Tables[0].Rows[i][j].ToString();
                if (value == "")
                {
                    continue; 
                }
                all = all + value + "|";
            }
            if (all != null)
            {
                //print(all);
                excelDta.Add(all);
            }
        }

在这里,每一行中每一列数据是使用“|进行分割的,接下来要做的是将读取到的每一行数据存到定义好的类中。方便以后好调用。 首先定义数据类型,要有ID(序号),姓名,班级,学号,电话。 代码如下:

public class PlayerInfo
{
    // 序号
    public string ID { get; set; }
    // 姓名
    public string Name { get; set; }
    // 学号
    public string Number { get; set; }
    // 班级
    public string Class { get; set; }
    /// 手机号
    public string Mobile { get; set; }

    public PlayerInfo(string id, string name,string class,string number,string mobile)
    {
        this.ID = id;
        this.Name = name;
        this.Number = number;
        this.Class = class;
        this.Mobile = mobile;
    }
}

接下来遍历读取到的数据进行处理然后存储到List中,首先使用Split(“|”),读数据进行截取,组成一个是字符串数据,然后在new一个PlayerInfo,传入参数,最后将new的PlayerInfo存入List中。

代码100分string[] item = data_1[i].Split('|');
PlayerInfo playerinfo = new PlayerInfo(item[0], item[1], item[2], mobile_Enc);
List<PlayerInfo> Players = new List<PlayerInfo>();
Players.Add(playerinfo);

到此,所有数据也就全部读取出来了,可以再控制台进行一下打印,输入结果如下,证明数据读取成功

image.png

写入Excel

最终结果是要在上述表格中添加一列,如下所示

image.png

首先,需要引入EPPlus.dll库文件,其次,需要引用命名空间:using OfficeOpenXml;以便对Excel表格进行写入 同样,首先需要打开文件,确认文件是否存在,不存在需要自动创建一个文件

        //文件路径
        string path = Application.streamingAssetsPath + "/表格名.xlsx";
        FileInfo newFile = new FileInfo(path);
        //判断文件是否中存在
        if (!newFile.Exists)
        {
            //创建一个新的excel文件
            newFile = new FileInfo(path);
        }

接下来进行文件的写入,在这之前,我们需要要写入的文件存入一个list中,同样使用”|”对每一列数据进行分割,呀添加的数据为

"3|王五|20210103|三年一班|11111111111"

通过ExcelPackage打开文件

using (ExcelPackage package = new ExcelPackage(newFile))

然后进行数据分割,存储,这里之所以使用一整串字符串是为了以后存储数据较多的时候,可以直接进行遍历,省的一点点进行添加

 string[] messages = newList[i].Split('|'); 
 string itemId = messages[0];
 string itemName = messages[1];
 string itemNumber = messages[2];
 string imageClass = messages[3];
 string imageMobile = messages[4];
 //添加第四行数据
 worksheet.Cells["A4"].Value = itemId;
 worksheet.Cells["B4"].Value = itemName;
 worksheet.Cells["C4"].Value = itemNumber;
 worksheet.Cells["D4"].Value = imageClass;
 worksheet.Cells["E4"].Value = imageMobile;

最后,对表格进行保存

package.Save();

注意

经测试发现如下几个问题: 1、在打包之后或者没打包的时候就会出现读取不到excel数据,须将
Unity\Editor\Data\Mono\lib\mono\unity目录下的一系列i18n相关dll导入项目Plugins文件夹中。 2、如果xlsx文件的后缀为.xlsx,读取的代码应该为

IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

若使用CreateBinaryReader读取,则在excelReader.AsDataSet();会报错NullReferenceException: Object reference not set to an instance of an object

3、如果xlsx文件的后缀为.xls,读取的代码应该为

IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);

若使用CreateOpenXmlReader读取,则在CreateOpenXmlReader处会报错ArgumentNullException: Value cannot be null.

写在最后

整体项目案例会在后期整理好之后分享给大家,如有错误之处还请多多指出。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11332.html

(0)
上一篇 2023-03-02
下一篇 2023-03-02

相关推荐

  • jdbc连接MySql数据库[亲测有效]

    jdbc连接MySql数据库[亲测有效]
    jdbc连接MySql数据库 package com.zhy; import com.mysql.jdbc.Driver; import java.sql….

    2023-04-08
    151
  • window 下如何恢复被删除的mysql root账户及密码(mysql 8.0.17)

    window 下如何恢复被删除的mysql root账户及密码(mysql 8.0.17)不久前自学完完sql,下了mysql8.0.17,安装配置好后探索着,想着用root账户登上去能不能删除root账户呢,然后就想给自己一巴掌,,, 如何快速恢复root: 1.关闭mysql服务:wi

    2023-01-29
    145
  • Python工程师的代码回退实践

    Python工程师的代码回退实践在软件开发过程中,代码管理是一个非常重要的任务,它确保代码的质量和可维护性。然而,开发过程中常会遇到意想不到的问题,比如某次提交的代码出现了错误或者导致了系统崩溃。这时我们就需要回退到之前的版本,从而修复错误。本文将介绍如何在Python项目中进行代码回退实践,以帮助Python工程师从这些问题中快速恢复并修复错误。

    2024-07-28
    36
  • (转载)Jpa配置一对多关系

    (转载)Jpa配置一对多关系链接: https://www.cnblogs.com/a-small-lyf/p/10699326.html 在网上查了很多关于jpa的一对多表关联的操作,踩了很多坑,今天终于解决了 下面上一下我…

    2023-02-26
    155
  • 使用setup.py来管理Python项目的依赖

    使用setup.py来管理Python项目的依赖Python是一门广受欢迎和广泛应用的编程语言,拥有优秀的生态系统和强大的第三方包支持。当我们在开发Python项目的时候,通常需要引用许多第三方库和框架。这时候,就需要一个好的依赖管理工具来帮助我们管理这些依赖关系,以确保项目的可靠性和稳定性。在Python中,使用setup.py来管理项目依赖是一种非常常见的做法。

    2024-03-25
    84
  • Python嵌套列表简介

    Python嵌套列表简介嵌套列表是Python的一个强大而灵活的数据结构,可以用来存储任意深度的数据,在列表和元组之间提供了一种简明而强大的解决方案。本文将介绍Python中的嵌套列表,包括什么是嵌套列表、如何创建它们、如何访问它们、如何修改它们以及如何使用它们来进行更复杂的计算和操作。

    2024-04-20
    85
  • ShardingSphere-JDBC入门实战「终于解决」

    ShardingSphere-JDBC入门实战「终于解决」前言 Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使…

    2023-04-14
    142
  • 数据库是否适合使用k8s部署_学会数据库使用的重要性

    数据库是否适合使用k8s部署_学会数据库使用的重要性作者:Stephen Thorn 翻译:刘玲玲 原文:https://www.percona.com/blog/2020/10/08/the-criticality-of-a-kubernetes-o

    2023-06-01
    156

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注