Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script Google文档中的节字数_Google Apps Script_Google Docs - Fatal编程技术网

Google apps script Google文档中的节字数

Google apps script Google文档中的节字数,google-apps-script,google-docs,Google Apps Script,Google Docs,谷歌文档插件是否可以按标题(部分)计算单词数?下图显示了我想要的 有没有一种方法可以在侧边栏或任何其他方式中显示此类字数信息?下面是一个脚本。在谷歌文档中,标题是一种段落,通过其getHeading()属性来区分。因此有9个层次的段落:标题,副标题,h1。。。h6,正常 脚本首先查找每个段落的级别和每个段落的字数。然后,对于每个段落,它循环遍历所有后续的“正常”段落,添加它们的字数;当达到相同或更高级别的另一段时,此操作停止 我的理解是,标题中的单词本身不应包含在字数中,但如果需要,可以更改

谷歌文档插件是否可以按标题(部分)计算单词数?下图显示了我想要的


有没有一种方法可以在侧边栏或任何其他方式中显示此类字数信息?

下面是一个脚本。在谷歌文档中,标题是一种段落,通过其
getHeading()
属性来区分。因此有9个层次的段落:标题,副标题,h1。。。h6,正常

脚本首先查找每个段落的级别和每个段落的字数。然后,对于每个段落,它循环遍历所有后续的“正常”段落,添加它们的字数;当达到相同或更高级别的另一段时,此操作停止

我的理解是,标题中的单词本身不应包含在字数中,但如果需要,可以更改

因为这不是一个附加组件,所以没有侧边栏来显示信息。我只是将结果附加在末尾,将每个标题复制到那里,并将(X个单词)附加到文本中。看起来是这样的:

Book title (108 words)
 Chapter 1 (54 words)
  Section 1 (15 words)
  Section 2 (20 words)
 Chapter 2 (54 words)
  Section 1 (54 words)
   Subsection 1 (31 words)
   Subsection 2 (13 words)
在我的示例文本中,第1章在第一节之前有一些“简介”普通文本,这就是为什么它的字数高于两节的字数之和

脚本:

function countPerSection() {                
  var body = DocumentApp.getActiveDocument().getBody();
  var para = body.getParagraphs();
  var levels = para.map(function(p) {
    return [DocumentApp.ParagraphHeading.TITLE, 
            DocumentApp.ParagraphHeading.SUBTITLE, 
            DocumentApp.ParagraphHeading.HEADING1,
            DocumentApp.ParagraphHeading.HEADING2,
            DocumentApp.ParagraphHeading.HEADING3,
            DocumentApp.ParagraphHeading.HEADING4,
            DocumentApp.ParagraphHeading.HEADING5,
            DocumentApp.ParagraphHeading.HEADING6,
            DocumentApp.ParagraphHeading.NORMAL].indexOf(p.getHeading());
  });
  var paraCounts = para.map(function (p) {
    return p.getText().split(/\W+/).length;
  });

  var counts = [];
  for (var i = 0; i < para.length; i++) {
    var count = 0;
    for (var j = i+1; j < para.length; j++) {
      if (levels[j] <= levels[i]) {
        break;
      }
      if (levels[j] == 8) {
        count += paraCounts[j];
      }
    }
    counts.push(count);
  }

  for (var i = 0; i < para.length; i++) {
    if (levels[i] < 8) {
      body.appendParagraph(para[i].copy()).appendText(" (" + counts[i] + " words)");
    }
  }
}
函数countPerSection(){
var body=DocumentApp.getActiveDocument().getBody();
var para=body.getparations();
风险值水平=参数图(功能(p){
返回[文档pp.ParagraphHeading.TITLE,
文档pp.段落标题.副标题,
文件pp.段落标题1,
文件pp.段落标题2,
文件pp.段落标题3,
文件pp.段落标题4,
文件pp.段落标题5,
文件pp.段落标题6,
DocumentApp.ParagraphHeading.NORMAL].indexOf(p.getHeading());
});
变量参数=参数映射(函数(p){
返回p.getText().split(/\W+/).length;
});
var计数=[];
对于(变量i=0;i如果(水平[j]我编辑了前面的答案,将单词计数放在每个标题旁边,而不是放在底部,您也可以在大纲中看到。我还添加了一个函数,可以删除所有计数,这样您就可以保留它们,而不必担心CTRL-Z或手动删除它们。希望这对其他人有用

function countPerSection() {                
  var body = DocumentApp.getActiveDocument().getBody();
  var para = body.getParagraphs();
  var levels = para.map(function(p) {
    return [DocumentApp.ParagraphHeading.TITLE, 
            DocumentApp.ParagraphHeading.SUBTITLE, 
            DocumentApp.ParagraphHeading.HEADING1,
            DocumentApp.ParagraphHeading.HEADING2,
            DocumentApp.ParagraphHeading.HEADING3,
            DocumentApp.ParagraphHeading.HEADING4,
            DocumentApp.ParagraphHeading.HEADING5,
            DocumentApp.ParagraphHeading.HEADING6,
            DocumentApp.ParagraphHeading.NORMAL].indexOf(p.getHeading());
  });
  var paraCounts = para.map(function (p) {
    return p.getText().split(/\W+/).length;
  });

  // var counts = [];
  for (var i = 0; i < para.length; i++) {
    var count = 0;
    for (var j = i+1; j < para.length; j++) {
      if (levels[j] <= levels[i]) {
        break;
      }
      if (levels[j] == 8) {
        count += paraCounts[j];
      }
    }
    if (levels[i] < 8) {
      para[i].appendText(" (" + count + " words)");
    }
  }
}

function removeCountPerSection(){
  var docBody = DocumentApp.getActiveDocument().getBody();
  docBody.replaceText('\\([0123456789]* words\\)', "");
}
函数countPerSection(){
var body=DocumentApp.getActiveDocument().getBody();
var para=body.getparations();
风险值水平=参数图(功能(p){
返回[文档pp.ParagraphHeading.TITLE,
文档pp.段落标题.副标题,
文件pp.段落标题1,
文件pp.段落标题2,
文件pp.段落标题3,
文件pp.段落标题4,
文件pp.段落标题5,
文件pp.段落标题6,
DocumentApp.ParagraphHeading.NORMAL].indexOf(p.getHeading());
});
变量参数=参数映射(函数(p){
返回p.getText().split(/\W+/).length;
});
//var计数=[];
对于(变量i=0;iif(levels[j]可能是您要查找的内容??请查看。谢谢,但这不是我要查找的内容。我需要的是节字数(因此我将对同一文档进行多个字数)你可以参考图片链接。这看起来正是我需要的。我似乎无法让它工作。我在哪里保存脚本以及如何运行脚本?谢谢。转到工具>脚本编辑器。输入代码。单击保存。单击运行。有关更多详细信息,请参阅教程,感谢快速回答。我检查了教程并完成了所有操作。它给了我一个e错误:
TypeError:无法调用null的方法“getBody”。
噢,本教程在“独立”脚本的上下文中解释了脚本。此脚本应附加(“绑定”)在文档中,您需要计算单词。在该文档中,转到工具>脚本编辑器,并在其中输入代码。男性,工作得很好。非常感谢。作为一个方面,您应该考虑用工具条为谷歌文档做广告附加,以实时输出他的数据。再次感谢。