最新要闻
- 焦点!一排小草怎么画简单好看_一排小草怎么画简笔画
- 当前快讯:Win12正全力开发!微软重构操作系统底层:模块化设计
- 【新视野】宣称能跑100公里!男子网购电动车续航打折:法院判退一赔三
- 全球快资讯:“雪糕刺客”的仁慈!钟薛高用文心一言打造雪糕 仅售3.5元
- 即时看!口腔溃疡总不好 可能是大病预警!“偏方”都没用!
- 今日讯!比5G强10倍!工信部:中国已成立6G工作组推动关键技术研究
- 全球视点!韩瑟冻干粉怎么样_韩瑟化妆品怎么样
- 果然来了!电商偷跑索尼PS5 Slim游戏机:新外观 更轻薄
- 全球热头条丨SSD性能狂飙 追赶DDR5内存 PCIe 6.0硬盘预计2026年问世
- 听到吧唧嘴就抓狂:一男子已4年不理家人
- 头条:德国掀桌 欧盟让步 “2035禁燃令”为何不再禁燃油车?
- 男子测智商竟被推荐花98元包月:付了钱也没看到结果
- 【独家焦点】郑氏点银:黄金有望震荡冲1980,原油背离逼空反弹待回落
- 环球微资讯!玩家期待已久!任天堂限定版Switch来了
- 全球今日报丨不拍蒜也断?张小泉斩骨刀斩骨时断裂 客服:与使用力度、角度有关
- 车被撞废人完好无损!比亚迪汉DM-i车主转头定了一台海豹
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
热点!Unity中基于EPPLUS的Excel转换以及Json数据读取
(资料图)
摘要:
主要使用Epplus的的表格转换功能,将表格转换成Json,而Unity中Json的使用要搭配对应结构的类,故顺便将利用表格结构生成对应的类,免除人工创建的麻烦过程。
示例:
表格示例:编辑模式下:生成Json:
生成Class:
运行时数据读取:
代码
Json数据读取器以及泛型基类
using UnityEngine;public class JsonDataManager : Singleton{ public JsonDataList LoadData() { string json = Resources.Load("Json/" + typeof(T).Name).text; return JsonUtility.FromJson>(json); }}using System.Collections.Generic;using System;[Serializable]public class JsonDataList{ public List datas = new List();}
Excel转换类
using UnityEngine;using UnityEditor;using System.IO;using OfficeOpenXml;using System.Collections.Generic;using System;using System.Text;/// /// 使用EPPlus获取表格数据,同时导出对应的Json以及Class.///
public class ExcelExporter{ /// /// Excel表格路径 ///
private const string excelPath = "../Assets/Excels"; /// /// 导出的Json路径 ///
private const string configPath = "../Assets/Resources/Json"; /// /// 导出的类路径 ///
private const string classPath = "../Assets/Scripts/Configs"; /// /// 属性行 ///
private const int propertyIndex = 2; /// /// 类型行 ///
private const int typeIndex = 3; /// /// 值行 ///
private const int valueIndex = 4; [MenuItem("Tools/ExportExcel")] private static void ExportConfigs() { try { FileInfo[] files = Files.LoadFiles(excelPath); foreach (var file in files) { //过滤文件 if (file.Extension != ".xlsx") continue; ExcelPackage excelPackage = new ExcelPackage(file); ExcelWorksheets worksheets = excelPackage.Workbook.Worksheets; //只导表1 ExcelWorksheet worksheet = worksheets[1]; ExportJson(worksheet, Path.GetFileNameWithoutExtension(file.FullName)); ExportClass(worksheet, Path.GetFileNameWithoutExtension(file.FullName)); } AssetDatabase.Refresh(); } catch (Exception e) { Debug.LogError(e.ToString()); } } /// /// 导出类 ///
private static void ExportClass(ExcelWorksheet worksheet, string fileName) { string[] properties = GetProperties(worksheet); StringBuilder sb = new StringBuilder(); sb.Append("using System;\t\n"); sb.Append("[Serializable]\t\n"); sb.Append($"public class {fileName}Config\n");//类名 sb.Append("{\n"); for (int col = 1; col <= properties.Length; col++) { string fieldType = GetType(worksheet, col); string fieldName = properties[col - 1]; sb.Append($"\tpublic {fieldType} {fieldName};\n"); } sb.Append("}\n\n"); Files.SaveFile(classPath, string.Format("{0}Config.cs", fileName), sb.ToString()); } /// /// 导出JSON ///
private static void ExportJson(ExcelWorksheet worksheet, string fileName) { string str = ""; int num = 0; string[] properties = GetProperties(worksheet); for (int col = 1; col <= properties.Length; col++) { string[] temp = GetValues(worksheet, col); num = temp.Length; foreach (var value in temp) { str += GetJsonK_VFromKeyAndValues(properties[col - 1], Convert(GetType(worksheet, col), value)) + ","; } } //获取key:value的字符串 str = str.Substring(0, str.Length - 1); str = GetJsonFromJsonK_V(str, num); str = GetUnityJsonFromJson(str); Files.SaveFile(configPath, string.Format("{0}Config.json", fileName), str); } /// /// 获取属性 ///
private static string[] GetProperties(ExcelWorksheet worksheet) { string[] properties = new string[worksheet.Dimension.End.Column]; for (int col = 1; col <= worksheet.Dimension.End.Column; col++) { if (worksheet.Cells[propertyIndex, col].Text == "") throw new System.Exception(string.Format("第{0}行第{1}列为空", propertyIndex, col)); properties[col - 1] = worksheet.Cells[propertyIndex, col].Text; } return properties; } /// /// 获取值 ///
private static string[] GetValues(ExcelWorksheet worksheet, int col) { //容量减去前三行 string[] values = new string[worksheet.Dimension.End.Row - 3]; for (int row = valueIndex; row <= worksheet.Dimension.End.Row; row++) { values[row - valueIndex] = worksheet.Cells[row, col].Text; } return values; } /// /// 获取类型 ///
private static string GetType(ExcelWorksheet worksheet, int col) { return worksheet.Cells[typeIndex, col].Text; } /// /// 通过类型返回对应值 ///
private static string Convert(string type, string value) { string res = ""; switch (type) { case "int": res = value; break; case "int32": res = value; break; case "int64": res = value; break; case "long": res = value; break; case "float": res = value; break; case "double": res = value; break; case "string": res = $"\"{value}\""; break; default: throw new Exception($"不支持此类型: {type}"); } return res; } /// /// 返回key:value ///
private static string GetJsonK_VFromKeyAndValues(string key, string value) { return string.Format("\"{0}\":{1}", key, value); } /// ///获取[key:value]转换为{key:value,key:value},再变成[{key:value,key:value},{key:value,key:value}] ///
private static string GetJsonFromJsonK_V(string json, int valueNum) { string str = ""; string[] strs; List listStr = new List(); strs = json.Split(","); listStr.Clear(); for (int j = 0; j < valueNum; j++) { listStr.Add("{" + string.Format("{0},{1}", strs[j], strs[j + valueNum]) + "}"); } str = "["; foreach (var l in listStr) { str += l + ","; } str = str.Substring(0, str.Length - 1); str += "]"; return str; } /// /// 适应JsonUtility.FromJson函数的转换格式 ///
private static string GetUnityJsonFromJson(string json) { return "{" + "\"datas\":" + json + "}"; }}
文件读写的辅助类
using UnityEngine;using System.IO;using System.Collections.Generic;public class Files{ public static FileInfo[] LoadFiles(string path) { path = string.Format("{0}/{1}", Application.dataPath, path); if (Directory.Exists(path)) { DirectoryInfo directory = new DirectoryInfo(path); List files = new List(); foreach (var file in directory.GetFiles("*")) { if (file.Name.EndsWith(".meta")) continue; if (file.Name.StartsWith("~")) continue; files.Add(file); } return files.ToArray(); } else { throw new System.Exception("路径不存在"); } } public static void SaveFile(string path, string fileName, string fileContent) { path = string.Format("{0}/{1}", Application.dataPath, path); if (Directory.Exists(path)) { path = string.Format("{0}/{1}", path, fileName); if (File.Exists(path)) { File.Delete(path); } File.WriteAllText(path, fileContent); } else { throw new System.Exception("路径不存在"); } }}
关键词:
-
世界动态:PfSense pfBlockerNG 未授权RCE漏洞(CVE-2022-31814)
PfSensepfBlockerNG未授权RCE漏洞(CVE-2022-31814)概述PfSense系统的插件pfBlockerNG引起的未授权RCE漏洞pfSense是一个基于FreeB
来源: -
热点!Unity中基于EPPLUS的Excel转换以及Json数据读取
摘要:主要使用Epplus的的表格转换功能,将表格转换成Json,而Unity中Json的使用要搭配对应结构的类,故...
来源: -
全球速讯:c# 对序列化类XMLSerializer 二次封装泛型化方便了一些使用的步骤
原文作者:aircraft原文链接:https: www cnblogs com DOMLX p 17270107 html加工的泛型类如下:usingSystem;usingSyste
来源: 世界动态:PfSense pfBlockerNG 未授权RCE漏洞(CVE-2022-31814)
热点!Unity中基于EPPLUS的Excel转换以及Json数据读取
全球速讯:c# 对序列化类XMLSerializer 二次封装泛型化方便了一些使用的步骤
新华社权威快报|首次纳入肝素类药品 第八批药品集采平均降价56%
焦点!一排小草怎么画简单好看_一排小草怎么画简笔画
当前快讯:Win12正全力开发!微软重构操作系统底层:模块化设计
【新视野】宣称能跑100公里!男子网购电动车续航打折:法院判退一赔三
全球快资讯:“雪糕刺客”的仁慈!钟薛高用文心一言打造雪糕 仅售3.5元
即时看!口腔溃疡总不好 可能是大病预警!“偏方”都没用!
今日讯!比5G强10倍!工信部:中国已成立6G工作组推动关键技术研究
pthread库实现简单并行程序:Hello
全球焦点!日本央行官员暗示调整YCC政策 日债收益率周三全线回落
全球快资讯:净利润同比增长超62% 中国石油2022年业绩创历史最好水平
全球视点!韩瑟冻干粉怎么样_韩瑟化妆品怎么样
果然来了!电商偷跑索尼PS5 Slim游戏机:新外观 更轻薄
全球热头条丨SSD性能狂飙 追赶DDR5内存 PCIe 6.0硬盘预计2026年问世
听到吧唧嘴就抓狂:一男子已4年不理家人
头条:德国掀桌 欧盟让步 “2035禁燃令”为何不再禁燃油车?
男子测智商竟被推荐花98元包月:付了钱也没看到结果
【独家焦点】郑氏点银:黄金有望震荡冲1980,原油背离逼空反弹待回落
【天天快播报】记录--开局一张图,构建神奇的 CSS 效果
java泛型和通配符
环球微资讯!玩家期待已久!任天堂限定版Switch来了
全球今日报丨不拍蒜也断?张小泉斩骨刀斩骨时断裂 客服:与使用力度、角度有关
车被撞废人完好无损!比亚迪汉DM-i车主转头定了一台海豹
环球快资讯丨为何Redmi敢首发高通第二代骁龙7+?员工解释原因
男子驾车途中昏迷撞走公司大门 罪魁祸首竟是一只马蜂
全球看热讯:惠州治皮肤过敏较好的医院
全球微头条丨用 Go 剑指 Offer 07. 重建二叉树
快资讯:IDEA使用技巧和注册教程
全网最详细中英文ChatGPT-GPT-4示例文档-最强JS助手聊天机器人应用从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/
全球快看点丨下载安装MyAQL数据库8.0.30
NX二次开发:Checkmate例子根据dfa文件检查模型数据
天天即时看!广东佛山发生3.4级地震 广州有震感!你感受到没
环球微动态丨火狐良心!至少支持Win7/8.1到2024年第3季度
天天快看点丨质量堪忧 多批次行车记录仪抽检不合格 纽曼上黑榜
天天通讯!360版ChatGPT要来了!周鸿祎:大家给起个名字
焦点简讯:男子回应合成迪丽热巴视频来龙去脉:不想跟其他博主同质化
即时:钟薛高推出3.5元雪糕上市时间
MySQL的安装
世界资讯:python中函数的返回值详解
环球速读:关于Web的欢迎页面的开发设置
焦点热讯:Whats's New In Seata 1.6.x
环球短讯!Powerpoint教程_编程入门自学教程_菜鸟教程-免费教程分享
热点评!首批两只新能源领域REITs上市首日均收涨
头条:前搜狗CEO王小川成立人工智能公司:中国需要自己的OpenAI
观速讯丨美团回应限制大龄外卖骑手:入职年龄并未调整 能干到57岁
环球快报:经济学家林毅夫:AI可让人们享受生活 未来每周只工作一天
历史上首次!佳能将推可自动对焦的移轴镜头
全球热点!关注!有答复了,《关于加快发展文化创意产业,培育福鼎经济新亮点的建议》。
lmxcms代码审计学习
【天天播资讯】0功耗电子纸数字海报问世:不换画面不耗电
今日视点:30年大品牌 金邦2TB SSD到手549元:长寿TLC+PCIe 4.0性能
中国高铁首次出海!雅万高铁全线轨道铺通:最高时速350公里
每日报道:比亚迪汽车毛利率25.9%!李想夸赞:比特斯拉强太多
全球速递!俄亥俄河一载1400吨有毒物质驳船沉没:尚不清楚是否发生泄漏
世界报道:太极股份:截止2023年3月20日,公司的股东户数为36798户
Go语言:编写一个 WebsiteRacer 的函数,用来对比请求两个 URL 来「比赛」,并返回先响应的 URL。如果两个 URL 在 10 秒内都未返回结果
全球实时:一文带你搞懂如何优化慢SQL
焦点快报!Dijkstar-And-Astar算法
用上ChatGPT的这几个功能,你的开发效率不高都难
联想y400什么时候上市的?联想y400笔记本配置
地下城与勇士龙年套装哪个好?地下城与勇士龙年套装有几个宝珠?
HTCG28什么时候上市的?HTCG28手机参数
华为C8813Q如何装sim卡?华为C8813Q手机参数
gprs套餐费是什么意思?怎么关闭GPRS套餐?
楼市回暖背后:多城二手房在售量持续增加
环球关注:编写高质量c#代码的10个建议
环球即时看!插入排序
【世界速看料】【Visual Leak Detector】配置项 StackWalkMethod
环球新消息丨vivo将整合旗下iQOO手机:开启降本增效
王传福:比亚迪目标年底成为中国最大汽车制造商
全球热讯:全球最大游戏展危险了!世嘉、腾讯均宣布不参加本届E3
绿巨人前女友15年后回归漫威!《美国队长4》新剧照曝光:黑人美队现身
环球即时看!联名高达!ROG游戏手机7系列来了:二代骁龙8+6000mAh电池
全球视讯!中国代表敦促个别国家立即解除对叙利亚单边制裁
天天微动态丨KubeVela 1.7 版本解读:接管你的已有工作负载
焦点报道:接通率维持 66% 以上,为什么火山引擎 VeDI 能让企业智能外呼不再难?
【全球快播报】《Python编程快速上手—让繁琐工作自动化》实践项目答案:第四章
天天简讯:四方达(300179)3月28日主力资金净卖出861.62万元
微信QQ出现功能异常 官方紧急修复:微信支付等功能已恢复
天天速看:男子陵园祭祖车雷达显示全是人 网友:啥车?我想试试
PS主机神作好评仅有32%!顽皮狗回应《最后生还者》PC优化翻车
全球速读:专家谈ChatGPT:或让更多人享受生活 一周只工作一天
干货分享|袋鼠云数栈离线开发平台在小文件治理上的探索实践之路
全球热讯:电池级碳酸锂价格腰斩 电动车会降价吗?专家给出结论
环球速看:魔法氛围拉满!Redmi Note 12 Turbo哈利波特版图赏
不用带手机 抬手就能付!微信支付尝试推出微信刷掌服务
天天要闻:开发者危机!微软GitHub启动裁员:印度工程师团队几乎整体裁撤
全球微头条丨同款商超6元/瓶!特仑苏牛奶大促:2.93元/盒相当于半价
讯息:2023华大新高考联盟3月联考各科试题及答案!_老高考老教材
如何隐藏Apache版本号和其它敏感信息
容器安全之 Dockerfile 安全扫描
zookeeper的Leader选举源码解析
焦点要闻:前端设计模式——享元模式
每日观察!使用NSIS打包超大型软件的几个注意事项
环球头条:【手慢无】速来占便宜!三星128GB存储卡仅需49.8元
全球热头条丨汽车雷达在无人陵园内显示全是人影:吓坏车主
985硕士男子失业半年 应聘道士35岁已超龄!做实习生都被拒:现送外卖
没污染!国内首款氢内燃机飞机成功首飞:中国自研