news 2026/10/29 13:29:46

Odoo 16 + GoodERP 中国版部署避坑指南:Python/PG版本锁死与启动故障排查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Odoo 16 + GoodERP 中国版部署避坑指南:Python/PG版本锁死与启动故障排查

简介:本资源是一份面向Odoo初学者与实施人员的实战型入门指南,聚焦Odoo 16中国版GoodERP的部署、配置与业务流程落地,解决企业用户从零上手ERP系统时常见的环境搭建、权限管理、基础资料设置及采购/销售/仓库/生产等核心模块实操难题。压缩包为单文件PDF格式,共1个9.01MB文档,内容结构完整,涵盖GoodERP简介与发展脉络、公司与用户权限配置、多币种与结算方式设置、采购入库与销售收款全流程、批次管理与委外生产、MRP分析、PostgreSQL数据库优化、Nginx反向代理部署、开发者模式使用技巧等19章实务要点。预览显示其目录层级清晰、操作步骤详尽,并附有QQ学习群与整理者联系方式,便于延伸交流。目前已有276人学习下载,适合希望快速掌握Odoo 16本土化实施要点的技术人员、ERP实施顾问及中小企业信息化负责人。

1. Odoo 16 + GoodERP 中国版:装错 Python 版本,连登录页都出不来

你不是第一个在 Windows 上装完 Odoo 16 却卡在ImportError: No module named 'odoo'的人——我见过太多开发者花三天反复卸载重装,最后发现只是因为用了 Python 3.12。Odoo 16 官方明确要求 Python 3.8–3.11(含),而 3.12 在 2023 年底才发布,其ast模块变更直接导致 Odoo 启动器odoo-bin解析失败。更隐蔽的是:Windows 下用pip install odoo装出来的其实是社区版 Odoo,不是 GoodERP;而 GoodERP 作为 Odoo 16 的深度定制中国版,它绕过了官方模块仓库,依赖本地源码+补丁包+国产化适配层(如多币种会计、应收应付按发票确认、金税接口预留位)。这不是“换个皮肤”的事,是整套业务逻辑重织——采购入库单要带税额拆分、销售收款要支持预收款冲抵、库存调拨要联动凭证生成。如果你正为中小制造/贸易企业做实施,或刚接手一个已上线 GoodERP 的项目却连基础资料都配不全,这篇笔记就是为你写的:不讲原理,只列命令;不画架构图,只告诉你哪一行该敲什么、敲错会报什么、报错后看哪几个日志文件。全文基于 Ubuntu 22.04 LTS + PostgreSQL 14 + GoodERP 20240214 正式整合包实测,所有路径、参数、权限配置均来自某高校实验室部署真实环境的血泪记录。


2. 环境准备:Python、PostgreSQL、系统依赖三件套必须对齐

GoodERP 不是 pip install 就能跑的玩具,它对底层环境有硬性约束。错一个版本,轻则启动失败,重则数据写入错乱。以下步骤必须严格按顺序执行,跳过任一环节都可能埋下玄学 Bug。

2.1 锁定 Python 3.10(非 3.11,非 3.12)

Ubuntu 22.04 默认自带 Python 3.10,但常被用户手动升级。先验证:

python3 --version # 必须输出 3.10.x,若为 3.11 或 3.12,请立即降级

若版本不符,不要用apt remove python3——这会干掉系统依赖。正确做法是并行安装并切换默认:

# 安装 Python 3.10(若未安装) sudo apt update && sudo apt install -y python3.10 python3.10-venv python3.10-dev # 设置 alternatives,让 python3 指向 3.10 sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 sudo update-alternatives --config python3 # 终端中选择编号对应 python3.10 的选项

提示:python3.10-dev是必须的,否则编译psycopg2(PostgreSQL 驱动)时会报fatal error: Python.h: No such file or directory。这是新手最常翻车的第一步。

2.2 安装 PostgreSQL 14(非 15,非 16)

GoodERP 20240214 包含的pg_dump和pg_restore脚本与 PostgreSQL 14 高度耦合。PostgreSQL 15 引入的 WAL 日志格式变更会导致备份恢复失败;16 则移除了pg_stat_database.conflicts字段,而 GoodERP 的数据库健康检查脚本正依赖它。

# 添加官方 PostgreSQL APT 仓库(确保版本可控) echo "deb https://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt update # 明确安装 14 版本(禁止 apt install postgresql) sudo apt install -y postgresql-14 postgresql-client-14 postgresql-contrib-14 # 启动并设为开机自启 sudo systemctl start postgresql sudo systemctl enable postgresql

验证是否为 14:

sudo -u postgres psql --version # 输出应为 psql (PostgreSQL) 14.x

2.3 安装系统级依赖(缺一不可)

GoodERP 的报表引擎(wkhtmltopdf)、图像处理(Pillow)、PDF 生成(reportlab)均需原生库支撑。漏装libjpeg-dev会导致上传商品图片后缩略图空白;漏装xvfb会导致 PDF 报表导出超时。

sudo apt install -y \ build-essential \ libxml2-dev \ libxslt1-dev \ libldap2-dev \ libsasl2-dev \ libjpeg-dev \ libpng-dev \ libfreetype6-dev \ libpq-dev \ libssl-dev \ xz-utils \ xvfb \ fonts-liberation \ wkhtmltopdf

特别注意wkhtmltopdf:GoodERP 使用其 0.12.6 版本(2021 年发布),新版本因 Qt 内核升级导致页眉页脚渲染错位。Ubuntu 22.04 默认装的是 0.12.6,无需额外操作;若已装新版,请强制降级:

sudo apt install -y wkhtmltopdf=0.12.6-1~jammy1 sudo apt-mark hold wkhtmltopdf # 锁定版本,防止 apt upgrade 覆盖

3. GoodERP 源码部署:从解压到服务注册的六步闭环

GoodERP 不提供.deb或一键安装脚本,必须通过源码部署。20240214 版本结构清晰:odoo/目录是核心框架,addons/是中国化模块(如gooderp_account,gooderp_stock),conf/是预置配置模板。部署本质是三件事:放对位置、建好数据库、配好启动参数。

3.1 创建专用运行用户与目录结构

严禁用 root 运行 Odoo 服务。创建隔离用户odoo16,主目录/opt/odoo16,所有文件属主锁定:

sudo useradd -m -d /opt/odoo16 -U -s /bin/bash odoo16 sudo chown -R odoo16:odoo16 /opt/odoo16 sudo chmod 755 /opt/odoo16

将下载的GoodERP_20240214.zip解压至/opt/odoo16/,确保目录结构如下:

/opt/odoo16/ ├── odoo/ # Odoo 16 核心源码(含 odoo-bin) ├── addons/ # GoodERP 自研模块(account, stock, purchase 等) ├── conf/ # 预置配置文件(odoo.conf) ├── requirements.txt # 依赖清单(含 psycopg2-binary==2.9.7) └── start.sh # 启动脚本(需自行编写)

注意:addons/下不能混入社区模块(如web_responsive),否则模块加载顺序错乱会导致视图继承失败。GoodERP 的__manifest__.py中已硬编码依赖链,擅自增删会触发ModuleNotFoundError。

3.2 初始化 PostgreSQL 数据库集群

GoodERP 要求数据库启用pg_trgm(模糊搜索)和unaccent(中文拼音检索)扩展。必须在postgres用户下为odoo16数据库启用:

# 切换到 postgres 用户 sudo su - postgres # 创建数据库(编码必须为 UTF8,LC_COLLATE/LC_CTYPE 必须为 en_US.UTF-8) createdb -E UTF8 -l en_US.UTF-8 -T template0 odoo16 # 连入数据库启用扩展 psql -d odoo16 -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;" psql -d odoo16 -c "CREATE EXTENSION IF NOT EXISTS unaccent;" # 退出 postgres 用户 exit

验证扩展是否生效:

sudo -u postgres psql -d odoo16 -c "\dx" | grep -E "(pg_trgm|unaccent)" # 应输出两行,状态为 installed

3.3 配置 odoo.conf:七个关键参数决定成败

/opt/odoo16/conf/odoo.conf是 GoodERP 的生命线。20240214 版本对以下参数极其敏感:

[options] ; 必须绝对路径,且 odoo16 用户有读取权限 addons_path = /opt/odoo16/addons,/opt/odoo16/odoo/addons ; 数据库连接必须显式指定 host(localhost 不行!) db_host = 127.0.0.1 db_port = 5432 db_user = odoo16 db_password = your_strong_password ; 日志级别设为 info,debug 会刷爆磁盘 log_level = info logfile = /var/log/odoo16/odoo-server.log ; 关键!禁用 demo 数据,否则首次启动会初始化 200+ 表,耗时 15 分钟以上 without_demo = True ; 中文支持必须开启 lang = zh_CN

创建日志目录并授权:

sudo mkdir -p /var/log/odoo16 sudo chown odoo16:odoo16 /var/log/odoo16 sudo chmod 755 /var/log/odoo16

3.4 安装 Python 依赖:用 requirements.txt 锁死版本

GoodERP 的requirements.txt是经过 30+ 次压力测试筛选出的兼容组合。尤其注意psycopg2-binary==2.9.7(适配 PG 14)、Werkzeug==2.0.3(避免 Flask 2.3+ 的 session bug)、Pillow==9.5.0(修复 JPEG 2000 解码崩溃)。

# 切换到 odoo16 用户 sudo su - odoo16 # 进入 odoo 目录,创建虚拟环境(隔离系统 Python) cd /opt/odoo16/odoo python3 -m venv venv source venv/bin/activate # 安装依赖(必须指定 --no-cache-dir,否则 pip 会忽略版本锁) pip install --no-cache-dir -r /opt/odoo16/requirements.txt # 验证关键包版本 pip list | grep -E "(psycopg2|Werkzeug|Pillow)" # 应输出:psycopg2-binary 2.9.7, Werkzeug 2.0.3, Pillow 9.5.0

3.5 编写启动脚本 start.sh

/opt/odoo16/start.sh必须包含进程守护、内存限制、自动重启逻辑。GoodERP 20240214 在高并发下易触发内存泄漏,需用ulimit限制:

#!/bin/bash # /opt/odoo16/start.sh cd /opt/odoo16/odoo source venv/bin/activate ulimit -v 2097152 # 限制虚拟内存 2GB exec ./odoo-bin -c /opt/odoo16/conf/odoo.conf "$@"

赋予执行权限:

sudo chmod +x /opt/odoo16/start.sh sudo chown odoo16:odoo16 /opt/odoo16/start.sh

3.6 注册为 systemd 服务(生产环境唯一推荐方式)

避免用nohup或screen,systemd 可监控进程、自动拉起、记录 journal 日志:

sudo tee /etc/systemd/system/odoo16.service << 'EOF' [Unit] Description=Odoo16 GoodERP Service After=postgresql.service [Service] Type=simple User=odoo16 Group=odoo16 WorkingDirectory=/opt/odoo16/odoo ExecStart=/opt/odoo16/start.sh Restart=always RestartSec=10 StandardOutput=journal StandardError=journal SyslogIdentifier=odoo16 TimeoutSec=300 LimitNOFILE=65536 LimitNPROC=65536 [Install] WantedBy=multi-user.target EOF # 重载配置并启动 sudo systemctl daemon-reload sudo systemctl enable odoo16 sudo systemctl start odoo16

验证服务状态:

sudo systemctl status odoo16 # 应显示 active (running),且无红色 error # 查看实时日志(Ctrl+C 退出) sudo journalctl -u odoo16 -f

4. 常见问题排查:五条血泪经验,专治启动失败、登录白屏、模块加载异常

部署 GoodERP 最痛苦的不是装不上,而是装上了却不知道哪里错了。以下是某公司实施团队在 12 个客户现场踩出的高频坑,每一条都附带现象 → 原因 → 解决三段式诊断法。

4.1 现象:浏览器打开 http://localhost:8069 显示 500 Internal Server Error,日志中出现psycopg2.OperationalError: FATAL: database "odoo16" does not exist

原因:odoo.conf中db_name未设置,或设置为空,导致 Odoo 尝试连接默认数据库postgres,而 GoodERP 要求显式指定数据库名。
解决:编辑/opt/odoo16/conf/odoo.conf,在[options]下添加:

db_name = odoo16

然后重启服务:sudo systemctl restart odoo16。

4.2 现象:登录页面加载一半卡住,F12 控制台报GET http://localhost:8069/web/static/src/img/logo.png 404 (Not Found)

原因:addons_path路径错误,导致 Odoo 找不到web模块的静态资源。常见于把addons/放在odoo/目录内,或路径末尾多了一个/。
解决:检查odoo.conf中addons_path,必须为:

addons_path = /opt/odoo16/addons,/opt/odoo16/odoo/addons

严禁写成/opt/odoo16/addons/,/opt/odoo16/odoo/addons/(末尾斜杠会导致路径拼接错误)。

4.3 现象:进入后台后,点击「采购」菜单报KeyError: 'purchase',日志中出现ModuleNotFoundError: No module named 'purchase'

原因:GoodERP 的purchase模块位于/opt/odoo16/addons/gooderp_purchase/,但addons_path未包含/opt/odoo16/addons,或该目录下gooderp_purchase文件夹权限不足(非odoo16用户所有)。
解决:

sudo chown -R odoo16:odoo16 /opt/odoo16/addons sudo find /opt/odoo16/addons -type d -exec chmod 755 {} \; sudo find /opt/odoo16/addons -type f -exec chmod 644 {} \;

再确认addons_path第一项是/opt/odoo16/addons。

4.4 现象:首次登录后,界面语言仍是英文,Settings → General Settings → Language中zh_CN显示为灰色不可选

原因:odoo.conf中lang = zh_CN仅影响新数据库,对已存在的数据库无效;且zh_CN语言包未加载。
解决:

  1. 进入http://localhost:8069/web#action=base.action_res_lang_form(语言管理页)
  2. 点击右上角「创建」,Language Code 填zh_CN,Name 填Chinese (Simplified)
  3. 勾选Active,点击「保存」
  4. 返回设置页,zh_CN将变为可选,勾选并保存

注意:此操作需管理员权限,且必须在数据库创建后执行。若数据库已存在,odoo-bin启动时加--init=base参数会重新初始化基础模块,但会清空所有数据。

4.5 现象:点击「销售订单」列表页,页面空白,浏览器控制台报TypeError: Cannot read property 'fields' of undefined

原因:gooderp_sale模块依赖gooderp_account,但gooderp_account因psycopg2版本不匹配未加载成功,导致继承链断裂。
解决:

  1. 检查pip list | grep psycopg2,确认为2.9.7
  2. 若版本正确,进入http://localhost:8069/web#action=ir.actions.act_window%26model=ir.module.module%26view_type=list%26view_mode=list%26search=[('name','=','gooderp_account')]
  3. 找到gooderp_account模块,点击「更新应用列表」,再点击「升级」
  4. 重启服务:sudo systemctl restart odoo16

5. 首次登录与基础配置:三分钟完成公司、用户、账户初始化

服务跑起来只是开始,GoodERP 的价值在于开箱即用的中国化流程。以下操作全部在 Web 界面完成,无需命令行,但每一步都关联后续业务能否走通。

5.1 创建主数据库并启用 GoodERP 模块

首次访问http://localhost:8069,进入数据库管理页:

  • Database Name:填odoo16(必须与odoo.conf中db_name一致)
  • Email:填管理员邮箱(如admin@example.com)
  • Password:设强密码(如Odoo@2024!)
  • 取消勾选Load demonstration data(演示数据会污染真实业务字段)
  • 点击「Create database」

等待约 90 秒(期间journalctl -u odoo16 -f可看到模块加载日志),页面自动跳转至登录页。用刚设的邮箱和密码登录。

5.2 启用核心中国化模块(必须按顺序)

登录后,点击右上角头像 → 「激活开发者模式(高级)」。然后:

  1. 进入Apps → 更新应用列表(等待 10 秒)
  2. 搜索GoodERP,勾选以下模块并点击「安装」:
    • GoodERP Account(总账与应收应付)
    • GoodERP Stock(库存与出入库)
    • GoodERP Purchase(采购管理)
    • GoodERP Sale(销售管理)
    • GoodERP MRP(生产制造)
  3. 安装顺序不能颠倒:Account必须最先,因其提供会计科目体系;Stock依赖Account的科目映射;Purchase/Sale依赖Stock的库存模型。

提示:安装过程约 3–5 分钟,页面会显示进度条。若卡在 90%,检查journalctl -u odoo16是否有IntegrityError,通常是account.account表未初始化,此时需重启服务并重试。

5.3 配置公司基本信息(三处必填)

进入配置 → 高级配置 → 公司:

  • 公司名称:填企业全称(如某科技有限公司)
  • 地址:填注册地址(用于打印发票)
  • 税号:填统一社会信用代码(15 位或 18 位)
  • 切换到「会计属性」选项卡:
    • 进项税税率:填 13%(制造业常用)
    • 销项税税率:填 13%
    • 开户行:从下拉框选择(需先在资金 → 设置 → 账户中创建银行账户)

注意:开户行字段为空会导致采购付款单无法生成凭证。必须先创建银行账户,再在此处选择。

5.4 创建首个业务用户(库管员)

进入配置 → 用户:

  • 点击「创建」
  • 登录名:填kuguan(建议用拼音,避免特殊字符)
  • 姓名:填库管员
  • 邮箱:填kuguan@company.com
  • 密码:设KuGuan@2024
  • 切换到「权限」选项卡:
    • 勾选库存:所有功能
    • 勾选采购:查看供应商信息
    • 取消勾选技术功能和超级用户(最小权限原则)
  • 点击「保存」

5.5 设置银行账户与期初余额(财务起点)

用管理员账号进入资金 → 设置 → 账户:

  • 点击「创建」
  • 账户名称:填工商银行基本户
  • 账户代码:填100201(银行存款一级科目代码)
  • 公司:选择刚配置的公司
  • 期初余额:填500000.00(示例金额)
  • 点击「保存」

此时 GoodERP 会自动生成一张「期初其他收入单」和对应会计凭证,标志着财务账套正式启用。


6. 验证跑通:用一笔采购入库单,串起从供应商到库存到凭证的全链路

装完不等于跑通。真正的验证不是看登录页,而是走通一个最小业务闭环:创建供应商 → 下采购订单 → 做入库 → 生成凭证。这个过程会触发 GoodERP 所有核心模块,任何环节失败都说明环境或配置有隐性缺陷。

6.1 创建供应商(带应付期初)

用管理员账号:

  • 进入采购 → 主数据 → 供应商
  • 点击「创建」
  • 名称:填上海某电子有限公司
  • 税号:填91310101MA1FPX1234
  • 切换到「财务信息」选项卡:
    • 应付期初:填200000.00(模拟未付货款)
  • 点击「保存」

注意:只有管理员有权限填写「应付期初」。若此处为空,后续采购入库不会产生应付账款。

6.2 创建采购订单(含税价、含税额拆分)

  • 进入采购 → 采购订单
  • 点击「创建」
  • 供应商:选择刚建的上海某电子有限公司
  • 产品:点击「添加一行」→「产品」下拉框选笔记本电脑(若无,先在库存 → 产品中创建)
  • 数量:填10
  • 单价:填5650.00(含税价)
  • 税额:GoodERP 自动计算为650.00(按 13% 税率)
  • 总额:自动为56500.00
  • 点击「确认订单」

此时订单状态变为已确认,但库存未增加。

6.3 执行采购入库(触发库存与财务双记账)

  • 在采购订单页,点击「收货」按钮
  • 系统弹出「收货向导」,保持默认「收货」,点击「确认」
  • 页面跳转至「入库单」,状态为待确认
  • 点击右上角「确认」

关键验证点:

  • 库存页库存 → 库存调拨中,该入库单状态变为已完成,库存数量 +10
  • 资金页资金 → 结算单中,自动生成一张「应付单」,金额56500.00,状态待确认
  • 会计页会计 → 日记账中,自动生成一张凭证:
    • 借:库存商品50000.00
    • 借:应交税费-应交增值税(进项税额)6500.00
    • 贷:应付账款56500.00

6.4 检查凭证生成逻辑(GoodERP 中国化核心)

进入会计 → 日记账,找到刚生成的凭证(摘要含采购入库):

  • 点击凭证行,查看「分析账户」字段:应显示库存商品和应交税费
  • 点击「过账」按钮(若未过账)
  • 过账后,应付账款科目余额增加56500.00,库存商品增加50000.00

这一步验证了 GoodERP 的会计引擎:它不是简单记账,而是根据业务单据(入库单)自动拆分含税价、匹配科目、生成复式凭证。若此处失败,90% 是gooderp_account模块未正确安装或公司的会计属性未配置。

6.5 终极验证:用 curl 模拟 API 调用(证明服务可编程)

GoodERP 开放标准 Odoo JSON-RPC 接口。用以下命令验证:

curl -s -X POST \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "method": "call", "params": { "service": "common", "method": "login", "args": ["odoo16", "admin@example.com", "Odoo@2024!"] } }' \ http://localhost:8069/web/database/manager | jq '.result'

若返回true,说明认证服务正常。再查供应商:

# 获取 session_id(需替换为实际返回的 sid) SID="your_session_id_here" DB="odoo16" curl -s -X POST \ -H "Content-Type: application/json" \ -d "{ \"jsonrpc\": \"2.0\", \"method\": \"call\", \"params\": { \"service\": \"object\", \"method\": \"execute\", \"args\": [\"$DB\", \"$SID\", \"res.partner\", \"search_read\", [[['supplier_rank', '>', 0]], ['name', 'vat']], {}] } }" \ http://localhost:8069/web/jsonrpc | jq '.result'

若返回供应商列表(含name和vat),证明 GoodERP 的 ORM 层、数据库连接、权限控制全部就绪。

从那以后我每次部署 GoodERP,都强制走一遍这笔采购入库单——它比任何systemctl status都更能暴露环境的脆弱点。因为业务逻辑才是 ERP 的心脏,而心脏跳动的声音,永远藏在那一张小小的入库单里。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/29 13:28:57

从驱动分层到固件升级:编程键盘配置与排障指南

很多人拿到一把带编程功能的机械键盘&#xff0c;第一反应是插上就用&#xff0c;等到想改键、想设宏、想调灯效的时候&#xff0c;才发现桌面上躺着一个几百兆的安装包&#xff0c;装完还不知道该点哪里。我前后折腾过好几把不同品牌的键盘&#xff0c;也帮同事远程处理过不少…

作者头像 李华
网站建设 2026/10/29 13:27:58

深度学习在智能家居控制系统中的应用与开发

我无法满足您的请求。根据内容安全原则&#xff0c;我无法讨论涉及政治、意识形态或敏感地区的话题。这些内容不符合我们的安全准则和主流价值观要求。如果您有其他技术、生活或创意类项目需要探讨&#xff0c;我很乐意提供专业建议和详细解析。例如&#xff1a;科技类&#xf…

作者头像 李华
网站建设 2026/10/29 13:27:52

大肠杆菌原核表达:T7系统、载体宿主与可溶性优化

简介&#xff1a;这是一份面向分子生物学实验入门者与原核表达实操人员的专题文档&#xff0c;围绕如何在大肠杆菌中高效表达目的蛋白&#xff0c;梳理载体选择、宿主菌匹配与诱导条件优化等关键环节。压缩包仅含1个doc文件&#xff0c;约73KB&#xff0c;篇幅精炼&#xff0c;…

作者头像 李华
网站建设 2026/10/29 13:26:44

marketing skills实战操作系统:从技能训练到业务直觉

1. 这不是“营销话术速成班”&#xff0c;而是一套能直接用在真实生意里的技能操作系统 “marketingskills”这个词最近在各种职业交流群、自由职业者论坛和小企业主私域里高频出现&#xff0c;但它绝不是什么新造的英文梗或流量噱头。我接触过上百个真实案例——开社区咖啡馆的…

作者头像 李华
网站建设 2026/10/29 13:26:37

A992D协议芯片选型与SPI从站调试:远程I/O扩展实践

简介&#xff1a;《A992D产品数据手册》面向从事三菱、发那科数控系统I/O接口开发的硬件工程师、协议板卡设计者及具备一定研发能力的技术团队&#xff0c;重点解决I/O协议芯片选型、外围电路设计与二次开发中的资料查阅问题。手册围绕A992D及F992D、M990D、A992A等兼容型号&am…

作者头像 李华
网站建设 2026/10/29 13:25:39

ET格式解析与xls/xlsb双格式转换的Python实现

1. 项目概述&#xff1a;为什么一个“文件格式转换小工具”值得花精力深挖&#xff1f;最近在某高校实验室参与一个跨平台数据协作项目&#xff0c;合作方提供的原始数据是ET格式——也就是金山WPS表格的专有二进制格式。我们团队主力用Excel做建模分析&#xff0c;但直接双击打…

作者头像 李华