Google Sheets脚本绘制员工与团队通话数据对比图表问题求助
Google Sheets脚本绘制员工与团队通话数据对比图表问题求助
你好!看起来你用Google Apps Script生成的员工和团队通话数据对比图表没达到预期效果,我来帮你梳理下问题并给出调整方案~
首先先分析下你当前代码的问题:
- 你每次循环都把图表固定放在
(2,5)的位置,这样所有生成的图表都会重叠在一起,最后只能看到最后一个,这肯定不是你想要的 - 图表默认的数据源解析逻辑可能没匹配你的需求:你选了员工行和总计行的A-D列,默认会把每行当作一个系列,每列当作数据点,但你需要的是把「Received Calls/Picked Up/Lost Calls」作为对比类别,每个类别下展示员工和团队总计的数值
下面是调整后的代码,我加了详细的注释,你可以直接替换测试:
function createEmployeeVsTeamCharts() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("test"); var lastRow = sheet.getLastRow(); // 自动获取表格最后一行(也就是团队总计行) // 遍历每个员工行(假设第1行是表头,从第2行开始到总计行的前一行) for (var nbreEmp = 2; nbreEmp < lastRow; nbreEmp++) { // 跳过空行(B列无数据的行) if (!sheet.getRange("B" + nbreEmp).isBlank()) { var employeeName = sheet.getRange("A" + nbreEmp).getValue(); var chart = sheet.newChart() .setChartType(Charts.ChartType.BAR) // 添加员工个人数据行和团队总计行的范围 .addRange(sheet.getRange(nbreEmp, 1, 1, 4)) // 等价于A[nbreEmp]:D[nbreEmp] .addRange(sheet.getRange(lastRow, 1, 1, 4)) // 等价于A[lastRow]:D[lastRow] // 核心配置:让图表按列解析数据,把通话类型作为类别,员工/总计作为对比系列 .setOption('series', { 0: { labelInLegend: employeeName }, // 图例显示当前员工姓名 1: { labelInLegend: "团队总计" } // 图例显示团队总计 }) .setOption('hAxis', { title: '通话数量' }) // 设置横轴标题 .setOption('vAxis', { title: '通话类型' }) // 设置纵轴标题 .setOption('title', `${employeeName} 与团队总计通话数据对比`) // 动态生成图表标题 .setPosition(nbreEmp, 5, 0, 0) // 把图表放在当前员工行的E列,避免重叠 .build(); sheet.insertChart(chart); } } }
几个关键的调整点说明:
- 图表位置优化:把原来固定的
(2,5)改成(nbreEmp,5),这样每个员工的图表会对应自己行的E列,不会互相覆盖 - 系列标签配置:手动指定两个系列的名称,这样图例里会清晰显示员工姓名和“团队总计”,不会出现默认的模糊标签
- 坐标轴与标题优化:添加了坐标轴标题和动态的图表标题,让图表可读性更强
- 数据范围写法优化:用
getRange(row, column, numRows, numColumns)的写法比字符串拼接更可靠,不容易出错
如果测试后还是有问题,可以试试这个小技巧:先手动在表格里创建一个符合你预期的对比图表,然后用Google Sheets的「工具>脚本编辑器>录制」功能,录制创建这个图表的过程,生成代码后和上面的代码对比,就能快速找到差异啦~
备注:内容来源于stack exchange,提问作者Sinsin
相关产品推荐
相关产品推荐

