如何过滤Google Workspace Schema日志输出,提取指定字段?
改造后的Google Apps Script函数实现
核心功能说明
- 自动过滤
fieldId、kind、etag三个冗余字段 - 支持两种输出模式:
- 模式1:保留键值对结构(用于查看完整字段映射)
- 模式2:仅提取字段值并按指定表头排序(直接写入预定义表头的Google Sheet)
完整代码实现
function listSchema() { // 1. 获取域内所有Schema数据 const schemas = AdminDirectory.Schemas.list('my_customer').schemas; if (!schemas || schemas.length === 0) { Logger.log('未找到任何Schema数据'); return; } // 2. 定义需要排除的字段 const excludedFields = new Set(['fieldId', 'kind', 'etag']); // --- 模式1:过滤后保留键值对结构,输出到Logger --- const filteredSchemasWithKeys = schemas.map(schema => { const filtered = {}; Object.keys(schema).forEach(key => { if (!excludedFields.has(key)) { filtered[key] = schema[key]; } }); return filtered; }); Logger.log('过滤后的键值对Schema数据:', filteredSchemasWithKeys); // --- 模式2:仅提取字段值,按Sheet表头排序(用于写入Sheet)--- // 替换为你的Sheet ID和表头所在的工作表名称 const sheetId = '你的Sheet ID'; const sheetName = '表头所在工作表'; const sheet = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName); // 获取表头行(假设表头在第1行) const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]; // 提取值并按表头顺序排列 const schemaValues = schemas.map(schema => { return headers.map(header => { // 若表头字段存在则返回对应值,不存在返回空字符串 return schema[header] || ''; }); }); // 将数据写入Sheet(从第2行开始) if (schemaValues.length > 0) { sheet.getRange(2, 1, schemaValues.length, headers.length).setValues(schemaValues); Logger.log('数据已成功写入Sheet'); } }
关键细节解释
字段过滤逻辑:
- 使用
Set存储需要排除的字段,提升查找效率 - 遍历每个Schema对象的键,仅保留不在排除列表中的键值对
- 使用
表头匹配与值排序:
- 先读取Sheet的表头行,确保输出值的顺序与表头完全一致
- 遍历表头中的每个字段,从Schema对象中提取对应值,不存在则返回空字符串,避免写入报错
两种模式切换:
- 若只需查看过滤后的键值对,可注释掉模式2的代码
- 若只需写入Sheet,可注释掉模式1的
Logger.log部分
使用注意事项
- 确保已启用Admin Directory API(在Google Apps Script编辑器的「资源」→「高级Google服务」中开启)
- 替换代码中的
sheetId和sheetName为你的实际Sheet信息 - 表头字段名必须与Schema的键完全一致(区分大小写)
内容的提问来源于stack exchange,提问作者Nuno Miguel
相关产品推荐
相关产品推荐

