WPS加载项:遍历文件夹下docx问题(求大神解决)

这个是原来的WPS宏代码var files = Dir(templateFolderPath+ "/*.docx");可以成功。想要在WPS加载项实现

问题AI,提供代码如下,测试可以运行

const fs = require('fs');

const path = require('path');

/**

* 同步同步函数:同步 * 同步目录下所有的docx文件

* @param {string} dir - 要搜索的目录路径

* @returns {string[]} - 所有docx文件的完整路径数组

*/

function findDocxFilesSync(dir) {

const docxFiles = [];

// 同步读取目录内容,获取所有条目

const entries = fs.readdirSync(dir, { withFileTypes: true });

for (const entry of entries) {

const fullPath = path.join(dir, entry.name);

if (entry.isDirectory()) {

// 如果是目录,递归查找子目录

const subDirFiles = findDocxFilesSync(fullPath);

docxFiles.push(...subDirFiles);

} else if (entry.isFile() && entry.name.endsWith('.docx')) {

// 如果是文件且扩展名是.docx,添加到结果数组

docxFiles.push(fullPath);

}

}

return docxFiles;

}

为什么将代码移植到ribbon.js中会报错呢,提示Cannot access 'fs' before initialization”

移植后代码如下:

//这个函数在整个wps加载项中是第一个执行的

const { dir } = require('console');

const fs = require('fs');

const path = require('path');

function OnAddinLoad(ribbonUI){

if (typeof (window.Application.ribbonUI) != "object"){

window.Application.ribbonUI = ribbonUI

}

if (typeof (window.Application.Enum) != "object") { // 如果没有内置枚举值

window.Application.Enum = WPS_Enum

}

window.Application.PluginStorage.setItem("EnableFlag", false) //往PluginStorage中设置一个标记,用于控制两个按钮的置灰

window.Application.PluginStorage.setItem("ApiEventFlag", false) //往PluginStorage中设置一个标记,用于控制ApiEvent的按钮label

return true

}

var WebNotifycount = 0;

function OnAction(control) {

const eleId = control.Id

switch (eleId) {

case "btnShowMsg":

{

const doc = window.Application.ActiveWorkbook

if (!doc) {

alert("当前没有打开任何文档")

return

}

alert(doc.Name)

const targetDir = '/home/txxt/Desktop/123'; // 替换为你要搜索的目录

const docxFiles = findDocxFilesSync(targetDir);

……………………………………

……………………………………

function findDocxFilesSync(dir) {

const docxFiles = [];

try {

const entries = fs.readdirSync(dir, { withFileTypes: true });

for (const entry of entries) {

const fullPath = path.join(dir, entry.name);

if (entry.isDirectory()) {

const subDirFiles = findDocxFilesSync(fullPath);

docxFiles.push(...subDirFiles);

} else if (entry.isFile() && entry.name.endsWith('.docx')) {

docxFiles.push(fullPath);

}

}

} catch (error) {

console.error(`Error reading directory ${dir}:`, error.message);

throw error; // 重新抛出错误让调用者处理

}

return docxFiles;

}

// 在文件末尾添加

module.exports = { findDocxFilesSync };

河北省
浏览 61
收藏
1
分享
1 +1
3
+1
全部评论 3
 
恰同学少年
· 黑龙江省
回复
 
wils
wils

创作者俱乐部成员

fs是node提供的,浏览器环境没有 但加载项直接就可以用wps.FileSystem.readdirSync
· 海南省
回复
166
感谢大神
· 河北省
回复