一个专门用于兼容多维表和智能表的工厂方法,可复用、可扩展!!
/**
* 名称: 用工厂方法模拟兼容多维表和智能表的类(因脚本不支持类)
* 描述: 根据文件类型对数据表的操作进行统一规范
* 作者: CodeSkywalker
* 开发日期: 2024.06.13
* @param {string} jsonObj - {sheetname:'表名'}或{sheetid: 表id},两个都有默认用sheetname
* @return {Object} - 超级表实例
*/
function createSuperApp(jsonObj) {
// 首先检查传入参数
if (typeof jsonObj === 'object' && jsonObj !== null) {
if (!(jsonObj.hasOwnProperty('sheetname') || jsonObj.hasOwnProperty('sheetid'))) {
throw new Error("参数错误,必须给定表名或表id,格式为{sheetname:'表名'}或{sheetid: 表id}。");
}
} else {
throw new Error("参数错误,必须给定表名或表id,格式为{sheetname:'表名'}或{sheetid: 表id}。");
}
const sheetKey = jsonObj.hasOwnProperty('sheetname') ? 'sheetname' : 'sheetid';
console.log(`提取参数:${sheetKey} = ${jsonObj[sheetKey]}`);
let superapp = {};
// 根据 doctype 初始化 app 对象
superapp.doctype = Application.FileInfo.officeType;
if (sheetKey === "sheetname") {
superapp.name = jsonObj[sheetKey]
superapp.app = superapp.doctype === "k" ? Application.Sheets(jsonObj[sheetKey]) : Application;
superapp.sheetobj = superapp.doctype === "k" ?
Application.Sheets(jsonObj[sheetKey]) :
Array.from(Application.Sheet.GetSheets()).find(sheet => sheet.name === jsonObj[sheetKey]);
if (superapp.sheetobj === null || superapp.sheetobj === undefined) {
throw new Error(`错误的表名: 未找到"${jsonObj[sheetKey]}"。`);
}
superapp.id = superapp.doctype === "k" ? superapp.sheetobj.Id : superapp.sheetobj.id;
}
else {
superapp.id = jsonObj[sheetKey];
superapp.sheetobj = superapp.doctype === "k" ?
Array.from(Application.Sheets).find(sheet => sheet.Id === jsonObj[sheetKey]) :
Array.from(Application.Sheet.GetSheets()).find(sheet => sheet.id === jsonObj[sheetKey]);
if (superapp.sheetobj === null || superapp.sheetobj === undefined) {
throw new Error(`错误的表名: 未找到"${jsonObj[sheetKey]}"。`);
}
superapp.name = superapp.doctype === "k" ? superapp.sheetobj.Name : superapp.sheetobj.name;
superapp.app = superapp.doctype === "k" ? Application.Sheets(superapp.name) : Application;
}
// 定义 GetRecords 方法
superapp.GetRecords = function (jsonObj) {
console.log(jsonObj)
if (jsonObj === null || jsonObj === undefined) {
return this.app.Record.GetRecords({ "SheetId": this.id });
}
else if (typeof jsonObj === 'object') {
jsonObj["SheetId"] = this.id;
console.log("superapp.GetRecords传入参数:", jsonObj)
return this.app.Record.GetRecords(jsonObj);
}
else {
throw new Error('错误参数: 必须是一个json对象或者空值。');
}
};
//定义 GetRecord 方法
superapp.GetRecord = function (jsonObj) {
console.log(typeof jsonObj)
if (typeof jsonObj === 'object') {
jsonObj["SheetId"] = this.id;
console.log("superapp.GetRecord传入参数:", jsonObj)
return this.app.Record.GetRecord(jsonObj);
}
else {
throw new Error('错误参数: 必须是一个json对象。');
}
};
//定义 CreateRecords 方法
superapp.CreateRecords = function (jsonObj) {
console.log(typeof jsonObj)
if (typeof jsonObj === 'object') {
jsonObj["SheetId"] = this.id;
console.log("superapp.CreateRecords传入参数:", jsonObj)
return this.app.Record.CreateRecords(jsonObj);
}
else {
throw new Error('错误参数: 必须是一个json对象。');
}
};
// 返回初始化后的 app 对象
return superapp;
}
创作者俱乐部成员