美文网首页
Unity杂文——JSON数据转化为Excel表格

Unity杂文——JSON数据转化为Excel表格

作者: 脸白 | 来源:发表于2023-09-27 10:55 被阅读0次

    原文地址

    前言

    作者今天接到一个工作,需要把一个从其他地方接收过来的json数据观察规律,因为数据比较多,不可能一个一个观察记录,作者想的是把接收过来的数据全部保存到表格中,因为表格处理数据还是比较方便观察的,很省事。废话不多说了,直接上代码。

    准备资源

    需要一个dll,这里提供下载链接:
    <font color=steelblue size=3>org.in2bits.MyXls.Dll</font>
    解压密码:fuck

    代码

    首先把dll导入到自己的项目中,这里就不用做过多的解释了。
    接着直接放代码:

    using org.in2bits.MyXls;
    using QF.Extensions;
    using UnityEngine;
    
    namespace QFramework.MFO
    {
        public class JsonToExcelSystem
        {
            //保留当前创建的xls文档
            private XlsDocument newXls;
            //保留当前操作的对应的sheet中的单元格
            private Cells newCells;
            //当前sheet所添加的行
            private int nowRow;
            /// <summary>
            /// 创建新的Xls文件
            /// </summary>
            public void CreateExcelFile(string filePath,string fileName,
                string author = "LianBai",string subject = "Test")
            {  
                XlsDocument xls = new XlsDocument();    //创建一个新的xls文档
                xls.FileName = filePath+fileName;                //设置文件名字(路径+名字)
                xls.SummaryInformation.Author = author; //设置xls文件作者信息
                xls.SummaryInformation.Subject = subject;   //设置xls文件主题信息
    
                newXls = xls;
                //Worksheet sheet = xls.Workbook.Worksheets.AddNamed(sheetName);  //添加一个sheet页面
            }
            /// <summary>
            /// 添加一个新的sheet,并赋予开头
            /// </summary>
            public void AddNewSheet(string sheetName, params string[] param)
            {
                if (newXls == null)
                {
                    Debug.LogError("LianBai:Please create new xls");
                }
                else
                {
                    Worksheet sheet = newXls.Workbook.Worksheets.AddNamed(sheetName);   //添加一个新的sheet
                    newCells = sheet.Cells; //修改当前操作的单元格
                    int index = 1;      
                    param.ForEach(tipName =>        //遍历添加标头
                    {
                        newCells.Add(1, index, tipName);
                        index++;
                    });
                    nowRow = 2;     //初始化从第二行添加数据
                }
    
            }
            /// <summary>
            /// 往创建的sheet里添加数据
            /// </summary>
            public void AddData(params object[] param)
            {
                if (newXls == null || newCells == null)     //判断文件是否被创建
                {
                    Debug.LogError("LianBai:Please create new xls or sheet");
                }
                else
                {
                    int index = 1;
                    param.ForEach(data =>           //遍历添加数据
                    {
                        newCells.Add(nowRow, index, data);
                        index++;
                    });
                    nowRow++;                   //添加一行后往下添加
                }
            }
            /// <summary>
            /// 保存成文件
            /// </summary>
            public void SaveXls()
            {
                newXls.Save();
            }
            
        }
    }
    

    上述代码都有注释,也就不做过多的解释了。

    案例

    下面来看看作者自己写的一个案例:
    先看看json数据:

    [
      {
        "playerid": 2,
        "playericoname": "PlayerIcon_2",
        "playerprefabname": "Player_2"
      },
      {
        "playerid": 3,
        "playericoname": "PlayerIcon_3",
        "playerprefabname": "Player_3"
      },
      {
        "playerid": 4,
        "playericoname": "PlayerIcon_4",
        "playerprefabname": "Player_4"
      },
      {
        "playerid": 5,
        "playericoname": "PlayerIcon_5",
        "playerprefabname": "Player_5"
      }
    ]
    

    接着看作者写的案例代码,其中josn读取利用的是QF框架中的,QF是一个非常强大的框架:
    代码如下:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    namespace QFramework.MFO
    {
        public class MyJsonToExcelExample : MonoBehaviour
        {
            private JsonToExcelSystem myJsonToExcelSystem = new JsonToExcelSystem();
            private string path;
            private string fileName = "LianBai";                      //文件名字
            private List<PlayerData> posData = new List<PlayerData>(); //用来保存json数据
            // Start is called before the first frame update
            void Start()
            {
                path = Application.dataPath + "/Prints/";    //文件保存路径
                var jsonText = ResLoadManage.Instance.mResLoader.LoadSync<TextAsset>("playeritem").text;    //读取本地的json文件
                posData = jsonText.FromJson<List<PlayerData>>();    //保存json数据
                myJsonToExcelSystem.CreateExcelFile(path,fileName); //创建文件
                myJsonToExcelSystem.AddNewSheet("lianbai","ID","IocName","PrefabName"); //创建sheet并且赋值表头
                posData.ForEach(data =>         //遍历数据
                {
                    myJsonToExcelSystem.AddData(data.playerid,data.playericoname,data.playerprefabname);    //把数据写入到表格中
                });
                myJsonToExcelSystem.SaveXls();  //保存文件
            }
    
        }
    }
    

    运行后的结果如下:

    image.png

    相关文章

      网友评论

          本文标题:Unity杂文——JSON数据转化为Excel表格

          本文链接:https://www.haomeiwen.com/subject/xwrkbdtx.html