[]
        
(Showing Draft Content)

AI.TRANSLATE

Users can use the AI.TRANSLATE function to translate given content into the target language.

Syntax

AI.TRANSLATE(array, language)

Arguments

This function has these arguments:

Argument

Description

array

[Required] The array or range to be translated.

language

[Required] The specified target language.

Remarks

When setting the language parameter, it is recommended to use standard locale codes (such as RFC 5646), or clear and understandable language names. This helps ensure system compatibility, data consistency, and accurate results in globalization scenarios.

Common language code samples:

  • en-US / English

  • zh-CN / Chinese / 中文

  • ja-JP / Japanese / 日本語

  • ko-KR / Korean / 한국어

  • fr-FR / French / Français

Examples

The following example shows how to invoke the OpenAI GPT-4.1 model and use the AI.TRANSLATE function for single sentence and batch text translation.

// To use this example, add the following dependency to your project: com.openai:openai-java:4.6.1
// Configure the model request handler and choose different large model providers as needed. Here the example uses OpenAI GPT-4.1; replace with your API key when using.
Workbook.setAIModelRequestHandler(new OpenAIModelRequestHandler("https://api.openai.com/v1", "sk-xxxx", "gpt-4.1"));
// DeepSeek model.
// Workbook.setAIModelRequestHandler(new OpenAIModelRequestHandler("https://api.deepseek.com/v1", "sk-xxxx", "deepseek-chat"));
// Qwen model.
// Workbook.setAIModelRequestHandler(new OpenAIModelRequestHandler("https://dashscope.aliyuncs.com/compatible-mode/v1", "sk-xxxx", "qwen-plus"));

// Initialize the workbook and set data.
Workbook workbook = new Workbook();
IWorksheet sheet = workbook.getWorksheets().get(0);
sheet.getColumns().get(0).setColumnWidth(40);
sheet.getColumns().get(1).setColumnWidth(20);
sheet.getColumns().get(2).setColumnWidth(45);

// ============ Example 1: Single Text Translation ============
sheet.getRange("A1:C1").merge();
sheet.getRange("A1").setValue("Example 1: Single Text Translation");
sheet.getRange("A1").getFont().setBold(true);
sheet.getRange("A1").getFont().setSize(14);
sheet.getRange("A1").getFont().setColor(Color.GetWhite());
sheet.getRange("A1").getInterior().setColor(Color.FromArgb(90, 126, 158));
sheet.getRange("A1").setHorizontalAlignment(HorizontalAlignment.Center);
sheet.getRange("A1").setVerticalAlignment(VerticalAlignment.Center);
sheet.getRange("A1").setRowHeight(30);
sheet.getRange("A3").setValue("Formula:");
sheet.getRange("A3").getFont().setBold(true);
sheet.getRange("A3").getFont().setSize(11);
sheet.getRange("A3").getInterior().setColor(Color.FromArgb(217, 225, 242));
sheet.getRange("B3:C3").merge();
sheet.getRange("B3").setValue("=AI.TRANSLATE(A6, B6)");
sheet.getRange("B3").getFont().setItalic(true);
sheet.getRange("B3").getFont().setColor(Color.FromArgb(68, 114, 196));
sheet.getRange("A5:C5").setValue(new Object[][] {
        { "Source Text (English)", "Target Lang", "AI Translation" }
});
sheet.getRange("A5:C5").getFont().setBold(true);
sheet.getRange("A5:C5").getInterior().setColor(Color.FromArgb(155, 194, 230));
sheet.getRange("A5:C5").setHorizontalAlignment(HorizontalAlignment.Center);
sheet.getRange("A6").setValue("Hello, how are you today?");
sheet.getRange("B6").setValue("ja-JP");
sheet.getRange("B6").getFont().setBold(true);
sheet.getRange("B6").setHorizontalAlignment(HorizontalAlignment.Center);

// Define AI translation formula to translate the text in A6 to the target language specified in B6.
sheet.getRange("C6").setFormula2("=AI.TRANSLATE(A6, B6)");
sheet.getRange("C6").getFont().setItalic(true);
sheet.getRange("C6").getFont().setSize(11);
sheet.getRange("A6:C6").getBorders().setLineStyle(BorderLineStyle.Thin);
sheet.getRange("A6:C6").getBorders().setColor(Color.FromArgb(200, 200, 200));

// ============ Example 2: Batch Translation ============
sheet.getRange("A9:C9").merge();
sheet.getRange("A9").setValue("Example 2: Batch Translation (English → Japanese)");
sheet.getRange("A9").getFont().setBold(true);
sheet.getRange("A9").getFont().setSize(14);
sheet.getRange("A9").getFont().setColor(Color.GetWhite());
sheet.getRange("A9").getInterior().setColor(Color.FromArgb(90, 126, 158));
sheet.getRange("A9").setHorizontalAlignment(HorizontalAlignment.Center);
sheet.getRange("A9").setVerticalAlignment(VerticalAlignment.Center);
sheet.getRange("A9").setRowHeight(30);
sheet.getRange("A11").setValue("Formula:");
sheet.getRange("A11").getFont().setBold(true);
sheet.getRange("A11").getFont().setSize(11);
sheet.getRange("A11").getInterior().setColor(Color.FromArgb(217, 225, 242));
sheet.getRange("B11:C11").merge();
sheet.getRange("B11").setValue("=AI.TRANSLATE(A14:A18, B14)");
sheet.getRange("B11").getFont().setItalic(true);
sheet.getRange("B11").getFont().setColor(Color.FromArgb(68, 114, 196));
sheet.getRange("A13:C13").setValue(new Object[][] {
        { "Source Text (English)", "Target Lang", "AI Translation (Japanese)" }
});
sheet.getRange("A13:C13").getFont().setBold(true);
sheet.getRange("A13:C13").getInterior().setColor(Color.FromArgb(155, 194, 230));
sheet.getRange("A13:C13").setHorizontalAlignment(HorizontalAlignment.Center);
sheet.getRange("A14:A18").setValue(new Object[][] {
        { "Good morning!" },
        { "Thank you very much." },
        { "How much does this cost?" },
        { "Where is the nearest restaurant?" },
        { "Have a nice day!" }
});
sheet.getRange("A14:C18").getBorders().setLineStyle(BorderLineStyle.Thin);
sheet.getRange("A14:C18").getBorders().setColor(Color.FromArgb(200, 200, 200));
sheet.getRange("B14").setValue("ja-JP");
sheet.getRange("B14:B18").merge();
sheet.getRange("B14").getFont().setBold(true);
sheet.getRange("B14").getFont().setSize(12);
sheet.getRange("B14").setHorizontalAlignment(HorizontalAlignment.Center);
sheet.getRange("B14").setVerticalAlignment(VerticalAlignment.Center);
sheet.getRange("B14:B18").getBorders().setLineStyle(BorderLineStyle.Thin);
sheet.getRange("B14:B18").getBorders().setColor(Color.FromArgb(200, 200, 200));

// Define AI translation formula to translate the text in A14:A18 into the target language specified in B14.
sheet.getRange("C14").setFormula2("=AI.TRANSLATE(A14:A18, B14)");
sheet.getRange("C14:C18").getFont().setItalic(true);
sheet.getRange("A1:C7").getBorders().get(BordersIndex.EdgeBottom).setLineStyle(BorderLineStyle.Double);
sheet.getRange("A1:C7").getBorders().get(BordersIndex.EdgeBottom).setColor(Color.FromArgb(142, 172, 219));

// The AI function works as an asynchronous calculation function; you need to wait for its calculation to complete.
workbook.calculate();
workbook.waitForCalculationToFinish();

// Set the page to print as a single page.
sheet.getPageSetup().setFitToPagesTall(1);
sheet.getPageSetup().setFitToPagesWide(1);
sheet.getPageSetup().setIsPercentScale(false);

// Save as PDF file.
workbook.save("AITranslate.pdf");
/**
 * Implementation of IAIModelRequestHandler for OpenAI API.
 */
public class OpenAIModelRequestHandler implements IAIModelRequestHandler {
    private String _apiEndpoint;
    private String _apiKey;
    private String _model;
    public OpenAIModelRequestHandler(String apiEndpoint, String apiKey, String model) {
        if (apiEndpoint == null || apiEndpoint.trim().isEmpty())
            throw new IllegalArgumentException("API endpoint cannot be null or empty.");
        if (apiKey == null || apiKey.trim().isEmpty())
            throw new IllegalArgumentException("API key cannot be null or empty.");
        _apiEndpoint = apiEndpoint.replaceAll("/$", "");
        _apiKey = apiKey;
        _model = model;
    }
    @Override
    public CompletableFuture<AIModelResponse> sendRequestAsync(AIModelRequest request) {
        CompletableFuture<AIModelResponse> result = new CompletableFuture<>();
        if (request == null) {
            AIModelResponse modelResponse = new AIModelResponse();
            modelResponse.setSuccess(false);
            System.err.println("Request cannot be null.");
            result.complete(modelResponse);
            return result;
        }
        OpenAIClientAsync openAIClient = OpenAIOkHttpClientAsync.builder()
                .apiKey(_apiKey)
                .baseUrl(_apiEndpoint)
                .build();
        ChatCompletionCreateParams.Builder builder = ChatCompletionCreateParams.builder();
        for (AIMessage item : request.getMessages()) {
            switch (item.getRole().toLowerCase()) {
                case "system":
                    builder.addSystemMessage(item.getContent());
                    break;
                case "user":
                    builder.addUserMessage(item.getContent());
                    break;
                default:
                    throw new RuntimeException("Unknown message role:" + item.getRole());
            }
        }
        builder.model(_model);
        ChatCompletionCreateParams params = builder.build();
        CompletableFuture<ChatCompletion> chatCompletion = openAIClient.chat().completions().create(params);
        chatCompletion.whenComplete((response, exception) -> {
            try {
                if (exception != null) {
                    AIModelResponse errorResponse = new AIModelResponse();
                    errorResponse.setSuccess(false);
                    System.err.println("An error occurred: " + exception.getMessage());
                    result.complete(errorResponse);
                } else {
                    if (response != null && !response.choices().isEmpty()) {
                        StringBuilder contentBuilder = new StringBuilder();
                        for (ChatCompletion.Choice choice : response.choices()) {
                            choice.message();
                            if (choice.message().content().isPresent()) {
                                contentBuilder.append(choice.message().content().get());
                            }
                        }
                        AIModelResponse successResponse = new AIModelResponse();
                        successResponse.setSuccess(true);
                        successResponse.setContent(contentBuilder.toString());
                        result.complete(successResponse);
                    } else {
                        AIModelResponse noContentResponse = new AIModelResponse();
                        noContentResponse.setSuccess(false);
                        System.err.println("No content received from the model.");
                        result.complete(noContentResponse);
                    }
                }
            } finally {
                try {
                    openAIClient.close();
                } catch (Exception e) {
                    System.err.println("Error closing OpenAI client: " + e.getMessage());
                }
            }
        });
        return result;
    }
}

The output is shown below:

image