如何翻译 Excel 电子表格而不破坏公式或下拉菜单
找出逐单元格翻译器在 .xlsx 文件中跳过的文本(公式文本、富文本、链接、图表、宏),修复它可能破坏的下拉菜单和代码,并用免费脚本和测试工作簿检查结果。

要翻译整个 Excel 工作簿,请将 .xlsx 文件上传到文档翻译器,而不是逐个单元格翻译。Excel 自带的“审阅”>“翻译”命令仅对您选中的文本生效(Microsoft 支持),这对于标签来说没问题,但对于价格列表来说很慢。文件翻译器会读取每个文本单元格,翻译它,然后将其写回同一地址,因此公式、数字和日期都保持在原来的位置。
它没有告诉您的是哪些文本它从未读取过。在公式内输入的文本、包含一个粗体单词的单元格、链接、备注、图表标题:在逐单元格翻译中,所有这些都可能以原始语言返回。而且有两件事可能会被破坏:允许值未被翻译的下拉菜单,以及被翻译了的产品代码。
我们构建了一个包含两个工作表的测试工作簿,在上述每个位置都放置了文本,编写了一个免费检查器来列出文本所在的位置,并通过本地复现 BookTranslator 使用的电子表格处理方式运行了该工作簿。本指南展示了返回的结果、上传前需要更改的内容以及如何检查翻译后的文件。
快速回答:工作簿中哪些内容会被翻译
| 文本所在位置 | 我们测试中的示例 | BookTranslator 会翻译吗? | 需要做什么 |
|---|---|---|---|
| 纯文本单元格,包括标题行 | “蓝色笔记本”、“价格” | 是 | 无需操作 |
| 数字、日期、布尔值 | 4.5, 2026-10-30 | 保持原样 | 检查目标市场的数字格式 |
| 公式 | =C2*D2 | 保持原样 | 无需操作 |
| 公式内的文本 | =IF(D2>5,"In stock","Low stock") | 否 | 将文字移到单元格中(参见步骤 2) |
| 混合格式的单元格 | “限量版钢笔” | 否,整个单元格会被跳过 | 先清除格式,或手动翻译 |
| 超链接单元格 | “产品页面” | 否 | 翻译后编辑链接文本 |
| 下拉单元格中的值 | “文具” | 是,但下拉列表不会 | 修复列表,否则单元格将无效 |
| 含字母的代码 | “A-77”、“B-09” | 发送给翻译器 | 翻译后检查它们 |
| 仅含数字或符号的代码 | "00123" | 保持原样 | 无 |
| 备注和评论 | “发布前检查供应商名称” | 否 | 手动翻译,或删除它们 |
| 工作表名称和命名区域 | “Products”、PriceRange | 否,这样跨工作表公式才能继续正常工作 | 仅在必要时手动重命名工作表,且需先检查公式 |
| 图表和宏 | 一个条形图、一个 VBA 项目 | 在我们的测试中已从翻译后的文件中移除 | 保留原始文件,之后重建(见下文) |
不接受较旧的 .xls 文件。请先在 Excel 中打开并另存为 .xlsx。接受启用宏的 .xlsm 文件,但上传前请阅读宏相关章节:翻译后的文件不包含宏,如果下载的文件仍以 .xlsm 结尾,请在打开前将其重命名为 .xlsx。
第 1 步:在工作簿上运行检查器
下载 check_xlsx_text.py 并在你的文件上运行:
python3 check_xlsx_text.py "Price list.xlsx"
它只需要 Python 3,读取文件时不会修改文件。以下是我们示例工作簿的摘要:
Counts by location:
cell code, ID or address 2
cell link text 1
cell mixed formatting 1
cell plain text 15
comments comment or note text 1
dropdown list of allowed values 1
formula text text inside a formula 6
sheet sheet name 2
workbook defined name 1
Plain text cells (translated by a cell-by-cell translator): 15
Items that need a decision before you upload: 12
在计数下方,它会列出每个项目及其工作表和单元格,例如 Products!E2 formula text 'In stock'。将此列表作为第 2 步的待办事项清单。如果你的工作簿包含图表、文本框、数据透视表或宏项目,它们也会出现在计数中。
README 描述了示例工作簿,列出了文件哈希,并链接了构建它的脚本,以便你可以重复测试。
我们的测试工作簿发生了什么
我们将示例工作簿通过 BookTranslator 的电子表格处理程序所使用的代码运行,于 2026-11-01 在本地使用相同的库(ExcelJS 4.4.0)复现。我们没有使用真正的翻译,而是使用了一个占位符,在每个单元格的文本前添加 "[DE]"。这样就将语言模型排除在测试之外,因此结果仅显示文件处理发送、保留和丢弃的内容。
处理程序逐个单元格读取每个工作表。仅当单元格包含纯文本值时,才会发送该单元格进行翻译,并跳过仅由数字、标点和符号组成的任何文本。单元格网格中的所有其他内容均原样复制。然后 BookTranslator 返回两个文件:一个翻译后的工作簿和一个双语工作簿。
翻译后的工作簿
这是要使用的文件。所有 6 个公式、7 个数字和日期、货币和日期格式、合并单元格、备注、下拉规则以及命名区域均原样返回。9 个标题单元格和其他纯文本单元格已就地翻译。有三个结果需要注意:
公式内的文本保持源语言。 Status 列使用了 =IF(D2>5,"In stock","Low stock")。公式不是文本单元格,因此处理程序从不读取它,"In stock" 在每一行中都保持英文。这同样适用于使用 & 或 CONCAT 连接的文本,以及 HYPERLINK 内的文本。
翻译后的下拉值不再与其列表匹配。 单元格 H2 有一个下拉列表,允许 "Stationery, Office, Art"。该单元格的值被翻译了,但列表存储在验证规则中,而不是单元格中,因此未被翻译。我们的检查器的比较模式报告如下:
Problems: 3
Products!A3: code changed: 'A-77' -> '[DE] A-77'
Products!A4: code changed: 'B-09' -> '[DE] B-09'
Products!H2: '[DE] Stationery' is not in its dropdown list ['Art', 'Office', 'Stationery']
Excel 会保留违反其验证规则的值,但下一个打开下拉列表的人只会看到旧选项,并且“数据 > 圈释无效数据”会标记该单元格。
包含字母的代码会被发送给翻译器。 "00123" 被跳过,因为它只包含数字。"A-77" 和 "B-09" 被发送,因为它们包含字母。代码是否原样返回取决于模型;文件处理中没有任何机制保护它。返回为 "A-77-Artikel" 的 SKU 会破坏所有使用它的查找。
双语工作簿
双语文件会在每个至少有一个翻译单元格的列右侧插入一个翻译列,标题如 "Name (Translated)"。它会将单元格值移动到新列,但不会移动单元格格式或更新公式。在我们的测试中:
- 价格格式
$#,##0.00保留在 C 列,该列现在包含产品名称,而价格移动到 E 列时没有该格式; - 日期格式留在了 G 列,而该列现在存放的是数量,因此数量 10 被显示成了日期;
=C2*D2移到了 K 列,但仍指向 C2 和 D2,而这两列现在存放的是产品名称及其译文,因此它无法再返回 45;- 在“摘要”工作表上,
=SUM(Products!F2:F4)现在汇总的是一个空的翻译列。
因此,双语工作簿用于并排阅读原文和译文,而非用于计算。请勿编辑它,也不要从中复制公式。
图表和宏
在工作簿的另一个副本中,我们添加了一个图表和一个宏项目,并按照 Excel 存储它们的方式进行了保存。翻译文件和双语文件中均不包含这两者。ExcelJS 可以读写工作表、样式、共享文本、图片、表格和批注,但没有用于图表部件或 VBA 项目的代码,因此保存时会将其遗漏。同样的代码也没有处理数据透视表的功能,所以预计数据透视表也会被丢弃,尽管我们并未对此进行测试。该处理程序还会将输出保存为 .xlsx 文件,而该格式无法包含宏。
测试还有一个限制:我们使用 ExcelJS 本身构建了示例工作簿,这是保留格式、合并单元格和验证规则最理想的情况。由 Excel 保存的工作簿可能包含 ExcelJS 无法建模的功能,因此请对你自己的文件运行下面的比较步骤,而不要假设会得到同样干净的结果。
第 2 步:上传前准备工作簿
在副本上操作。检查器会告诉你需要更改哪些单元格。
- 将公式文本移入单元格。 将文字放在一个小的“Labels”工作表中,并让公式指向它们:
=IF(D2>5,Labels!$A$1,Labels!$A$2)。标签单元格是纯文本,因此会被翻译,每个公式都会获取翻译。这一改动通常能解决大部分“公式文本”计数问题,因为同一短语往往会在整列中重复出现。 - 将下拉列表移入单元格。 在“数据”>“数据验证”中,将来源从键入的列表(
Stationery,Office,Art)更改为“Labels”工作表上的范围(=Labels!$B$1:$B$3)。然后,列表值会连同使用它们的单元格一起被翻译。之后检查几个单元格:只有当模型在两个地方对“Stationery”的翻译方式相同时,下拉列表才会接受翻译后的值。 - 清除混合格式。 一个单元格中如果有一个加粗或彩色的单词,会被存储为格式化文本段并完全跳过。选择该单元格,然后选择“开始”>“清除”>“清除格式”,或重新键入,然后在翻译后重新应用加粗。如果有很多这样的单元格,请先记录下来。
- 决定如何处理备注和批注。 它们不会被翻译。删除不想发送给翻译服务的审阅备注,其余的手动翻译。
- 将宏工作簿保存为
.xlsx。 保留你的.xlsm作为主文件。翻译.xlsx副本,然后将翻译后的文本列复制回主文件(选择性粘贴 > 值,仅文本列,以免覆盖公式),或者导出 VBA 模块并将其导入到翻译后的文件中。 - 将图表留到以后处理。 图表中的文本很少:一个标题、轴标题和一个通常来自标题单元格的图例。通常更快的方法是在翻译后的工作簿中从相同的范围重建图表,或者将翻译后的文本列粘贴回原始工作簿,以便其图表和数据透视表自行更新。
第 3 步:翻译整个文件
在文档翻译页面上传 .xlsx,选择目标语言,并在付款前查看显示的价格。整文件上传会在一个任务中翻译每个工作表上的每个文本单元格,这样可以更容易地确保产品名称在第 3 行和第 3000 行保持一致。我们的构建翻译术语表指南解释了如何确定不得变化的术语。
任务完成后,“历史记录”页面会提供两种下载。使用翻译后的工作簿。仅在与通晓两种语言的人一起审阅措辞时,才打开双语工作簿。
如果你使用 Google 表格,还有另外两种途径。Google 翻译的“文档”选项卡接受最大 10 MB 的 .xlsx 文件(Google 翻译帮助);我们的Google 文档翻译指南比较了其选项。此外,表格有一个 GOOGLETRANSLATE(text, source_language, target_language) 函数(Google 文档编辑器帮助),你可以在源旁边的新列中向下填充。这对于一列短标签来说很方便,但结果是公式,因此在共享表格之前请将它们粘贴为值。DeepL 也翻译文档;请参阅其文档限制在实践中意味着什么。无论你使用什么工具,请先对源文件运行检查器:无论哪个工具读取文件,公式内的文本、链接和图表都位于相同的位置。
第 4 步:检查翻译后的工作簿
-
运行比较模式。 将源文件和翻译后的文件并排放置:
python3 check_xlsx_text.py --compare "Price list.xlsx" "Price list (translated).xlsx"它会检查每个公式、数字和日期是否未更改,带字母的代码是否完全按原样返回,以及每个下拉值是否在其列表中。仅对翻译后的工作簿使用此功能。由于双语文件会移动列,几乎每个单元格都会被报告。
-
重新计算。 如果在修复标签后公式仍显示旧文本,请按 F9(或“公式”>“立即计算”)。
-
翻译剩余内容。 使用第 1 步中检查器的列表:链接文本、备注、图表标题以及你清除了格式的任何单元格。
-
留意被截断的文本。 译文通常比原文长,短字符串的增幅最大。W3C 引用 IBM 的指南指出,对于不超过 10 个字符的文本,从英语翻译成欧洲语言的平均扩展率为 200–300%(W3C)。列标题通常很短,因此如果被截断,请加宽列或开启“自动换行”。
-
检查数字和日期的显示方式。 数值本身没有改动,但“4.50”对德语读者来说可能需要显示为“4,50”。这属于单元格格式或区域设置问题,而非翻译问题。
-
不要“修正”函数名。 如果同事的法语版 Excel 显示
SOMME而不是SUM,那只是 Excel 在显示其本地化的函数名;公式本身是一样的。 -
设置从右到左的工作表。 对于阿拉伯语、希伯来语、波斯语或乌尔都语,请开启“页面布局”>“工作表从右到左”,并检查单元格对齐方式。
-
如果译文要面向客户(例如价目表或产品目录),请让一位流利的读者审阅。 机器翻译是很好的初稿,但不是终稿。
CSV 和 TSV 文件
.csv 文件没有公式、格式或下拉列表,因此上述大部分问题都不会出现。有三点不同:
- 表头行不会被翻译。 处理程序将第一行视为表头,只翻译数据行。请手动翻译表头,或在上传前将其复制到数据行中,之后再移回。
- 整列会被一起翻译。 如果某列中任一单元格包含字母,则该列中所有包含字母的单元格都会被发送,包括代码。比较模式仅读取
.xlsx,因此请手动检查 CSV 的代码列:将两个文件中的该列复制到同一工作表,并用=EXACT(A2,B2)比较两列。 - CSV 返回时以逗号分隔。 无论源文件使用何种分隔符,翻译后的 CSV 都使用逗号;
.tsv文件则保留制表符。在我们的测试中,一个以分号分隔的 CSV 返回时以逗号分隔,像“4,50”这样的小数逗号被保留在引号内。文件为不带字节顺序标记的 UTF-8 编码。微软表示,带有该标记的 UTF-8 CSV 文件 Excel 可以正常打开,否则建议通过“数据”>“获取数据”>“从文本/CSV”导入(Microsoft 支持)。如果双击文件后看到乱码重音字符,请改用该方式导入。
如果数据位于包含公式的工作簿中,请翻译 .xlsx 文件。导出为 CSV 再翻译会丢失所有公式。
常见问题
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 整列仍然显示“In stock” | 文字位于 IF 公式内部 | 将其移到标签单元格,并让公式引用这些单元格 |
| 下拉列表拒绝翻译后的值 | 允许的值直接输入在验证规则中 | 将规则的“来源”改为单元格区域,并翻译该区域 |
| 产品代码被更改 | 它包含字母,因此被发送给翻译器 | 从源文件修复;每次交付时运行比较模式 |
| 有一个单元格完全没有被翻译 | 它包含混合格式,或者是一个链接 | 清除格式或编辑链接文本,然后重新翻译或手动修正 |
| 图表或宏丢失了 | 用于重写文件的库不会保存它们 | 翻译 .xlsx 副本,然后将翻译后的文本移回原始文件 |
| 双语文件中的总计不正确 | 它添加的列会移动值,但不会移动公式或格式 | 使用翻译后的工作簿进行任何计算 |
| 翻译后的 CSV 中重音字符显示乱码 | Excel 猜错了编码 | 通过“数据”>“获取数据”>“从文本/CSV”导入 |
| 上传被拒绝 | 文件是 .xls 格式,或者需要密码才能打开 | 将其保存为普通的 .xlsx 文件,且不设置打开密码(仅工作表保护是可以的) |
同样的思路也适用于幻灯片:PowerPoint 演示文稿也会将文本保留在翻译器跳过的地方,那篇文章的检查器与本文的工作方式相同。





