aluckdog
我相信你的目标如下。您希望使用 Google Apps 脚本将表格单元格转换为问题中显示的图像。(下图来自您的问题。)为此,这个答案怎么样?我想提出以下示例脚本来解决您的问题。该脚本的流程如下。检索表。检索表格的单元格“B2”。这是来自您的示例图像。创建一个包含文本和文本样式的对象。这用于将值拆分到单元格。文本和文本样式设置为单元格。当行数小于拆分值的行数时,将追加新行并将文本和文本样式设置为单元格。示例脚本:请将以下脚本复制并粘贴到 Google 文档的容器绑定脚本中,然后myFunction在脚本编辑器中运行 的功能。在这个脚本中,row和column分别是行号和列号。因此,在您的图像中,请设置row = 2和column = 2。例如,当您要拆分单元格“C3”时,请设置row = 3和column = 3。function myFunction() { // 1. Retrieve table. const body = DocumentApp.getActiveDocument().getBody(); const table = body.getTables()[0]; // 2. Retrieve the cell "B2" of the table. const row = 2; // Please set the row number. const column = 2; // Please set the column number. const cell = table.getCell(row - 1, column - 1); // 3. Create an object including the text and text styles. This is used for splitting values to the cells. const text = cell.editAsText(); let temp = []; const textRuns = [].reduce.call(text.getText(), (ar, c, i, a) => { if (c != "\n") temp.push({text: c, foregroundColor: text.getForegroundColor(i), backgroundColor: text.getBackgroundColor(i), textAlignment: text.getTextAlignment(i), italic: text.isItalic(i)}); if (c == "\n" || i == a.length - 1) { ar.push({text: temp.reduce((s, {text}) => s += text, ""), styles: temp}); temp = []; } return ar; }, []); // 4. The text and text styles are set to the cells. for (let i = row - 1; i < table.getNumRows(); i++) { const t = table.getCell(i, column - 1).editAsText(); const run = textRuns.shift(); t.setText(run.text); run.styles.forEach((r, j) => { t.setBackgroundColor(j, j, r.backgroundColor); t.setForegroundColor(j, j, r.foregroundColor); t.setItalic(j, j, r.italic); if (r.textAlignment) t.setTextAlignment(j, j, r.textAlignment); }); } // 5. When the number of rows are smaller than the number of rows of splitted values, the new rows are appended and the text and text styles are set to the cells. while (textRuns.length > 0) { const appendedRow = table.appendTableRow(); for (let i = 0; i < table.getRow(row - 1).getNumCells(); i++) { appendedRow.appendTableCell(""); } const t = appendedRow.getCell(column - 1).editAsText(); const run = textRuns.shift(); t.setText(run.text); run.styles.forEach((r, j) => { t.setBackgroundColor(j, j, r.backgroundColor); t.setForegroundColor(j, j, r.foregroundColor); t.setItalic(j, j, r.italic); if (r.textAlignment) t.setTextAlignment(j, j, r.textAlignment); }); }}结果:当为您的初始表运行上述脚本时,可以获得以下结果。在此演示中,首先展开单元格“B2”的值,然后展开单元格“C3”的值。https://i.stack.imgur.com/jEwWK.gif笔记:此示例脚本是为上述情况准备的。如果您对上述图像的规格进行了更改,则该脚本可能无法使用。所以请注意这一点。在此示例脚本中,BackgroundColor和ForegroundColor用作文本样式。当您想使用其他文本样式时,请修改上述脚本。