Скрипт Служб Google: невозможно прочитать жирный атрибут абзаца в документе Google - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь прочитать атрибуты абзаца из документа Google с помощью скрипта Apps.Когда я читаю атрибуты, некоторые атрибуты BOLD возвращаются как нулевые.

Вот мой пример сценария для чтения атрибутов.

// Считывает атрибуты каждого абзаца в этом документе Google и печатает весь текст абзаца, выделенный жирным шрифтом

function readAttributes() {
  var doc = DocumentApp.getActiveDocument(); 
  var body = doc.getBody(); 
  var paras = body.getParagraphs();
  for (var i = 0; i < paras.length; i++){ 
    var paragraph = paras[i];  
    var attribute = paragraph.getAttributes(); 
    if (attribute.BOLD === true) {
      Logger.log(paragraph.getText()); 
    }
  } 
}

Вот пример смоделированного документа: сценарий находится за этим документом Google.Файл -> Сделать копию.

https://docs.google.com/document/d/13FYg8AAk6PX9TEUdgfaT-60Vi5xoQlZ9Moink5guLH0/edit?usp=sharing

Что не так с моим документом?Только атрибут Вопроса 18 возвращается как жирный, а атрибут Вопроса 17 - как нулевой.

Возвращенный объект Атрибут для любого абзаца в Документе Google выглядит следующим образом.

 {
    FONT_SIZE=null, 
    ITALIC=null, 
    HORIZONTAL_ALIGNMENT=null, 
    INDENT_END=null,
    INDENT_START=null, 
    LINE_SPACING=1.0, 
    LINK_URL=null, 
    UNDERLINE=null, 
    BACKGROUND_COLOR=null, 
    INDENT_FIRST_LINE=null, 
    LEFT_TO_RIGHT=true, 
    SPACING_BEFORE=null, 
    HEADING=Normal, 
    SPACING_AFTER=null, 
    STRIKETHROUGH=null, 
    FOREGROUND_COLOR=null, 
    BOLD=null, 
    FONT_FAMILY=Calibri
}

MyLogger.log () Результаты:

Ожидаемый результат:

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

Результирующий вывод:

Прежде чем отправиться в путешествие, вам необходимо осмотреть ваши шины.Какие проблемы потребуют немедленных действий?

Изображение, показывающее проблему

Итак, ясно, что вопрос 17 в документе имеет проблему, поэтому его атрибут BOLD равен нулю.

1 Ответ

0 голосов
/ 23 сентября 2018

В вашем примере в абзаце 17. Which of ... весь абзац не является атрибутом BOLD.С другой стороны, в абзаце 18. Before taking... весь абзац является атрибутом BOLD.При этом атрибут BOLD абзаца 17. Which of ... становится null.Так как насчет этой модификации?Я думаю, что есть несколько ответов для вашей ситуации.Поэтому, пожалуйста, подумайте об этом как об одном из них.

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

  • В каждом абзаце сканируйте текст на каждый символ.И получить символ с атрибутом BOLD.
    • Для этой ситуации используется isBold().

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

Пожалуйста, измените следующим образом.

С:
for (var i = 0; i < paras.length; i++){ 
  var paragraph = paras[i];  
  var attribute = paragraph.getAttributes(); 
  if (attribute.BOLD === true) {
    Logger.log(paragraph.getText()); 
  }
} 
Кому:
for (var i = 0; i < paras.length; i++) {
  var res = "";
  var paragraph = paras[i];
  var attribute = paragraph.editAsText();
  for (var j = 0; j < attribute.getText().length; j++) {
    if (attribute.isBold(j)) {
      res += attribute.getText()[j];
    }
  }
  if (res.length > 0) {
    Logger.log(res)
  }
}

Результат:

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

Примечание:

  • В этой модификации, если символы, не являющиеся атрибутом BOLD, включены в предложение, например,символы не получены.Если все символы являются атрибутом BOLD, получается целое предложение.Пожалуйста, будьте осторожны.

Ссылка:

Если это не то, что выхочу, извини.

...