PBCS Oracle中Groovy脚本导出CSV前新增列提取rowmbr1文本
解决方案:导出CSV前新增提取rowmbr1前缀的列
问题说明
需要在导出CSV前新增一列,提取rowmbr1字段的前缀文本(例如将“Sales staff”转为“Sales”,“Marketing staff”转为“Marketing”),并将该列置于rowmbr1列旁。
修改后的完整Groovy脚本
def povDims = [ Povdim1, povdim2] def povMbrs = [['Povmbr1'], ['povmbr2']] def colDims = ['coldim'] def colMbrs = [ ['coldim1','coldim2'] ] // 补全缺失的闭合括号,修正语法错误 def rowDims = ['rowdim'] def rowMbrs = [ ['rowmbr1']] Cube cube = operation.application.getCube("Plan") DataGridDefinitionBuilder builder = cube.dataGridDefinitionBuilder() builder.setSuppressMissingBlocks(true) builder.setSuppressMissingRows(true) builder.addPov(povDims, povMbrs) builder.addColumn(colDims, colMbrs) builder.addRow(rowDims, rowMbrs) DataGridDefinition gridDefinition = builder.build() cube.loadGrid(gridDefinition, false).withCloseable { grid -> // 定位rowmbr1列的索引位置 def rowmbr1ColIndex = grid.columns.findIndexOf { it.name == 'rowmbr1' } // 在rowmbr1列右侧插入新列,自定义列名和显示标签 grid.columns.add(rowmbr1ColIndex + 1, new DataGridColumn(name: "Department", label: "Department")) // 遍历所有行,提取rowmbr1前缀并填充新列 grid.rows.each { row -> def rowmbr1Text = row.cells[rowmbr1ColIndex].value?.toString() if (rowmbr1Text) { // 按空格分割取第一个单词,适配"Xxx staff"格式 def departmentPrefix = rowmbr1Text.split(' ')[0] row.cells.add(rowmbr1ColIndex + 1, new DataGridCell(value: departmentPrefix)) } else { // 处理空值场景,填充空字符串 row.cells.add(rowmbr1ColIndex + 1, new DataGridCell(value: "")) } } operation.exportDataToFile(grid, 'fullGridExport.csv') }
关键修改说明
- 语法修正:原脚本中
colMbrs定义缺少闭合括号,补全后避免运行时抛出语法错误 - 列位置定位:通过
findIndexOf精准定位rowmbr1列的位置,确保新列插入到目标列旁 - 新增列定义:使用
DataGridColumn创建自定义列,可按需修改列名(name)和显示标签(label) - 数据提取逻辑:通过
split(' ')[0]提取rowmbr1文本的第一个单词,适配需求中的格式;同时处理空值场景,保证导出数据的完整性
内容的提问来源于stack exchange,提问作者Naveen Konduri
相关产品推荐
相关产品推荐

