刷存在感,Excel转Protobuf/Json通用配置文件

使用场景

最近工作流中有将Excel转Protobuf作为配置文件的技术方案。具体实现是先定一个proto文件,再在一个对应excel表中定义对应字段,由策划在excel进行更改。proto文件可以生成对应语言的脚本,然后将excel转成对应protobuf的binary。

我的想法就是优化掉自定义proto文件的步骤,根据约束在excel中定义数据类型,在导出数据前,自动导出对应的proto文件,以及生成对应的脚本文件。

Excel定义约束

Excel已定义的关键词,以下的所有的配置都可以放在任何sheet里面

关键词描述
#message同protobuf message
#enum同protobuf enum
#package同protobuf package
#config标识当前message导出为config
#desc描述/注释
#type数据类型, 基本同Protobuf类型,有自定义
#var变量名称
#value枚举的变量

message

基本的Message结构如下,RarityType参考下方的枚举定义,支持map和list,list同protobuf repeated

#messageCard
#typeint32stringboolRarityTypemap#string:string#sep=,list#string#sep=,
#varidnamehideraitysoundsanimations
#desc唯一标识名称隐藏罕见程度音效动画
10001名称01false2apply:aa.ogg,walk:bb.oggrun,attack,idle
10002名称02false1apply:aa.ogg,walk:bb.oggrun,attack,idle

enmu

枚举的变量赋值必须从0开始,受限于protobuf的限制

#enmuRarityType
#desc罕见程度
#var#desc#value
Basic基础0
Common普通1
Rare稀有2
Epic史诗3
Legendary传说4
Fixed固定5

config

#config是加在#message上方的表示,后面表格的内容为当前的配置名称

#configcollect
#messageCollect
#typelist#Card
#varCardList
#desc列表

type

基本类型同protobuf的基本类型,比如int32、string等,list、map参考上方的message示例。如果是引用其他的类型结构,直接添加对应的类型名称即可, 具体的数据读取对应类型定义下方填写的数据,参考上方的config示例。

工具实现

都需要安装.net6或者以上的环境,工具在windows下可以直接调用Excel2Config执行,linux/mac环境,可以调用dotnet Excel2Config.dll --help

Excel2Config–help
–helpShow this text.
–versionShow version info. 0.1.0.
–excel_path=The path to the excel file or folder.
–recursive,-RTraverse all the subfolders of the excel folder.
–output_path=Setting the output directory. If it is not set, it is the folder path of excel.
–to_jsonConvert to a json configuration file.
–to_protobuf=Convert to a protobuf configuration file. Input parameter proto
–protoc=Set the path to the protoc execution file.Environment variables are used by default protoc.
–shell=Set the path to the shell execution file.Environment variables are used by default sh.
–protoc_cmd=By default, the output file path of proto is set, and other protoc commands that need to be executed are added.

使用示例

Excel2Config --excel_path=Excel/ --to_json --to_protobuf=all --protoc_cmd="--csharp_out=Excel/" --shell="C:\\Program Files\\Git\\bin\\bash.exe" --protoc="D:\\protoc.exe"

Excel配置

请添加图片描述请添加图片描述请添加图片描述

导出文件

请添加图片描述请添加图片描述

夹带私货

  • 虽然支持json导出,但是还是推荐导出protobuf作为配置使用,json只是作为可视化参考
  • 有json可以利用其他工具转成,yaml等配置文件
  • 这里利用shell环境去调用protoc的命令,即使在windows下也需要设置shell环境,开发都安装了git-bash环境,所以这里的shell环境也不是啥大问题。windows下的路径确实有点恶心。

ToDo

  • 需要支持配置大文件的分割,并使用同一个结构脚本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode第382场周赛

Leetcode第382场周赛 本人水平有限,只做前三道。 一、按键变更的次数 给你一个下标从 0 开始的字符串 s ,该字符串由用户输入。按键变更的定义是:使用与上次使用的按键不同的键。例如 s “ab” 表示按键变更一次,而 s “bBBb”…

Codeforces Round 922 (Div. 2 ABCDEF题)

A. Brick Wall Problem Statement A brick is a strip of size 1 k 1 \times k 1k, placed horizontally or vertically, where k k k can be an arbitrary number that is at least 2 2 2 ( k ≥ 2 k \ge 2 k≥2). A brick wall of size n m n \times m nm is such a…

Pandas进阶--map映射,分组聚合和透视pivot_table详解

文章目录 1.Pandas的map映射(1)映射(2)map充当运算工具 2.数据分组和透视(1)分组统计 - groupby功能 是pandas最重要的功能(2)聚合agg 3.透视表pivot_table(1&#xff09…

小程序上的h5页面在web上面访问 页面基于vue

前提:BASE_URL: https://ded.toll.keeke.ai/ded-api/ 页面路径是:pages/webview/webview 参数是:id111 列表页跳转到详情页的方法是 toDetail(e) {wx.navigateTo({url: ../webview/webview?id e.currentTarget.dataset.oid})}, vue的映射…

【日常问题】Failed to enable unit: Unit file docker.service does not exist.

Failed to enable unit: Unit file docker.service does not exist. 1. 问题原因 笔者问题的产生是因为在ubuntu20.04下采用snapd安装的docker,因此 systemctl restart docker.servicesystemd并不能找到守护进程docker.service 同时使用docker命令时还会产生若干…

React Router 完美教程(上)

概述 什么叫路由呢,说白了就是如何处理页面的跳转。在传统的网站中,我们都是向服务器请求页面及相应的css和js代码。自从前后端分离的相思提出后,一堆基于js虚拟Dom的框架应运而生。React就是其中优秀的代表作之一。这种方式极大的优化了开发…

Conventional SortSearch

Merge Sort——from bottom to top(iteration) void merge_sort( ElementType list[], ElementType sorted[], int N, int length ){int size1;for(;size<N;size*2){for(int i0;i<N;i2*size){int l1i; int l2sizei;int locl1;while(l1<isize&&l1<N&…

etcd自动化安装配置教程

文章目录 前言一、简介1. 简介2. 特点3. 端口介绍 二、etcd安装教程&#xff08;单机版&#xff09;1. 复制脚本2. 增加执行权限3. 执行脚本4. 查看启动状态5. 卸载etcd 三、etcd安装教程&#xff08;集群版&#xff09;1. 复制脚本2. 增加执行权限3. 分发脚本4. 执行脚本5. 启…

中科大计网学习记录笔记(一):Internet | 网络边缘

计算机网络 前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面…

【JavaSE篇】——内部类

目录 &#x1f393;内部类 &#x1f388;内部类的分类 &#x1f6a9;实例内部类 一.如何实例内部类对象 二.实例内部类中为什么不能有静态成员变量 &#xff08;用final解决&#xff09; 三.在实例内部类对象时&#xff0c;如何访问外部类当中相同的成员变量&#xff1f;…

SpringMVC-基本概念

一、引子 我们在上篇文章Spring集成Web中抛出了一个问题&#xff1a;为什么我们一直在自用Java Web阶段使用的Servlet来承接客户端浏览器的请求呢&#xff0c;我们熟知甚至是已经在日常开发中经常使用的Controller又与之有什么关系呢&#xff1f;我们将在本篇文章解答读者的这…

检测CUDA 是否能访问GPU时回应速度慢【笔记】

SUPWEMICRO 418G-Q20X12 维护记录&#xff1a; 两台设备均已安装CUDA与Pytorch&#xff0c;在检测CUDA 是否能访问GPU&#xff0c;执行torch.cuda.is_available()命令时&#xff0c;一台设备速度秒回应True&#xff0c;但另外一台设备回应速度慢&#xff08;1分钟左右&#xff…

node,node-sass,sass-loader之间的版本关系

前言 安装配置node-sass 以及 sass-loader想必是很多前端的噩梦–一不小心又不成功还得装个半天。 下面说一下这个问题。 当然&#xff0c;你肯定遇到过&#xff1a; Node Sass version 9.0.0 is incompatible with ^4.0.0-这样的问题&#xff0c;这个也是因为三者关系对不上…

【PyQt】02-基本UI

文章目录 前言一、首先了解什么是GUI&#xff1f;二、初学程序1.界面展示代码运行结果 2.控件2.1按钮展示代码运行结果 2.2 纯文本和输入框代码运行结果 3、重新设置大小 -resize4、移动窗口-move()5、设置界面在电脑中央5.1 代码运行结果 6、设置窗口图标代码运行结果 7、布局…

Django模型(二)

一、更新数据库表结构 不管是新增模型,还是修改已有模型后,只需要执行行命令即可: 1.1、创建迁移 在项目根目录的cmd中运行: $ python manage.py makemigrations model_app备注 model_app是子应用的名称,如果不指定,那么就是对所有 INSTALLED_APPS 中的应用都进行预备…

开发数据产品+AI产品通关上岸课程

该课程全面解析数据产品和人工智能产品的开发与设计。学员将学习产品规划、数据分析以及AI技术应用&#xff0c;通过案例实践掌握产品开发流程&#xff0c;致力于帮助他们成功进入数据和人工智能产品领域。 课程大小&#xff1a;9.8G 课程下载&#xff1a;https://download.cs…

Java多线程共享变量控制volatile

1. volatile实现可见性&#xff08;jdk 1.5后&#xff09; 1. 可见性 如果一个线程对共享变量值的修改&#xff0c;能够及时的被其他线程看到&#xff0c;叫做共享变量的可见性。如果一个变量同时在多个线程的工作内存中存在副本&#xff0c;那么这个变量就叫共享变量 volati…

如何从零开始开发一个PS5浏览器 | How to develop a PS5 browser

环境&#xff1a;Windows PS5一台 问题&#xff1a;PS5折腾需要使用PKG浏览器访问特定网址&#xff0c;如何自定义网址呢&#xff1f; 解决办法&#xff1a;使用开发套件PS Multi Tools开发一个空应用&#xff0c;利于deeplinkUri 参数访问网页 背景&#xff1a;PS5折腾后&…

dockerpipwork相关测试过程

pipework可以减轻docker实施过程中的工作量&#xff0c;在网上也找了几篇类似的文章&#xff0c;按照相应配置&#xff0c;结果并不相同 如下测试过程记录下&#xff1a; docker run -it --rm --name c1 busybox docker run -it --rm --name c2 busyboxpipework br1 c1 192…

Altium Designer的学习

PCB设计流程 1.新建空白工程&#xff1a; 创建一个新的工程 新建四个文件&#xff0c;并且保存&#xff1a; 每次打开文件时&#xff0c;打开以.PrjPcb结尾的文件 2.元件符号的创建&#xff1a; 在绘制图形的时候设置成10mil,为了在原理图中显得不那么大。 在绘制引脚的时候设…