我是Google Apps脚本的新手,已经被这个问题困扰了几天。在此先感谢那些正在寻求帮助的人。
我正在尝试从某个表单元格复制文本数据,将它们用换行符分隔,并将其放入变量中,然后在另一个表中使用它们。使用tablecell.getText()将会丢失所有格式,因此我想改用Paragraphs,但是使用表格单元格则无法使用getParagraphs()...
tableCellOut.appendParagraph(tableIn.getRow(1).getChild(1).asParagraph());
我不知道我离我的目标有多近。有没有一种方法可以编辑文本数据而不丢失格式?
我相信您的目标如下。
您希望使用Google Apps脚本实现表格单元格转换为问题中所显示的图像。(下图来自您的问题。)
为此,这个答案如何?我想提出以下示例脚本来解决您的问题。该脚本的流程如下。
Please copy and paste the following script to the container-bound script of the Google Document, and run the function of myFunction
at the script editor. In this script, row
and column
are the row and column numbers, respectively. So in your image, please set row = 2
and column = 2
. For example, when you want to split the cell "C3", please set row = 3
and 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);
});
}
}
When above script is run for your initial table, the following result can be obtained. In this demonstration, at first, the values of cell "B2" are expanded, and then, the values of cell "C3" are expanded.
BackgroundColor
并且ForegroundColor
用作文本样式。如果您想使用其他文本样式,请修改上面的脚本。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句