скрипт googlesheets неправильно форматирует мой контент - PullRequest
0 голосов
/ 20 февраля 2020

Мой скрипт googlesheet неправильно форматирует мой контент. Кто-нибудь может мне помочь? Вот мой сценарий.

function NewIssue() {
  var spreadsheet = SpreadsheetApp.getActive();
  var cell = spreadsheet.getCurrentCell();
  var user = Session.getActiveUser().getEmail().substring(0, 2).toUpperCase();
  var oldContent = cell.getValue();
  var newContent1 = '********************ISSUE********************\n';
  var newContent2 = 'Group:\n\nDescription:\n\nExpected Results:\n\nActual Results:\n\nTest Results:\n\nTest Data:\n\n\n';
  var space = " ";

  //Keep the format of the old content and add format to newContent1
  var newStyles = [{
    start: 0,
    end: newContent1.length,
    style: SpreadsheetApp.newTextStyle().setBold(true).setForegroundColor("red").build()
  }];
  var richTextValue = cell.getRichTextValue();
  var offset = newContent1.length + newContent2.length + space.length;
  var oldContent = richTextValue.getText();
  if (oldContent.length > 0) {
    richTextValue.getRuns().forEach(function(e) {
      newStyles.push({
        start: offset + e.getStartIndex(),
        end: offset + e.getEndIndex(),
        style: e.getTextStyle()
      });
    });
  }

  var d = new Date(); 
  var richText = SpreadsheetApp.newRichTextValue().setText(user + "_" + d.dateNow() + "_" + d.timeNow() + "\n" + newContent1 + newContent2 + space + oldContent);
  newStyles.forEach(function(e) {richText.setTextStyle(e.start, e.end, e.style)});
  cell.setRichTextValue(richText.build());

  Date.prototype.timeNow = function () 
{
     return ((this.getHours() < 10)?"0":"") + ((this.getHours()>12)?(this.getHours()-12):this.getHours()) +":"+ ((this.getMinutes() < 10)?"0":"") + this.getMinutes() + ((this.getHours()>=12)?('pm'):'am');
}
// Returns the current date with formatting like: 6.16.19
Date.prototype.dateNow = function ()

{
     return (this.getMonth()+1 +"."+ this.getDate() +"."+ this.getYear().toString().substr(-2));
}   

}

При запуске вышеуказанного сценария я получаю следующее:

image1

enter image description here

Я хочу, чтобы это выглядело так:

image2

enter image description here

Я хочу, чтобы пользователь, дата и время были черными и не жирными, как AO_2.19.20_11: 57 pm

Я хочу ******************** ВЫПУСК ********************, чтобы все было красным и жирным.

Я не могу понять, как это сделать. Любые предложения будут полезны.

1 Ответ

0 голосов
/ 20 февраля 2020
  • Вы хотите задать стили текста красного ForegroundColor и выделите жирным шрифтом только ********************ISSUE******************** из newContent1.
  • Вы не хотите изменять стиль текста на newContent2 и user + "_" + d.dateNow() + "_" + d.timeNow() + "\n".
  • Вы хотите добавить старое значение в ячейку к последнему значению newContent2 и user + "_" + d.dateNow() + "_" + d.timeNow() + "\n" + newContent1 + newContent2.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Точки изменения:

  • В вашем сценарии начальный и конечный индексы newContent1 неверны. Потому что user + "_" + d.dateNow() + "_" + d.timeNow() + "\n" добавляется setText(user + "_" + d.dateNow() + "_" + d.timeNow() + "\n" + newContent1 + newContent2 + space + oldContent).
    • В этой модификации она объявляет user + "_" + d.dateNow() + "_" + d.timeNow() + "\n" как newContent0. И начальный и конечный индексы каждого значения установлены.
    • Если вы хотите присвоить значениям стиля текста по умолчанию, за исключением newContent1, в этом случае необходимо указать null в качестве style.

Когда вышеуказанные точки отражаются в вашем сценарии, он становится следующим:

Измененный сценарий:

function NewIssue() {
  Date.prototype.timeNow = function () {
     return ((this.getHours() < 10)?"0":"") + ((this.getHours()>12)?(this.getHours()-12):this.getHours()) +":"+ ((this.getMinutes() < 10)?"0":"") + this.getMinutes() + ((this.getHours()>=12)?('pm'):'am');
  }
  Date.prototype.dateNow = function (){
    return (this.getMonth()+1 +"."+ this.getDate() +"."+ this.getYear().toString().substr(-2));
  }

  var spreadsheet = SpreadsheetApp.getActive();
  var cell = spreadsheet.getCurrentCell();
  var user = Session.getActiveUser().getEmail().substring(0, 2).toUpperCase();
  var oldContent = cell.getValue();
  var d = new Date();
  var newContent0 = user + "_" + d.dateNow() + "_" + d.timeNow() + "\n";  // Added
  var newContent1 = '********************ISSUE********************\n';
  var newContent2 = 'Group:\n\nDescription:\n\nExpected Results:\n\nActual Results:\n\nTest Results:\n\nTest Data:\n\n\n';
  var space = " ";
  var content0Len = newContent0.length;  // Added
  var content1Len = newContent1.length;  // Added
  var content2Len = newContent2.length;  // Added
  var newStyles = [  // Modified
    {start: 0, end: content0Len, style: null},
    {start: content0Len, end: content0Len + content1Len, style: SpreadsheetApp.newTextStyle().setBold(true).setForegroundColor("red").build()},
    {start: content0Len + content1Len, end: content0Len + content1Len + content2Len, style: null}
  ];
  var richTextValue = cell.getRichTextValue();
  var offset = newContent0.length + newContent1.length + newContent2.length + space.length;
  var oldContent = richTextValue.getText();
  if (oldContent.length > 0) {
    richTextValue.getRuns().forEach(function(e) {
      newStyles.push({
        start: offset + e.getStartIndex(),
        end: offset + e.getEndIndex(),
        style: e.getTextStyle()
      });
    });
  }
  var richText = SpreadsheetApp.newRichTextValue().setText(newContent0 + newContent1 + newContent2 + space + oldContent);  // Modified
  newStyles.forEach(function(e) {richText.setTextStyle(e.start, e.end, e.style)});
  cell.setRichTextValue(richText.build());
}

Примечание :

  • В вашем образце выходного изображения кажется, что user + "_" + d.dateNow() + "_" + d.timeNow() имеет 2 переноса строк. Если это так, измените его следующим образом.

    • С

      var newContent0 = user + "_" + d.dateNow() + "_" + d.timeNow() + "\n";
      
    • До

      var newContent0 = user + "_" + d.dateNow() + "_" + d.timeNow() + "\n\n";
      

Ссылка:

Если я неправильно понял ваш вопрос, и это не то направление, которое вам нужно Прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...