Google Sheets API无法应用textRotation?格式顺序引发冲突问题
问题描述
我用Python写生成电子表格的脚本时碰到个麻烦:
- 先给顶部行设置45度文本旋转,再给整个表格加居中对齐、边框等格式,结果文本旋转没生效;
- 调换顺序后,旋转生效了,但边框、对齐这些格式全丢了。
代码片段
// 设置顶部行文本旋转 'repeatCell': { 'cell': { 'userEnteredFormat': { 'textRotation': { 'angle': 45 } } }, 'fields': '*', 'range': { 'sheetId': index, 'startRowIndex': 0, 'endRowIndex': 1, 'startColumnIndex': 3, // Duration 'endColumnIndex': 24 // Hours } }, { // 设置表格整体格式 'repeatCell': { 'cell': { 'userEnteredFormat': { 'horizontalAlignment': 'CENTER', 'verticalAlignment': 'MIDDLE', 'wrapStrategy': 'WRAP', 'textFormat': { 'fontFamily': 'arial', 'fontSize': 10, 'bold': True }, 'borders': { 'top': { 'style': 'SOLID' }, 'bottom': { 'style': 'SOLID' }, 'left': { 'style': 'SOLID' }, 'right': { 'style': 'SOLID' } } } }, 'fields': '*', 'range': { 'sheetId': index } }
原因分析
核心问题出在fields参数设成了*,再加上两个操作的范围有重叠:
- 先设置旋转再设整体格式时,第二个操作的
fields: '*'会完全覆盖重叠区域(顶部行)的所有格式,把之前设置的旋转直接冲没了; - 反过来先设整体格式再设旋转,旋转操作的
fields: '*'会覆盖顶部行的全部格式,把边框、对齐这些属性删掉。
fields: '*'代表替换单元格的所有格式属性,不是增量修改。只要两个操作的范围有重叠,后执行的就会把前面对重叠区域的设置全覆盖。
解决方案
把两个操作的fields参数改成只指定需要修改的属性,不要用*:
- 顶部行旋转操作的
fields只保留文本旋转相关的属性; - 整体格式操作的
fields只列出要修改的对齐、边框、字体等属性。
修改后的代码片段:
// 设置顶部行文本旋转 'repeatCell': { 'cell': { 'userEnteredFormat': { 'textRotation': { 'angle': 45 } } }, 'fields': 'userEnteredFormat.textRotation', // 仅修改旋转属性 'range': { 'sheetId': index, 'startRowIndex': 0, 'endRowIndex': 1, 'startColumnIndex': 3, 'endColumnIndex': 24 } }, { // 设置表格整体格式 'repeatCell': { 'cell': { 'userEnteredFormat': { 'horizontalAlignment': 'CENTER', 'verticalAlignment': 'MIDDLE', 'wrapStrategy': 'WRAP', 'textFormat': { 'fontFamily': 'arial', 'fontSize': 10, 'bold': True }, 'borders': { 'top': { 'style': 'SOLID' }, 'bottom': { 'style': 'SOLID' }, 'left': { 'style': 'SOLID' }, 'right': { 'style': 'SOLID' } } } }, 'fields': 'userEnteredFormat.horizontalAlignment,userEnteredFormat.verticalAlignment,userEnteredFormat.wrapStrategy,userEnteredFormat.textFormat,userEnteredFormat.borders', // 仅指定需要修改的格式项 'range': { 'sheetId': index } }
简单说,Google Sheets API的repeatCell操作里,fields决定了哪些属性会被更新。精确指定字段才能实现增量修改,不会把之前的设置覆盖掉。
内容的提问来源于stack exchange,提问作者Ivan Lebedev
相关产品推荐
相关产品推荐

