Вопрос:
Проблема:
Я хотел бы иметь возможность подсчитать количество строк в Документе Google. Например, сценарий должен вернуть 6 для следующего текста.
Однако, похоже, нет никакого надежного метода извлечения символов “n” или “ r” из текста.
text.findText(/r/g) //OR text.findText(/n/g)
Вторая строка кода не должна работать в любом случае, потому что согласно документации GAS “новые строковые символы автоматически преобразуются в /r”,
Ответ №1
Если вы все еще ищете решение, как насчет этого ответа? К сожалению, я не смог найти подготовленные методы для извлечения количества строк в Документе Google. Чтобы сделать это, как об этом обходном пути?
Если конец каждой строки может быть обнаружен, количество строк может быть восстановлено. Поэтому я попытался добавить маркеры конца каждой строки с помощью OCR. Я думаю, что может быть несколько обходных решений для решения вашей проблемы. Поэтому, пожалуйста, подумайте об этом как о одном из них.
В документах Google, когда предложение превышает ширину страницы, предложение автоматически имеет разрыв строки. Но разрыв строки не имеет rn или n. Когда пользователи дают разрыв строки клавишей ввода, разрыв строки имеет rn или n. Таким образом, текстовые данные, полученные из документа, имеют только разрывы строк, которые были предоставлены пользователями. В вашем случае, кажется, что ваш документ имеет разрывы строк для после incididunt и consequat. , Таким образом, количество строк не становится 6.
Я думал, что OCR может быть использовано для этой ситуации. Поток выглядит следующим образом.
- Конвертировать документ Google в PDF.
- Преобразование PDF в текстовые данные с использованием OCR.
- Я выбрал “ocr.space” для OCR.
- Если вы уже знаете API OCR, вы можете попытаться это сделать.
- Когда я использовал OCR API Drive, разрывы строк rn или n не были добавлены к преобразованным текстовым данным. Поэтому я использовал ocr.space. ocr.space может добавлять разрывы строк.
- Я выбрал “ocr.space” для OCR.
- Count n в преобразованных текстовых данных.
- Это число означает количество строк.
Сценарий примера для потока выше выглядит следующим образом. Когда вы используете это, пожалуйста, извлеките свой apikey в “ocr.space”. Когда вы вводите свою информацию и электронную почту в форму, вы получите электронное письмо, включая ключ API. Используйте этот сценарий. И, пожалуйста, прочитайте квоту API. Я проверил это, используя бесплатный план.
Содержание
Пример скрипта:
var apikey = «### Your API key for using ocr.space ###»; var id = DocumentApp.getActiveDocument().getId(); var url = «https://docs.google.com/feeds/download/documents/export/Export?id=» + id + «&format=pdf&access_token=» + ScriptApp.getOAuthToken(); var blob = UrlFetchApp.fetch(url).getBlob(); var payload = {method: «POST», headers: {apikey: apikey}, payload: {file: blob}}; var ocrRes = JSON.parse(UrlFetchApp.fetch(«https://api.ocr.space/Parse/Image», payload)); var result = ocrRes.ParsedResults.map(function(e){return e.ParsedText.match(/n/g).length})[0]; Logger.log(result)
Результат:
Когда ваши предложения используются, 6 получается в результате скрипта.
Заметка:
- Даже если в последней строке документа нет rn или n, преобразованные текстовые данные имеют rn в конце всех строк.
- В этом случае точность OCR не важна. Важным моментом является извлечение разрывов строк.
Я протестировал этот скрипт для нескольких документов. В моей среде можно получить правильное количество строк. Но я не уверен, работает ли этот скрипт для вашей среды. Извините, если этот сценарий не может быть использован для вашей среды.
Ответ №2
Как вы отметили в комментариях, нет API для получения количества строк в Документах Google. Это происходит потому, что документ визуализируется динамически на стороне клиента, поэтому сервер не знает этого номера.
Одним из возможных решений является очистка HTML-документа Google Doc, потому что каждая строка запирается с помощью собственного div с классом “kix-lineview”, однако вам нужно будет фактически открыть страницу в браузере iframe или без браузера, а затем прокрутить страницу по страницы, чтобы сделать их рендерингом, а затем иметь возможность считать divs
Ответ №3
После публикации Google Doc с помощью “Опубликовать в Интернете” в меню “Файл” используйте URL-адрес в следующем сценарии:
var url = «https://docs.google.com/document/d/e/2PACX-1vSElK…iwUhaFo/pub»; var text = UrlFetchApp.fetch(url).getContentText(); var count = (text.match(/</br>/g) || []).length; Logger.log(count.toString());
Это удобно, только если все строки вашего документа заканчиваются на </br>, хотя есть возможность добавить любые другие варианты:
var url = «https://docs.google.com/document/d/e/2PACX-1vSElK…iwUhaFo/pub»; var text = UrlFetchApp.fetch(url).getContentText(); var count1 = (text.match(/</br>/g) || []).length; var count2 = (text.match(/</p>/g) || []).length; var count3 = (text.match(/<hr>/g) || []).length; var count = coun1 + coung2 + count3; Logger.log(count);