如何在toast()中显示换行符/ CR?

LMS*_*LMS 3 google-sheets google-apps-script

我试图在toast()消息中包含换行符,但这似乎不起作用:

 SpreadsheetApp.getActiveSpreadsheet().toast("Actions effectués: " + chargement + "\n Durée moyenne:\n - 10 + 32 par groupes simples \n - 42 + (64/groupes) pour les groupes composés.", "Chargement en cours:\n", 2);
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,或另类?(因为我怀疑这是可能的,这不像我的代码很难理解,所以我可能犯了一个错误.)

Mog*_*dad 5

使用msgBox()inputBox(),您可以通过转义斜杠来发布多行消息\n:

Browser.msgBox("line 1\\nline 2\\nline 3");
Run Code Online (Sandbox Code Playgroud)

toast()不幸的是,同样的伎俩不起作用.

另一个老技巧是使用空格或不间断空格填充消息行,以强制将文本拖到下一行.这很有效,但很麻烦.

所以这里有一个实用程序,没有麻烦!(这个要点的一部分.)你不想这样做吗?

function testToaster() {
  var myToast = new Toaster( "Actions effectués: " + chargement + "\n Durée moyenne:\n - 10 + 32 par groupes simples \n - 42 + (64/groupes) pour les groupes composés.", "Chargement en cours:\n", 2);
  myToast.display();
}
Run Code Online (Sandbox Code Playgroud)

如果您知道每个字符的确切宽度加上任何内部填充,以及显示区域的确切宽度,您可以完美地填充每个字符串.这个实用程序不是那么精确,但它非常接近.

/**
 * "Class" Toaster
 *
 * From http://stackoverflow.com/a/33552904/1677912
 *
 * Wrapper for Spreadsheet.toast() with support for multi-line messages.
 *
 * Constructor:    new Toaster( message, title, timeoutSeconds );
 *
 * @param message         {String}    Toast message, possibly with newlines (`\n`)
 * @param title           {String}    (optional) Toast title
 * @param timeoutSeconds  {Number}    (optional) Duration of display, default 3s
 *
 * @returns {Toaster}                 Toaster instance.
 */
var Toaster = function(message, title, timeoutSeconds) {
  if (typeof message == 'undefined')
    throw new TypeError( "missing message" );

  this.message = this.parseMessage(message);
  this.title = title || '';
  this.timeoutSeconds = timeoutSeconds || 3;
  this.ss = SpreadsheetApp.getActiveSpreadsheet();
};

/**
 * Display Toaster message using previously set parameters.
 */
Toaster.prototype.display = function() {
  this.ss.toast(this.message,this.title,this.timeoutSeconds);
}

/**
 * This is where the magic happens. Prepares multi-line messages for display.
 *
 * @param {String} msg    Toast message, possibly with newlines (`\n`)
 *
 * @returns{String}       Message, ready to display.
 */
Toaster.prototype.parseMessage = function( msg ) {
  var maxWidth = 52;             // Approx. number of non-breaking spaces required to span toast popup.
  var knob = 1.85;               // Magical approx. ratio of avg char width : non-breaking space width
  var parsedMessage = '';

  var lines = msg.split('\n');   // Break lines at newline chars

  // Rebuild message with padded lines
  for (var i=0; i<lines.length; i++) {
    var len = lines[i].length;
    // Build padding string of non-breaking spaces sandwiched with normal spaces.
    var padding = ' '
                + len < (maxWidth / knob) ?
                  Array(Math.floor(maxWidth-(lines[i].length * knob))).join(String.fromCharCode(160)) + ' ' : '';
    parsedMessage += lines[i] + padding;
  }
  return parsedMessage;
}
Run Code Online (Sandbox Code Playgroud)