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 };
创作者俱乐部成员