Ошибка при запуске скрипта в Google Apps Script для документов - PullRequest
0 голосов
/ 22 апреля 2020

Я пытался создать скрипт с помощью Google Apps Script for Documents. До этого решение работало идеально, но с прошлой ночи я получил сообщение об ошибке при запуске моего сценария следующим образом: Исключение: Службе документов не удалось получить доступ к документу с кодом 1tk-eeaBSSJ9Im2b5Y-e1jL8t18rKFXhp356udoyx8wA. (строка 124, файл "FindAttributes") . После того, как я перевернул вызов метода, ошибка изменилась на: GoogleJsonResponseException: произошел сбой вызова API для docs.documents.batchUpdate с ошибкой Недопустимые запросы [0] .updateTableCellStyle: Указанное расположение начала таблицы недопустимо. (строка 83, файл "FindAttributes") . Я искал в inte rnet какие-либо ссылки на этот тип ошибки, но мой поиск ничего не дал. Мой код проверяет заголовки в тексте и преобразует его в определенный пользовательский формат. Что меня интригует, так это то, что это происходит только в том случае, если речь идет о стиле HEADING1, который является первым, к которому я получаю доступ в моем скрипте. Когда я перезаписываю этот метод из HEADING1, остальные работают без проблем. Кто-нибудь знает, что может происходить? Я нахожу это странным, потому что коды точно такие же, за исключением части форматирования стиля.

Мой код:

function verifiStyle(){
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var paragrafs = body.getParagraphs();
  
  for(var i = 0; i < paragrafs.length; i++){
    var attr = paragrafs[i].getAttributes();
    
    for(var at in attr){
      if(at == "HEADING" & attr[at] == "HEADING1"){
        VerifTitle1(i);
      }
      else if(at == "HEADING" & attr[at] == "HEADING2"){
        VerifTitle2(i);
      }
      else if(at == "HEADING" & attr[at] == "HEADING3"){
        VerifTitle3(i);
      }
      else if(at == "HEADING" & attr[at] == "HEADING4"){
        VerifTitle4(i);
      }
      else if(at == "HEADING" & attr[at] == "NORMAL"){
        VerifTextoNormal(i);
      }
    }
  }
}

function VerifTitle1(value){
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  
  var texto = body.getChild(value);
  var ttt = texto.getText();
  
  var cells = [
      ['', '']
    ];
  
  var styleCell1 = {};
    styleCell1[DocumentApp.Attribute.FONT_SIZE] = 20;
    styleCell1[DocumentApp.Attribute.VERTICAL_ALIGNMENT] = DocumentApp.VerticalAlignment.CENTER;
    styleCell1[DocumentApp.Attribute.FOREGROUND_COLOR]='#888888';
    styleCell1[DocumentApp.Attribute.FONT_FAMILY]='Roboto';
    
    var styleCell = {};
    styleCell[DocumentApp.Attribute.HEADING] = DocumentApp.ParagraphHeading.HEADING1;
    styleCell[DocumentApp.Attribute.VERTICAL_ALIGNMENT] = DocumentApp.VerticalAlignment.CENTER;
    styleCell[DocumentApp.Attribute.FONT_FAMILY]='Roboto';
    styleCell[DocumentApp.Attribute.FONT_SIZE] = 18;
    styleCell[DocumentApp.Attribute.FOREGROUND_COLOR]='#000000';
    styleCell[DocumentApp.Attribute.HEIGHT] = 10
  
  body.removeChild(body.getChild(value));
  var table = body.insertTable(value, cells);
  
    table.getRow(0).getCell(1).appendParagraph(ttt).setHeading(DocumentApp.ParagraphHeading.HEADING1);
    table.getRow(0).getCell(1).setAttributes(styleCell);
    table.getRow(0).getCell(0).setWidth(40);
    table.getRow(0).getCell(0).setAttributes(styleCell1);
    table.setBorderColor('#ffffff');
  table.getRow(0).editAsText().setBold(true);
    
    const index = body.getChildIndex(table);
    const documentId = doc.getId();
    doc.saveAndClose();
    const tableStart = Docs.Documents.get(documentId).body.content[index + 1].startIndex;
    const tempStyle = {width: {magnitude :0, unit: "PT"}, dashStyle: "SOLID", color: {color: {rgbColor: {blue: 0}}}};
    const resource = {requests: [
      {updateTableCellStyle: {
        tableStartLocation: {index: tableStart},
        tableCellStyle: {borderTop: tempStyle, borderBottom: tempStyle, borderLeft: tempStyle, borderRight: tempStyle},
        fields: "borderTop,borderBottom,borderLeft,borderRight"
      }},
      {updateTableCellStyle: {
        tableRange: {
          tableCellLocation: {tableStartLocation: {index: tableStart}, rowIndex: 0, columnIndex: 0}, rowSpan: 1, columnSpan: 1},
        tableCellStyle: {
          borderRight: {dashStyle: "SOLID", width: {magnitude: 3, unit: "PT"}, color: {color: {rgbColor: {red: 0.9372549019607843, green: 0.3254901960784314, blue: 0.3137254901960784}}}}
        },
        fields: "borderRight"
      }}
    ]};
    Docs.Documents.batchUpdate(resource, documentId);
}

function VerifTitle2(value){
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  
  var texto = body.getChild(value);
  var ttt = texto.getText();
  
  var cells = [
      ['', '']
    ];
  
  var styleCell1 = {};
    styleCell1[DocumentApp.Attribute.FONT_SIZE] = 18;
    styleCell1[DocumentApp.Attribute.VERTICAL_ALIGNMENT] = DocumentApp.VerticalAlignment.CENTER;
    styleCell1[DocumentApp.Attribute.FOREGROUND_COLOR]='#888888';
    styleCell1[DocumentApp.Attribute.FONT_FAMILY]='Roboto';
    
    var styleCell = {};
    styleCell[DocumentApp.Attribute.HEADING] = DocumentApp.ParagraphHeading.HEADING2;
    styleCell[DocumentApp.Attribute.VERTICAL_ALIGNMENT] = DocumentApp.VerticalAlignment.CENTER;
    styleCell[DocumentApp.Attribute.FONT_FAMILY]='Roboto';
    styleCell[DocumentApp.Attribute.FONT_SIZE] = 15;
    styleCell[DocumentApp.Attribute.FOREGROUND_COLOR]='#000000';
    styleCell[DocumentApp.Attribute.HEIGHT] = 10
  
  body.removeChild(body.getChild(value));
  var table = body.insertTable(value, cells);
  
    table.getRow(0).getCell(1).appendParagraph(ttt).setHeading(DocumentApp.ParagraphHeading.HEADING2);
    table.getRow(0).getCell(1).setAttributes(styleCell);
    table.getRow(0).getCell(0).setWidth(40);
    table.getRow(0).getCell(0).setAttributes(styleCell1);
    table.setBorderColor('#ffffff');
  table.getRow(0).editAsText().setBold(true);
    
    const index = body.getChildIndex(table);
    const documentId = doc.getId();
    doc.saveAndClose();
    const tableStart = Docs.Documents.get(documentId).body.content[index + 1].startIndex;
    const tempStyle = {width: {magnitude :0, unit: "PT"}, dashStyle: "SOLID", color: {color: {rgbColor: {blue: 0}}}};
    const resource = {requests: [
      {updateTableCellStyle: {
        tableStartLocation: {index: tableStart},
        tableCellStyle: {borderTop: tempStyle, borderBottom: tempStyle, borderLeft: tempStyle, borderRight: tempStyle},
        fields: "borderTop,borderBottom,borderLeft,borderRight"
      }},
      {updateTableCellStyle: {
        tableRange: {
          tableCellLocation: {tableStartLocation: {index: tableStart}, rowIndex: 0, columnIndex: 0}, rowSpan: 1, columnSpan: 1},
        tableCellStyle: {
          borderRight: {dashStyle: "SOLID", width: {magnitude: 3, unit: "PT"}, color: {color: {rgbColor: {red: 0.9372549019607843, green: 0.3254901960784314, blue: 0.3137254901960784}}}}
        },
        fields: "borderRight"
      }}
    ]};
    Docs.Documents.batchUpdate(resource, documentId);
}

function VerifTitle3(value){
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  
  var texto = body.getChild(value);
  var ttt = texto.getText();
  
  var cells = [
      ['', '']
    ];
  
  var styleCell1 = {};
    styleCell1[DocumentApp.Attribute.FONT_SIZE] = 16;
    styleCell1[DocumentApp.Attribute.VERTICAL_ALIGNMENT] = DocumentApp.VerticalAlignment.CENTER;
    styleCell1[DocumentApp.Attribute.FOREGROUND_COLOR]='#888888';
    styleCell1[DocumentApp.Attribute.FONT_FAMILY]='Roboto';
    
    var styleCell = {};
    styleCell[DocumentApp.Attribute.HEADING] = DocumentApp.ParagraphHeading.HEADING3;
    styleCell[DocumentApp.Attribute.VERTICAL_ALIGNMENT] = DocumentApp.VerticalAlignment.CENTER;
    styleCell[DocumentApp.Attribute.FONT_FAMILY]='Roboto';
    styleCell[DocumentApp.Attribute.FONT_SIZE] = 14;
    styleCell[DocumentApp.Attribute.FOREGROUND_COLOR]='#000000';
    styleCell[DocumentApp.Attribute.HEIGHT] = 10
  
  body.removeChild(body.getChild(value));
  var table = body.insertTable(value, cells);
  
    table.getRow(0).getCell(1).appendParagraph(ttt).setHeading(DocumentApp.ParagraphHeading.HEADING3);
    table.getRow(0).getCell(1).setAttributes(styleCell);
    table.getRow(0).getCell(0).setWidth(40);
    table.getRow(0).getCell(0).setAttributes(styleCell1);
    table.setBorderColor('#ffffff');
  table.getRow(0).editAsText().setBold(true);
    
    const index = body.getChildIndex(table);
    const documentId = doc.getId();
    doc.saveAndClose();
    const tableStart = Docs.Documents.get(documentId).body.content[index + 1].startIndex;
    const tempStyle = {width: {magnitude :0, unit: "PT"}, dashStyle: "SOLID", color: {color: {rgbColor: {blue: 0}}}};
    const resource = {requests: [
      {updateTableCellStyle: {
        tableStartLocation: {index: tableStart},
        tableCellStyle: {borderTop: tempStyle, borderBottom: tempStyle, borderLeft: tempStyle, borderRight: tempStyle},
        fields: "borderTop,borderBottom,borderLeft,borderRight"
      }},
      {updateTableCellStyle: {
        tableRange: {
          tableCellLocation: {tableStartLocation: {index: tableStart}, rowIndex: 0, columnIndex: 0}, rowSpan: 1, columnSpan: 1},
        tableCellStyle: {
          borderRight: {dashStyle: "SOLID", width: {magnitude: 3, unit: "PT"}, color: {color: {rgbColor: {red: 0.9372549019607843, green: 0.3254901960784314, blue: 0.3137254901960784}}}}
        },
        fields: "borderRight"
      }}
    ]};
    Docs.Documents.batchUpdate(resource, documentId);
}

function VerifTitle4(value){
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  
  var texto = body.getChild(value);
  var ttt = texto.getText();
  
  var cells = [
      ['', '']
    ];
  
  var styleCell1 = {};
    styleCell1[DocumentApp.Attribute.FONT_SIZE] = 14;
    styleCell1[DocumentApp.Attribute.VERTICAL_ALIGNMENT] = DocumentApp.VerticalAlignment.CENTER;
    styleCell1[DocumentApp.Attribute.FOREGROUND_COLOR]='#888888';
    styleCell1[DocumentApp.Attribute.FONT_FAMILY]='Roboto';
    
    var styleCell = {};
    styleCell[DocumentApp.Attribute.HEADING] = DocumentApp.ParagraphHeading.HEADING4;
    styleCell[DocumentApp.Attribute.VERTICAL_ALIGNMENT] = DocumentApp.VerticalAlignment.CENTER;
    styleCell[DocumentApp.Attribute.FONT_FAMILY]='Roboto';
    styleCell[DocumentApp.Attribute.FONT_SIZE] = 12;
    styleCell[DocumentApp.Attribute.FOREGROUND_COLOR]='#000000';
    styleCell[DocumentApp.Attribute.HEIGHT] = 10
  
  body.removeChild(body.getChild(value));
  var table = body.insertTable(value, cells);
  
    table.getRow(0).getCell(1).appendParagraph(ttt).setHeading(DocumentApp.ParagraphHeading.HEADING4);
    table.getRow(0).getCell(1).setAttributes(styleCell);
    table.getRow(0).getCell(0).setWidth(40);
    table.getRow(0).getCell(0).setAttributes(styleCell1);
    table.setBorderColor('#ffffff');
  table.getRow(0).editAsText().setBold(true);
  table.getRow(0).setMinimumHeight(0.2);
    
    const index = body.getChildIndex(table);
    const documentId = doc.getId();
    doc.saveAndClose();
    const tableStart = Docs.Documents.get(documentId).body.content[index + 1].startIndex;
    const tempStyle = {width: {magnitude :0, unit: "PT"}, dashStyle: "SOLID", color: {color: {rgbColor: {blue: 0}}}};
    const resource = {requests: [
      {updateTableCellStyle: {
        tableStartLocation: {index: tableStart},
        tableCellStyle: {borderTop: tempStyle, borderBottom: tempStyle, borderLeft: tempStyle, borderRight: tempStyle},
        fields: "borderTop,borderBottom,borderLeft,borderRight"
      }},
      {updateTableCellStyle: {
        tableRange: {
          tableCellLocation: {tableStartLocation: {index: tableStart}, rowIndex: 0, columnIndex: 0}, rowSpan: 1, columnSpan: 1},
        tableCellStyle: {
          borderRight: {dashStyle: "SOLID", width: {magnitude: 3, unit: "PT"}, color: {color: {rgbColor: {red: 0.9372549019607843, green: 0.3254901960784314, blue: 0.3137254901960784}}}}
        },
        fields: "borderRight"
      }}
    ]};
    Docs.Documents.batchUpdate(resource, documentId);
}

function VerifTextoNormal(value){
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  
  var para = body.getParagraphs();
  
  var styleCell = {};
    styleCell[DocumentApp.Attribute.HEADING] = DocumentApp.ParagraphHeading.NORMAL;
    styleCell[DocumentApp.Attribute.VERTICAL_ALIGNMENT] = DocumentApp.VerticalAlignment.CENTER;
    styleCell[DocumentApp.Attribute.HORIZONTAL_ALIGNMENT] = DocumentApp.HorizontalAlignment.JUSTIFY;
    styleCell[DocumentApp.Attribute.FONT_FAMILY]='Arial';
    styleCell[DocumentApp.Attribute.FONT_SIZE] = 12;
    styleCell[DocumentApp.Attribute.FOREGROUND_COLOR]='#000000';
    styleCell[DocumentApp.Attribute.INDENT_FIRST_LINE] = 15;
  
  para[value].setAttributes(styleCell);
}

Это результат моего сценария, когда VerifiTitle1 () включен.

one run

Это результат, когда VerifiTitle1 () отключен. second run

То есть. При этом метод недоступен. все идет хорошо.

1 Ответ

0 голосов
/ 22 апреля 2020

Очки модификации:

Я думаю, что причиной вашей проблемы является использование for(var i = 0; i < paragrafs.length; i++) и removeChild(). В этом случае дочерний элемент удаляется из верхней части тела документа. Таким образом, дочерние элементы тела документа изменяются. Например, как насчет следующей модификации?

Модифицированный скрипт:

Пожалуйста, измените ваш скрипт в verifiStyle() следующим образом.

От:
for(var i = 0; i < paragrafs.length; i++){
До:
for(var i = paragrafs.length - 1; i >= 0; i--){
...