头图

背景

随着工作和学习的全球化,跨语言的沟通变得尤为重要。对于使用电子表格进行数据处理和分析的用户来说,表格中的内容可能涉及不同的语言。尤其是在处理多语言数据时,翻译表格内容成为了一个高频的需求。

传统的翻译方法可能需要手动复制粘贴,或者依赖外部工具,这样的方式既繁琐又浪费时间。为了解决这个问题,我们开发了一个基于AI的自动翻译工具——AI Cell Translator,它能在 Univer Sheets 中自动翻译选定的单元格内容,支持批量翻译(最多100个单元格)并支持英语和中文的相互翻译。

方案

AI Cell Translator脚本通过集成AI技术,利用GLM-4 API来实现快速且高效的翻译功能。该脚本可以嵌入到 Univer Go 中,用户只需要选择一个或多个单元格,然后点击工具栏或右键菜单中的翻译选项,脚本就会自动完成翻译操作。翻译结果将会被填充回原始单元格,极大提高了数据处理效率。

Univer Go 是一款功能强大的脚本编写与执行工具,适用于跨平台环境,帮助开发者创建和运行自动化脚本、数据库连接、以及自定义应用。通过简洁的界面和高效的操作流程,Univer Go 提供了易于使用的编程环境,适合无论是初学者还是专业开发者使用。

主要功能:

  • 支持直接翻译选中的单元格内容。
  • 支持批量翻译(最多100个单元格)。
  • 提供英文和中文两种语言的翻译选择。
  • 通过工具栏和右键菜单便捷访问。

使用步骤:

  1. 选择一个或多个包含文本的单元格。
  2. 在工具栏或右键菜单中选择翻译选项(“Translate to English”或“Translate to 中文”)。

通过该方案,用户不再需要手动进行翻译工作,节省了大量时间和精力。

实现

下面是AI Cell Translator脚本的详细实现,包括关键方法的解析:

脚本主要部分解读

1. API 配置

const AI_ENDPOINT = "https://open.bigmodel.cn/api/paas/v4";
const AI_KEY = "[YOUR_API_KEY]";
  • AI_ENDPOINT:该变量定义了AI翻译API的端点地址。
  • AI_KEY:存储了用于访问API的密钥。注意:此密钥是演示用的API密钥,建议用户注册并替换为自己的API密钥。

2. onOpen 函数

function onOpen() {
    univerAPI.createMenu({
        id: 'translate-to-en',
        title: 'Translate to English',
        action: () => translateSelectedCells("English"),
    }).appendTo('ribbon.start.others');

    univerAPI.createMenu({
        id: 'translate-to-cn',
        title: 'Translate to 中文',
        action: () => translateSelectedCells("中文"),
    }).appendTo('ribbon.start.others');
}
  • 该函数在Univer Sheets打开时自动运行,创建了两个菜单项,分别是“Translate to English”和“Translate to 中文”。
  • 用户可以通过工具栏轻松访问翻译功能。

3. translate 函数

async function translate(text, target = "中文") {
    const prompt = `
    # You are a translation expert. 
    ## Rules
    Please return the translation result only, without any other text.
    ## Job
    Please translate the following text into ${target} language:
    ${text}
    `;
    const response = await fetch(AI_ENDPOINT + '/chat/completions', {
        method: 'POST',
        headers: {
            'Authorization': 'Bearer ' + AI_KEY,
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            model: 'glm-4-flash',
            messages: [
                {
                    role: 'user',
                    content: prompt
                }
            ]
        })
    }).then(response => response.json())

    return response.choices[0].message.content;
}
  • translate函数是核心翻译函数,接收文本和目标语言(默认为中文)作为输入。
  • 使用GLM-4 API对选定文本进行翻译,并返回翻译结果。

4. translateSelectedCells 函数

async function translateSelectedCells(target = "中文") {
    if (isTranslating) {
        showMessage({ content: 'A translation task is already running. Please wait.' });
        return;
    }

    const workbook = univerAPI.getActiveWorkbook();
    const sheet = workbook.getActiveSheet();
    const activeRange = workbook.getActiveRange();
    const cells = activeRange.getValues();

    if (!cells.length) {
        showMessage({ content: 'Please select a range' });
        return;
    }

    const totalCells = cells.reduce((count, row) =>
        count + row.filter(cell => cell).length, 0);

    if (totalCells > 100) {
        showMessage({
            content: 'Too many cells selected (max: 100). Please select fewer cells.'
        });
        return;
    }

    try {
        isTranslating = true;
        const offsetX = activeRange.getRange().startColumn;
        const offsetY = activeRange.getRange().startRow;

        for (let i = 0; i < cells.length; i++) {
            const rows = cells[i];
            for (let j = 0; j < rows.length; j++) {
                const cell = rows[j];
                if (!cell) continue;
                const result = await translate(cell, target);
                sheet.getRange(offsetY + i, offsetX + j).setValue(result);
            }
        }

        setTimeout(() => showMessage({ content: 'Translation completed successfully' }), 100);
    } catch (error) {
        showMessage({ content: `Translation failed: ${error.message}` });
    } finally {
        isTranslating = false;
    }
}
  • translateSelectedCells函数是主函数,处理翻译逻辑。首先检查是否有翻译任务在运行,然后获取选中的单元格内容。
  • 如果选中单元格超过100个,函数会提示用户减少选择的单元格数量。
  • 然后,逐个翻译选中的单元格内容,并将翻译结果填充回原单元格。

总结

通过AI Cell Translator脚本,用户可以高效地翻译 Univer Sheets 中的内容,极大提高了跨语言工作中的效率。通过简单的UI接口,用户无需离开表格界面就能完成翻译任务,减少了重复性的工作。

在生产环境中,建议用户替换API密钥并使用商业级翻译服务,以确保翻译的稳定性和准确性。如果你也需要在Univer Sheets中使用翻译功能,不妨试试这个强大的AI翻译工具!


梦数技术团队
1 声望6 粉丝

上海梦数科技有限公司(简称:梦数科技)成立于2019年,是一家具有国际化视野的高科技公司,专注于提供先进的数字化解决方案,以“串联数据,加速工作流,让业务更高效”为使命,通过全面的软件开发工具,致力于帮...