IotaExcel ToolKitIotaExcel ToolKit 是一个 VS Code 插件,用于在编辑器中使用 IotaExcel 工作流。插件内置 功能
用户使用指南命令面板在 VS Code 命令面板中搜索
初始化工作区执行 默认目录会归拢在同一个根目录下:
初始化命令会保存以下设置:
执行时可以修改默认根目录名和代码生成使用的 package 或 namespace。如果工作区已有 IotaExcel 路径设置,插件会在覆盖前进行确认。
转换 Excel
也可以在资源管理器中右键 生成读取代码
也可以在资源管理器中右键 预览
|
| 目标语言 | 业务文件 | runtime 文件 | 默认包/命名空间 |
|---|---|---|---|
| C# | <ExcelName>.config.cs |
IotaExcelRuntime.cs |
DataConfig |
| Go | <ExcelName>.config.go |
iotaexcel_runtime.go |
dataconfig |
| C++ | <ExcelName>.config.hpp |
iotaexcel_runtime.hpp |
DataConfig |
| Java | <ExcelName>.java |
IotaExcelRuntime.java |
dataconfig |
| JavaScript | <ExcelName>.config.js |
iotaexcel_runtime.js |
不使用 |
| Python | <ExcelName>_config.py |
iotaexcel_runtime.py |
不使用 |
| Swift | <ExcelName>.config.swift |
IotaExcelRuntime.swift |
不使用 |
iotaexcel-toolkit.package 可用于覆盖 C# 命名空间、Go/Java 包名或 C++ 命名空间。JavaScript、Python 和 Swift 当前不使用该设置。
业务加载方式
生成代码提供两类加载入口:
- 直接加载入口:业务层自行读取完整
.bytes字节,再传给 table loader。 - 文件名回调加载入口:Reader 把约定的
.bytes文件名交给业务层回调,由业务层从文件系统、包体资源、Addressables、AssetBundle、网络或其他资源系统中读取字节。
C# 示例:
using DataConfig;
var itemBytes = File.ReadAllBytes("Config_ItemConfig.bytes");
var itemTable = ItemConfigTable.Load(itemBytes);
if (itemTable.TryGetByid(1001, out var item))
{
Console.WriteLine(item.name);
}
var itemTableFromAssets = await ItemConfigTable.LoadAsync(ReadBytesAsync);
Go 示例:
itemBytes, err := os.ReadFile("Config_ItemConfig.bytes")
if err != nil {
return err
}
itemTable, err := dataconfig.LoadItemConfigTable(itemBytes)
if err != nil {
return err
}
item, ok := itemTable.TryGetByid(1001)
itemTableFromAssets, err := dataconfig.LoadItemConfigTableFrom(readBytes)
C++ 示例:
auto itemTable = DataConfig::ItemConfigTable::Load(ReadAllBytes("Config_ItemConfig.bytes"));
const DataConfig::ItemConfig* item = nullptr;
if (itemTable.TryGetByid(1001, item)) {
// use item
}
auto itemTableFromAssets = DataConfig::ItemConfigTable::LoadFrom(readBytes);
Java 示例:
Config.ItemConfigTable table = Config.ItemConfigTable.load(data);
Config.ItemConfig item = table.tryGetByid(1001);
Config.ItemConfigTable tableFromAssets = Config.ItemConfigTable.loadFrom(readBytes);
JavaScript 示例:
import { ItemConfigTable, loadItemConfigTableFrom } from "./generated/Config.config.js";
const table = ItemConfigTable.load(bytes);
const item = table.tryGetByid(1001);
const tableFromAssets = await loadItemConfigTableFrom(readBytes);
Python 示例:
from Config_config import ItemConfigTable, load_item_config_table_from
table = ItemConfigTable.load(item_bytes)
item = table.try_get_by_id(1001)
table_from_assets = load_item_config_table_from(read_bytes)
Swift 示例:
let table = try ItemConfigTable.load(data)
let item = table.tryGetByid(1001)
let tableFromAssets = try ItemConfigTable.loadFrom(readBytes)
上述示例中的 ReadBytesAsync、readBytes、ReadAllBytes、data、bytes 和 item_bytes 都由业务层按自身资源系统实现。生成代码只负责解析 .bytes 内容,并提供按 key 或 ! 唯一字段查询配置行的 table API。
运行时边界
业务运行时不需要依赖 VS Code 插件,也不需要调用 iotaexcel 命令行工具。Reader 代码会按照生成时编译进代码里的 schema 解析 .bytes,因此上层业务只需要发布 .bytes 和生成代码。
如果业务只需要运行时读取,建议优先导出 .bytes。JSON 和 CSV 更适合调试、比对、人工检查或其他工具链消费。
版本与 schema 兼容
.bytes 文件中包含二进制版本号和 schema hash。生成 Reader 会检查版本,并按代码中的字段编号和 wire type 解析数据。为了降低线上兼容风险,建议遵守以下约定:
.bytes和生成代码应来自同一次导出流程,或至少来自兼容的 Excel schema。- 已发布并被业务读取的表,不建议在已有二进制字段中间插入新字段;新增字段优先追加到末尾。
- 修改字段名、字段类型、key 字段或字段用途后,需要重新执行 Convert 和 Codegen,并同步更新业务工程。
defaultTarget会影响导出的字段集合,客户端和服务端应分别使用匹配的client、server或both产物。- 开启
selfDescribingBytes会在.bytes中写入字段名和类型名,便于预览和独立 decode;关闭后体积更小,但预览和反解析能力会受限。 - 使用
ref<T>时,建议开启checkRef,在导出阶段提前发现跨表引用错误。
设置项
IotaExcel ToolKit 提供以下设置:
iotaexcel-toolkit.toolPath:可选的外部 IotaExcel 可执行程序绝对路径。为空时使用插件内置程序。iotaexcel-toolkit.defaultTarget:默认字段目标,可选both、client、server。iotaexcel-toolkit.overwrite:输出文件存在时是否覆盖。iotaexcel-toolkit.checkRef:是否检查ref<T>引用目标表和 key。iotaexcel-toolkit.selfDescribingBytes:导出.bytes时是否包含字段名、类型名等自描述信息。iotaexcel-toolkit.sheet:可选的 sheet 名称或 1-based sheet 序号。iotaexcel-toolkit.recursive:扫描输入目录时是否递归。iotaexcel-toolkit.strict:schema 错误是否导致当前文件失败。iotaexcel-toolkit.logLevel:IotaExcel 日志等级。iotaexcel-toolkit.logFormat:IotaExcel 日志格式,可选text或json。iotaexcel-toolkit.logFile:可选日志文件路径。iotaexcel-toolkit.package:代码生成使用的 package 或 namespace。iotaexcel-toolkit.convertConfigPath:Convert 使用的 key=value 配置文件路径。iotaexcel-toolkit.convertInputPath:Convert 输入 Excel 文件或目录,会覆盖配置文件中的 input。iotaexcel-toolkit.convertOutputPath:Convert 输出目录,会覆盖配置文件中的 output。iotaexcel-toolkit.codegenConfigPath:Codegen 使用的 key=value 配置文件路径。iotaexcel-toolkit.codegenInputPath:Codegen 输入 Excel 文件或目录,会覆盖配置文件中的 input。iotaexcel-toolkit.codegenOutputPath:Codegen 输出目录,会覆盖配置文件中的 output。
内置命令行工具
插件会根据当前平台自动选择 bin/ 目录下的可执行程序:
- Windows:
iotaexcel-windows-amd64.exe - Linux:
iotaexcel-linux-amd64 - macOS Intel:
iotaexcel-darwin-amd64 - macOS Apple Silicon:
iotaexcel-darwin-arm64
如果需要使用外部构建的 IotaExcel,请配置 iotaexcel-toolkit.toolPath。
开发
安装依赖:
npm install
编译:
npm run compile
在 VS Code 中按 F5 可启动 Extension Development Host 进行调试。
打包 VSIX
确保已安装 vsce 后执行:
npm run package
生成的 .vsix 文件可通过 VS Code 的 Install from VSIX... 命令安装。