跳到主要内容

FAQ

网站默认英文,首次访问首页时根据浏览器的系统语言偏好选择英文或简体中文。语言菜单可手动切换、记住选择,也可恢复跟随系统;直接打开文档链接保持该链接语言。

哪里有完整的示例?​

转表功能和二进制数据读取的示例见: https://github.com/xresloader/xresloader/tree/main/sample

文本和Msgpack数据读取示例见: https://github.com/xresloader/xresloader/tree/main/loader-binding

批量转表配置的示例见: https://github.com/xresloader/xresconv-conf

为什么会读到很多空数据?​

Excel里编辑过的单元格即便删除了也会留下不可见的样式配置,这时候会导致转出的数据有空行。可以通过在Excel里删除行解决

为什么Excel里填的时间,但是转出来是一个负数?​

先区分绝对时间 Timestamp、周期 Duration 与普通数值。默认流式读取不探测日期格式,依赖日期单元格时需显式启用实时公式模式并核对值;Excel 序列时间、保存缓存和文本时间不能混用。具体规则见 日期时间与 Duration。

Windows下控制台里执行执行会报文件编码错误?(java.nio.charset.UnsupportedCharsetException: cp65001)​

这个问题涉及的几个Exception是:

ERROR StatusLogger Unable to inject fields into builder class for plugin type class org.apache.logging.log4j.core.appender.ConsoleAppender, element Console.
java.nio.charset.UnsupportedCharsetException: cp65001
at java.nio.charset.Charset.forName(Unknown Source)
at org.apache.logging.log4j.util.PropertiesUtil.getCharsetProperty(PropertiesUtil.java:146)
at org.apache.logging.log4j.util.PropertiesUtil.getCharsetProperty(PropertiesUtil.java:134)
...
...

和

ERROR StatusLogger Unable to invoke factory method in class class org.apache.logging.log4j.core.appender.ConsoleAppender for element Console.
java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.ConsoleAppender
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.findFactoryMethod(PluginBuilder.java:224)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:130)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
...
...

以上是旧 Java/log4j 环境的历史错误。当前工具统一使用 UTF-8,先核对 java -version、JAR 版本和实际启动环境;JVM 编码参数需放在 -jar 前:

java -Dfile.encoding=UTF-8 -jar xresloader.jar --version

不要为了加载当前 GUI/XML 全局切换 GBK。若仍出现相同异常,保留原始日志,检查 log4j2 配置和所用 JRE 是否确实为预期版本。

C++加载代码编译时出现xresloader符号重定义(multiple definition of org::xresloader::pb::xresloader_XXX)​

pb_header.pb.cc 和 pb_header_v3.pb.cc 只能保留一个

如果系统采用的是proto v3则保留pb_header_v3.pb.cc

如果系统采用的是老版本的proto v2则保留pb_header.pb.cc

C++加载代码编译时出现xresloader版本检查错误​

具体表现为编译时输出 This file was generated by an older version of protoc ... 或 This file was generated by a newer version of protoc ... 。

这是因为protoc版本和目前所用的protobuf版本不一致,请尝试重新用目前所用的protoc根据配置的proto文件和header目录中的 pb_header_v3.proto 或 pb_header.proto 重新生成c++代码文件。

proto v2版本API解析repeated的整数或浮点数类型字段失败(Wire Type)​

Repeated 的可打包数值在 proto2 默认 packed=false,proto3 默认 packed=true;实际编码取决于 descriptor 的语法与 packed 选项。符合规范的解析器需要同时接受两种形式,不能把“使用 proto2 API”本身判定为不兼容。

若旧版第三方解析库只支持一种形式,先核对库版本和生成代码,再显式设置 packed 并做实际解码检查。

详见 proto2/proto3 与 packed 编码。

为什么在proto里定义的是一个无符号(unsigned)类型(uint32、uint64等),实际输出的UE代码是有符号(signed)的(int32/int64)?​

因为有一些语言是没有无符号(unsigned)类型的,为了统一数据类型,我们统一转换为有符号类型,转换方式和protobuf的java版SDK保持一致。如果需要使用大于int32最大值的uint32类型,请用int64代替。

为什么 UE-Csv 和 UE-Json 输出的代码会多一个 Name 字段?​

因为对 UE-Json 输出中, Name 是一个特殊字段,也用于UE中内置的接口的查找索引。所以为了统一输出的数据结构( 这样无论是 UE-Csv 还是 UE-Json 都可以用相同的代码结构来导入 ),我们对 UE-Csv 和 UE-Json 统一自动生成 Name 字段。但是如果用户自定义了 Name 字段, 我们会使用用户自定义的 Name 字段。

要如何配置可以让Excel里的数据指向UE的类型或资源​

可以使用 org.xresloader.ue.ue_type_name 插件和 org.xresloader.ue.ue_type_is_class 插件。详见: output-format-export ue

为什么UE的代码输出里对 oneof 的case输出使用 FString 的字段名而不使用 UEnum()​

主要是因为(当前版本4.X)UE的 UEnum() 的支持仅支持基于 uint8 的,但是protobuf的field number是 int32 。为了兼容性所以没有使用 UEnum() 。 如果输出int32的话在UE里不太好操作,所以输出了字符串类型,方便蓝图里或UE代码里通过UE内置的反射机制访问。

提示 Can not reserve enough space for XXX objecct heap​

在转换很大的Excel文件时(上万行数据),会需要很高的内存(>=1GB)。所以为了方便我们在批量转表sample的xml中配置了 <java_option desc="java选项-最大内存限制2GB">-Xmx2048m</java_option> 。 如果出现这个提示可能是32位jre无法分配这么多地址空间导致的,可以在xml里删除这个配置。但是还是建议使用64位jre。

在 v2.10.0 版本以后,可以通过使用 --disable-excel-formular 关闭公式实时计算,这时候会使用内部的索引器,能够大幅降低内存和CPU开销。

> 关闭公式实时计算并不是指不支持公式。Excel在保存时会保存一份公式计算结果的缓存,关闭公式实时计算后会使用这个缓存。

CLI 预览成功却没有文件?​

--test 不执行 Java。去掉 --test 后检查退出码、工作目录和真实产物。即使预览为 0 job(s) failed,表格或 descriptor 仍可能在实际运行时失败。

GUI 搜索后为什么还转换了未显示的条目?​

搜索保留已选集合。运行前取消不需要的选择,再检查预览;只隐藏条目不会取消选择。

GUI 3.0 的脚本为什么找不到 Electron、jQuery 或 console?​

3.0 的脚本在独立 Node worker 中运行,使用 log_* 日志和兼容树接口。事件必须显式 resolve/reject,见 脚本迁移。

GUI 启动时没有显示自定义按钮?​

先确认 JSON 路径、编码、名称和规则。如果 3.0.0 同时传入 --input 与 --custom-selector,即使参数正确,启动时的 XML 加载与选择器接线也可能竞争,导致按钮未加载。退出后只用以下命令启动,等待按钮出现,再在界面打开 XML:

xresconv-gui --custom-selector selectors.json

这属于当前版本的启动顺序问题;仅点击“重载配置”不会重新读取已经丢失的启动接线。选择器规则和按钮脚本见 扩展文档。

网站语言与 GUI、日志为什么不同?​

GUI 的语言在自己的「显示设置」中选择,不跟随网页切换。项目条目名称、脚本按钮与提示来自 XML / selectors.json,应使用对应语言的入门包。当前 CLI、Java 引擎与 dump-bin 没有语言开关,原始诊断为英文;中文页面使用中文说明和数据,保留真实日志。