既然我们已经在本地部署了DeepSeek,肯定希望能够利用本地的模型对自己软件开发、办公文档进行优化使用,接下来就先在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档的教程奉上。
前提:
(1)已经部署好了DeepSeek,可以看我的文章:个人windows电脑上安装DeepSeek大模型(完整详细可用教程)_deepseek-r1-distill-qwen-1.5b-gguf-CSDN博客
(2)已经知道了设置好了DeepSeek的API,可以看我的文章:查看和使用本地Windows系统下通过Ollama部署的DeepSeek模型的API-CSDN博客
一、创建JavaScript宏调用API
1.说明
由于WPS的JavaScript宏环境(JSA)不支持现代浏览器中的fetch API,需用XMLHttpRequest实现网络请求。然而ActiveXObject("MSXML2.XMLHTTP")现代浏览器已经不支持了,这里也不采用。
2.WPS启用“开发工具”
(1)启用宏功能
打开WPS文字,点击左上角的“文件”选项。
在下拉菜单中选择“选项”。
在弹出的窗口中,点击“信任中心”。
选择“信任中心”选项卡,可以选择“启用所有第三方COM加载项”。
(2)启用开发工具
如果在WPS的“工具”菜单中没有“开发工具”,则可以按以下方式添加,依然在“文件”->“选项”中,在“自定义功能区”中,左侧选择“主选项卡”,找到“开发工具”,添加到右侧,之后就会在选项菜单中启用“开发工具”按钮。
(3)打开开发工具
(4)切换到JS环境
(5)打开WPS宏编辑器
WPS宏编辑器界面如下:
(6)在Project(Normal.dotm)上新建模块
在Project(Normal.dotm)上右键,选择“插入”->“模块”。会在“代码”下出现Module1。
将以下代码复制到Module1中。
javascript完整代码示例(保存为.js文件):
function OptimizeTextWithAPI() {
const WPS = Application;
const doc = WPS.ActiveDocument;
const originalText = doc.Content.Text;
const xhr = new XMLHttpRequest();
const url = "http://localhost:11434/api/generate";
try {
xhr.open("POST", url, false);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({
model: "my_model_name", // 替换为实际模型名(如 deepseek)
prompt: originalText,
stream: true // 保持流式传输
}));
if (xhr.status === 200) {
const responseLines = xhr.responseText.split('\n').filter(line => line.trim() !== '');
let fullText = '';
for (const line of responseLines) {
try {
const parsed = JSON.parse(line);
fullText += parsed.response || ''; // Ollama 返回的字段是 "response"
} catch (e) {
alert("解析失败的行:" + line);
}
}
doc.Content.Text = fullText;
alert("优化完成!");
} else {
alert("请求失败,状态码:" + xhr.status + "\n响应内容:" + xhr.responseText);
}
} catch (e) {
alert("发生错误:" + e.message + "\n响应内容:" + xhr.responseText);
}
}
也可以直接运行,当看到“运行成功”后,整个当前的WPS打开的文档会发生变化。
二、添加按钮到WPS功能菜单
方法1:通过自定义功能区(推荐)
(1)打开WPS开发者工具:
点击顶部菜单「文件」的「选项」选项卡,选择「自定义功能区」 → 「主选项卡」。
(2)创建新选项卡和组:
在右侧列表中选择要添加的位置(如「开始」选项卡)。点击「新建选项卡」并命名为 “DeepSeek”,再新建组并命名为“AI优化”。
(3)添加按钮:
接着继续在上一步基础上,点击 「从下列位置选择命令」下拉菜单 → 选择 「宏」 类别。找到并选中你保存的 OptimizeTextWithAPI 宏。设置按钮图标和名称(如✨AI优化)。
之后会在菜单上出现添加的按钮,名称同样可以重命名。
方法2:通过代码动态添加按钮
在宏中插入以下javascript代码(需管理员权限):
function AddButtonToMenu() {
const ui = Application.CommandBars.ActiveMenuBar;
const newButton = ui.Controls.Add(
1, // 类型:按钮
undefined,
undefined,
true
);
newButton.Caption = "AI优化";
newButton.OnAction = "OptimizeTextWithAPI"; // 绑定宏
newButton.FaceId = 59; // 图标ID(可自定义)
}
// 运行一次初始化按钮
AddButtonToMenu();
三、调试与优化
1.关键配置:
(1)启用宏安全性:进入 「文件」→「选项」→「信任中心」→「宏设置」。
(2)网络权限:确保WPS未被防火墙阻止访问本地localhost:11434(关闭防火墙或添加白名单)。
(3)错误处理增强:
javascript代码如下(改进前面的代码):
// 优化版:仅处理选中文本
function OptimizeSelection() {
const selection = Application.Selection;
if (selection.Text === "") {
Application.Alert("请先选择要优化的文本!");
return;
}
// ...调用API并替换选中部分
}
2.常见问题解决
问题现象 | 解决方案 |
宏无法运行 | 检查「开发工具」是否安装,确认文件后缀为.js并保存在WPS宏目录 |
API请求超时 | 在代码中增加超时设置:xhr.timeout = 10000;(10秒) |
按钮不显示 | 检查是否导出了功能区配置,或尝试重启WPS |
无法访问localhost:11434 | 确认DeepSeek API服务已启动,用浏览器测试http://localhost:11434/api/generate |
四、最终效果
用户将在WPS菜单栏看到自定义按钮:
点击后自动将文档内容或选中文本发送到本地API处理并替换。
五、扩展建议
(1)通过Promise封装异步请求(需WPS 2019+版本支持)
(2)添加进度条提示(使用Application.StatusBar)