Javascript 计算Google文档中的行数

Javascript 计算Google文档中的行数,javascript,google-apps-script,google-docs,Javascript,Google Apps Script,Google Docs,问题: 我希望能够计算谷歌文档中的行数。例如,对于以下文本,脚本必须返回6 但是,似乎没有任何可靠的方法从文本中提取'\n'或'\r'字符 text.findText(/\r/g) //OR text.findText(/\n/g) 第二行代码无论如何都不应该工作,因为根据GAS文档,“新行字符会自动转换为/r”如果您仍在寻找解决方案,这个答案如何?不幸的是,我找不到准备好的方法来检索Google文档中的行数。为了做到这一点,这个变通方法怎么样 如果可以检测到每行的末尾,则可以检索行数。因

问题:

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

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

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

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

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

如果可以检测到每行的末尾,则可以检索行数。因此,我尝试使用OCR添加每行的结束标记。我认为可能有几个变通办法来解决您的问题。所以,请把这看作是其中之一

在谷歌文档中,当一个句子超过页面宽度时,该句子会自动换行。但是换行符没有
\r\n
\n
。当用户按enter键给出换行符时,换行符具有
\r\n
\n
。这样,从文档检索到的文本数据只有用户给出的换行符。在您的情况下,您的文档似乎在
incidedunt
consequat.
之后有换行符。因此,行数不会变成6

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

  • 将谷歌文档转换为PDF
  • 使用OCR将PDF转换为文本数据。
    • 我选择了OCR。
      • 如果您已经知道OCR的API,可以尝试这样做
    • 当我使用驱动器API的OCR时,
      \r\n
      \n
      的换行符未添加到转换的文本数据中。所以我使用了ocr.space。ocr.space可以添加换行符
  • 在转换的文本数据中计数
    \n
    • 这个数字表示行数
  • 上述流的示例脚本如下所示。使用此项时,请在检索您的apikey。当您在表单中输入信息和电子邮件时,您将收到一封包含API密钥的电子邮件。请将其用于此示例脚本。请阅读API的配额。我用免费计划测试了这个

    示例脚本: 结果: 当你的句子被使用时,6作为脚本的结果

    注:
    • 即使文档的最后一行没有
      \r\n
      \n
      ,转换后的文本数据在所有行的末尾都有
      \r\n
    • 在这种情况下,OCR的精度并不重要。重要的一点是检索换行符

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

    正如您在评论中所指出的,没有API可以检索Google文档中的行数。这是因为文档是在客户端动态呈现的,所以服务器不知道这个数字


    一个可能的解决方案是删除Google文档的HTML,因为每一行都用自己的
    div
    和“kix lineview”类重新绘制,但是,您需要在iframe或无头浏览器中实际打开页面,然后逐页滚动以使其呈现,然后在使用«文件»菜单中的«发布到web»发布您的Google文档后,可以计算div

    ,使用以下脚本中的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());
    
    var url=”https://docs.google.com/document/d/e/2PACX-1vSElK...iwUhaFo/pub";
    var text=UrlFetchApp.fetch(url.getContentText();
    变量计数=(text.match(//g)| |[]).length;
    Logger.log(count.toString());
    
    这只有在所有文档行都以

    结尾时才有用,但也可以添加任何其他变体:

    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);
    
    var url=”https://docs.google.com/document/d/e/2PACX-1vSElK...iwUhaFo/pub";
    var text=UrlFetchApp.fetch(url.getContentText();
    var count1=(text.match(//g)| |[]).length;
    var count2=(text.match(//g)| |[]).length;
    var count3=(text.match(/
    /g)| |[]).length; 变量计数=CONT1+CONG2+count3; Logger.log(计数);
    可能类似于
    text.split(/\r\n |\r |\n/).length
    ?对于占据多行的句子呢?如果你只是想要一段时间,那么计数
    \n
    \r
    似乎是不必要的。@SimeonNakov谢谢,它可以工作,但它会返回我预期的段落数。因此,谷歌文档中似乎没有办法计算行数:(@tehhowch我的意图是按说明计算单个行数(而不是段落)。您可以通过调用body.getPages()计算段落数。然而,我对文档中的语句感到困惑,大意是“所有新行字符都转换为\r\n",似乎确实如此,所以问题还没有解决。我认为这里的问题很清楚。提问者想知道是否有一种简单的方法来获得行数。也许他们正在写文件,要求所有文件都放在一页上,而被发送给他们的人更喜欢较小的字体只是把文档放在一页上。不幸的是,我认为这个简单的答案是不,没有一个函数可以提供我所知道的行数。现代的它是疯狂的。
    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);