问题:
我希望能够计算Google文档中的行数。例如,脚本必须为以下文本返回6。
似乎没有任何可靠的方法从文本中提取'\ n'或'\ r'字符。
text.findText(/\r/g) //OR
text.findText(/\n/g)
第二行代码无论如何都不应该工作,因为根据GAS文档,'新行字符会自动转换为/ r'
答案 0 :(得分:0)
如果您仍在寻找解决方案,那么这个答案怎么样?遗憾的是,我无法找到准备好的方法来检索Google文档中的行数。为了做到这一点,这个解决方法怎么样?
如果可以检测到每行的结尾,则可以检索行数。所以我尝试使用OCR添加每行的结束标记。我认为可能有几种解决方法可以解决您的问题。所以请把它想象成其中之一。
在Google文档中,当一个句子超过页面宽度时,该句子会自动包含换行符。但换行没有\r\n
或\n
。当用户通过回车键给出换行符时,换行符有\r\n
或\n
。这样,从文档中检索的文本数据只有用户给出的换行符。在您的情况下,您的文档似乎包含incididunt
和consequat.
之后的换行符。因此,行数不会变为6。
我认为OCR可以用于这种情况。流程如下。
\r\n
或\n
的换行符未添加到转换后的文本数据中。所以我使用了ocr.space。 ocr.space可以添加换行符。\n
。
以上流程的示例脚本如下。使用此功能时,请在"ocr.space"检索您的API。当您输入信息并通过电子邮件发送到表单时,您将收到一封包含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。
\r\n
或\n
,转换的文本数据也会在所有行的末尾显示\r\n
。我为几个文档测试了这个脚本。在我的环境中,可以检索正确的行数。但我不确定此脚本是否适用于您的环境。如果此脚本无法用于您的环境,我很抱歉。
答案 1 :(得分:0)
正如您在评论中指出的那样,没有API可以检索Google文档中的行数。发生这种情况是因为文档是在客户端动态呈现的,因此服务器不知道这个数字。
一种可能的解决方案是抓取Google文档的HTML,因为每行都使用“kix-lineview”类自带Connection:[keep-alive]
,但是您需要在iframe中实际打开页面或无头浏览器,然后逐页滚动,使它们渲染,然后能够计算div
答案 2 :(得分:0)
使用“文件”菜单中的“发布到网络”发布Google文档后,请使用以下脚本中的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);