[]
用户可以使用AI.TRANSLATE函数将给定内容翻译成目标语言。
AI.TRANSLATE(array, language)
该函数包含以下参数:
参数 | 描述 |
|---|---|
array | [必需] 要翻译的数组或区域。 |
language | [必需] 指定的目标语言。 |
设置language参数时,建议使用标准区域设置代码(如RFC 5646),或清晰易懂的语言名称。这有助于确保在全球化场景下系统的兼容性、数据一致性以及结果的准确性。
常见语言代码示例:
en-US / 英语
zh-CN / 中文
ja-JP / 日语
ko-KR / 韩语
fr-FR / 法语
以下示例展示如何调用OpenAI GPT - 4.1模型,并使用AI.TRANSLATE函数进行单句和批量文本翻译。
// 要使用此示例,请将以下依赖项添加到项目中:com.openai:openai-java:4.6.1
// 配置模型请求处理程序,并根据需要选择不同的大模型提供商。此处示例使用OpenAI GPT - 4.1;使用时请替换为您的API密钥。
Workbook.setAIModelRequestHandler(new OpenAIModelRequestHandler("https://api.openai.com/v1", "sk-xxxx", "gpt-4.1"));
// DeepSeek模型。
// Workbook.setAIModelRequestHandler(new OpenAIModelRequestHandler("https://api.deepseek.com/v1", "sk-xxxx", "deepseek-chat"));
// 通义千问模型。
// Workbook.setAIModelRequestHandler(new OpenAIModelRequestHandler("https://dashscope.aliyuncs.com/compatible-mode/v1", "sk-xxxx", "qwen-plus"));
// 初始化工作簿并设置数据。
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);
// ============ 示例1:单文本翻译 ============
sheet.getRange("A1:C1").合并();
sheet.getRange("A1").setValue("示例1:单文本翻译");
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("公式:");
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").合并();
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[][] {
{ "源文本(英文)", "目标语言", "AI翻译" }
});
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);
// 定义AI翻译公式,将A6中的文本翻译成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));
// ============ 示例2:批量翻译 ============
sheet.getRange("A9:C9").合并();
sheet.getRange("A9").setValue("示例2:批量翻译(英文→日文)");
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("公式:");
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").合并();
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[][] {
{ "源文本(英文)", "目标语言", "AI翻译(日文)" }
});
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").合并();
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));
// 定义AI翻译公式,将A14:A18中的文本翻译成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));
// AI函数作为异步计算函数;您需要等待其计算完成。
workbook.calculate();
workbook.waitForCalculationToFinish();
// 将页面设置为打印单页。
sheet.getPageSetup().setFitToPagesTall(1);
sheet.getPageSetup().setFitToPagesWide(1);
sheet.getPageSetup().setIsPercentScale(false);
// 另存为PDF文件。
workbook.save("AITranslate.pdf");/**
* 针对OpenAI API的IAIModelRequestHandler实现。
*/
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端点不能为空。");
if (apiKey == null || apiKey.trim().isEmpty())
throw new IllegalArgumentException("API密钥不能为空。");
_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("请求不能为空。");
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("未知的消息角色: " + 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("发生错误: " + 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("未从模型收到内容。");
result.complete(noContentResponse);
}
}
} finally {
try {
openAIClient.close();
} catch (Exception e) {
System.err.println("关闭OpenAI客户端时出错: " + e.getMessage());
}
}
});
return result;
}
}输出如下所示:
