繁体   English   中英

设置新单元格值时保留格式(Google 电子表格)

[英]Preserve Formatting When Setting New Cell Value (Google Spreadsheet)

我有以下脚本为选定的电子表格单元格设置新值。 它按预期工作,但每次输入后它都会清除单元格中的所有先前格式 如何修改代码以确保它保留所有部分格式,例如字体粗细/颜色? 感谢您的帮助。

function enterName1(options1, activity1, number1) {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var cell = sheet.getActiveCell();
  var value = cell.getValue();
  var formattedDate = Utilities.formatDate(new Date(), "GMT+3", "dd.MM.yy' at 'HH:mm");
  Logger.log(formattedDate);
  
  if (value === '') {
      value = value + "📞 " + formattedDate + " call " + options1 + number1 + ": " + activity1;
      sheet.getActiveRange().setNumberFormat('@STRING@');
      cell.setValue(value);
  } else {
      value = value + "\n\n" + "📞 " + formattedDate + " call " + options1 + number1 + ": " + activity1;
      sheet.getActiveRange().setNumberFormat('@STRING@');
      cell.setValue(value);
  }
}

我相信你的目标如下。

  • 问题1:当值添加到包含值的单元格时,您希望保留单元格中文本的现有文本样式。
  • 问题2:当值添加到包含值的单元格时,您希望保留单元格中文本的现有文本样式。 而且,您想为添加文本的formattedDate设置文本样式。 - 问题 3:当将值添加到包含值的单元格时,您希望保留单元格中文本的现有文本样式。 而且,您希望为添加文本的formattedDate设置文本样式。 而且,即使单元格为空,您也希望为添加文本的formattedDate设置文本样式。

回答问题 1:

改装要点:

  • 在这种情况下,需要检索现有值的文本样式,并在添加值后设置文本样式。 “RichTextValue”用于此目的。

当你的脚本被修改时,它变成如下。

修改后的脚本:

从:
 } else { value = value + "\\n\\n" + "📞 " + formattedDate + " call " + options1 + number1 + ": " + activity1; sheet.getActiveRange().setNumberFormat('@STRING@'); cell.setValue(value); }
到:
 } else { value = value + "\\n\\n" + "📞 " + formattedDate + " call " + options1 + number1 + ": " + activity1; var richTextValue = cell.getRichTextValue(); var existingStyles = richTextValue.getRuns().map(e => ({start: e.getStartIndex(), end: e.getEndIndex(), style: e.getTextStyle()})); var richTexts = SpreadsheetApp.newRichTextValue().setText(value); existingStyles.forEach(e => richTexts.setTextStyle(e.start, e.end, e.style)); cell.setRichTextValue(richTexts.build()); cell.setNumberFormat('@STRING@'); }
  • 在这个修改后的脚本中,设置了现有值的文本样式。 所以添加的文字没有文字样式。 请注意这一点。

回答问题 2:

改装要点:

  • 在这种情况下,需要检索现有值的文本样式并设置formattedDate的文本样式,然后在添加值后设置文本样式。 “RichTextValue”也用于此。

当你的脚本被修改时,它变成如下。

修改后的脚本:

从:
 } else { value = value + "\\n\\n" + "📞 " + formattedDate + " call " + options1 + number1 + ": " + activity1; sheet.getActiveRange().setNumberFormat('@STRING@'); cell.setValue(value); }
到:
var textStyle = SpreadsheetApp.newTextStyle().setBold(true).setForegroundColor("#FF0000").build();  // Please set this for the additional text.
if (value === '') {
  value = "📞 " + formattedDate + " call " + options1 + number1 + ": " + activity1;
  var richTexts = SpreadsheetApp
    .newRichTextValue()
    .setText("📞 " + formattedDate + " call " + options1 + number1 + ": " + activity1)
    .setTextStyle(("📞 ").length, ("📞 " + formattedDate).length, textStyle);
  cell.setRichTextValue(richTexts.build());
  cell.setNumberFormat('@STRING@');
} else {
  var richTextValue = cell.getRichTextValue();
  var existingStyles = richTextValue.getRuns().map(e => ({start: e.getStartIndex(), end: e.getEndIndex(), style: e.getTextStyle()}));
  var startOffset = (value + "\n\n" + "📞 ").length;
  existingStyles.push({start: startOffset, end: startOffset + formattedDate.length, style: textStyle});
  var richTexts = SpreadsheetApp.newRichTextValue().setText(value + "\n\n" + "到 " + formattedDate + " call " + options1 + number1 + ": " + activity1);
  existingStyles.forEach(e => richTexts.setTextStyle(e.start, e.end, e.style));
  cell.setRichTextValue(richTexts.build());
  cell.setNumberFormat('@STRING@');
}
  • 在这个修改后的脚本中,设置了现有值的文本样式和添加文本的formattedDate
  • 如上示例, formattedDate具有粗体和红色字体颜色。

回答问题 3:

改装要点:

  • 在这种情况下,需要检索现有值的文本样式并设置formattedDate的文本样式,然后在添加值后设置文本样式。 “RichTextValue”也用于此。 此外,当单元格为空时,需要为添加文本的formattedDate设置文本样式。

当你的脚本被修改时,它变成如下。

修改后的脚本:

从:
 if (value === '') { value = value + "📞 " + formattedDate + " call " + options1 + number1 + ": " + activity1; sheet.getActiveRange().setNumberFormat('@STRING@'); cell.setValue(value); } else { value = value + "\\n\\n" + "📞 " + formattedDate + " call " + options1 + number1 + ": " + activity1; sheet.getActiveRange().setNumberFormat('@STRING@'); cell.setValue(value); }
到:
 var textStyle = SpreadsheetApp.newTextStyle().setBold(true).setForegroundColor("#FF0000").build(); // Please set this for the additional text. if (value === '') { value = "📞 " + formattedDate + " call " + options1 + number1 + ": " + activity1; var richTexts = SpreadsheetApp .newRichTextValue() .setText("📞 " + formattedDate + " call " + options1 + number1 + ": " + activity1) .setTextStyle(("📞 ").length, ("📞 " + formattedDate).length, textStyle); cell.setRichTextValue(richTexts.build()); cell.setNumberFormat('@STRING@'); } else { var richTextValue = cell.getRichTextValue(); var existingStyles = richTextValue.getRuns().map(e => ({start: e.getStartIndex(), end: e.getEndIndex(), style: e.getTextStyle()})); var startOffset = (value + "\\n\\n" + "📞 ").length; existingStyles.push({start: startOffset, end: startOffset + formattedDate.length, style: textStyle}); var richTexts = SpreadsheetApp.newRichTextValue().setText(value + "\\n\\n" + "到 " + formattedDate + " call " + options1 + number1 + ": " + activity1); existingStyles.forEach(e => richTexts.setTextStyle(e.start, e.end, e.style)); cell.setRichTextValue(richTexts.build()); cell.setNumberFormat('@STRING@'); }

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM