计算Google文档中的行数

时间:2018-03-21 14:49:37

标签: javascript google-apps-script google-docs

问题:

我希望能够计算Google文档中的行数。例如,脚本必须为以下文本返回6。

enter image description here

似乎没有任何可靠的方法从文本中提取'\ n'或'\ r'字符。

text.findText(/\r/g)  //OR
text.findText(/\n/g)

第二行代码无论如何都不应该工作,因为根据GAS文档,'新行字符会自动转换为/ r'

3 个答案:

答案 0 :(得分:0)

如果您仍在寻找解决方案,那么这个答案怎么样?遗憾的是,我无法找到准备好的方法来检索Google文档中的行数。为了做到这一点,这个解决方法怎么样?

如果可以检测到每行的结尾,则可以检索行数。所以我尝试使用OCR添加每行的结束标记。我认为可能有几种解决方法可以解决您的问题。所以请把它想象成其中之一。

在Google文档中,当一个句子超过页面宽度时,该句子会自动包含换行符。但换行没有\r\n\n。当用户通过回车键给出换行符时,换行符有\r\n\n。这样,从文档中检索的文本数据只有用户给出的换行符。在您的情况下,您的文档似乎包含incididuntconsequat.之后的换行符。因此,行数不会变为6。

我认为OCR可以用于这种情况。流程如下。

  1. 将Google文档转换为PDF。
  2. 使用OCR将PDF转换为文本数据。
    • 我为OCR选择了"ocr.space"
      • 如果您已经知道OCR的API,可以尝试这样做。
    • 当我使用Drive API的OCR时,\r\n\n的换行符未添加到转换后的文本数据中。所以我使用了ocr.space。 ocr.space可以添加换行符。
  3. 在转换的文本数据中计算\n
    • 此数字表示行数。
  4. 以上流程的示例脚本如下。使用此功能时,请在"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
    • 在这种情况下,OCR的精度并不重要。重要的一点是检索换行符。

    我为几个文档测试了这个脚本。在我的环境中,可以检索正确的行数。但我不确定此脚本是否适用于您的环境。如果此脚本无法用于您的环境,我很抱歉。

答案 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);