我要做的不是谷歌表格,而是普通的谷歌檔案文字處理器。我正在使用一個包含一堆表格的文本檔案,每個表格下面都有一個段落、兩個、三個文本,而不是表格本身的一部分。該表有包含各種資訊的列,但其中之一是“單詞”,目前我必須手動突出顯示下面的該部分,轉到“工具”找到“字數”,然后查看它是什么。然后,如果我編輯下面的部分,我會重復該程序。
其中一些檔案有幾十個甚至幾百個這樣的單獨部分(表格,下面有文本,直到下一個表格),所以有一些方法可以自動更新該欄位將是不可思議的。
有沒有辦法讓表格的一個單元格查看下面的文本并計算字數?
每個表的上方都有一個 H3 標題,所以我的想法是以某種方式識別和計算表末尾和下一個 H3 之間的單詞。
結構是:
H3 level title
Table
Text
Text
Text
H3 level title
Table
Text
Text
等等。
這是一個檔案的鏈接,顯示了我希望做的事情:link
還有一些額外的小事情需要考慮,但只要知道這是否可能會很棒。
我正在運行 Lubuntu 20.04LTS,使用 Chrome 作為瀏覽器,如果這有所作為的話。
uj5u.com熱心網友回復:
描述
我已經為您的具體情況開發了一個腳本。字數可能不準確,因為此腳本僅使用空格作為單詞之間的分隔符。如果有制表符或其他字符,則計數可能會關閉。字數統計的主題以前在沒有萬無一失的計數器的情況下出現在 stackoverflow 上。
基本上它會跳過標題,跟蹤下表以填寫字數,然后計算表格和下一個標題之間的字數。
如果單詞以黃色突出顯示,我已經編輯了腳本以從計數中省略。但是,我觀察到,如果一個單詞以標點符號結尾并且沒有突出顯示,則它算作一個單詞。因此,您再次可以看到在字數統計中需要考慮很多事情。
修復了段落以高亮開頭的情況。
腳本
function countWords() {
try {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var child = null;
var i = 0;
var j = 0;
var count = 0;
var text = null;
var table = null;
var length = 0;
var startOffset = -1;
var endOffset = -1;
for( i=0; i<body.getNumChildren(); i ) {
child = body.getChild(i);
if( child.getType() === DocumentApp.ElementType.PARAGRAPH ) {
var atts = child.getAttributes();
var heading = atts[DocumentApp.Attribute.HEADING].toString();
if( heading.indexOf("HEADING") < 0 ) {
length = child.asParagraph().getText().length;
text = child.asParagraph().copy().editAsText();
for( j=length-1; j>=0; j-- ) { // have to delete from end first
if( text.getBackgroundColor(j) == "#ffff00" ) { // yellow
if( endOffset < 0 ) {
endOffset = j;
}
else {
startOffset = j;
}
}
else if( endOffset >= 0 ) {
console.log("offset = " startOffset " " endOffset);
text.deleteText(startOffset,endOffset);
if( startOffset === 0 ) break; // if the paragraph starts with highlight
startOffset = -1;
endOffset = -1;
}
}
text = text.getText().split(" ");
count = count text.length;
if( text.length > 0 ) text.forEach( word => { if( word == '' ) count--; } ); // incase of double spaces
}
else {
if( table ) table.asTable().getCell(1,5).setText(count);
// start a new count
count = 0;
}
}
else if( child.getType() === DocumentApp.ElementType.TABLE ) {
table = child;
}
}
// fill in the last table
table.asTable().getCell(1,5).setText(count);
}
catch(err) {
console.log(err);
}
}
參考
- https://developers.google.com/apps-script/reference/document/element-type
- https://developers.google.com/apps-script/reference/document/attribute
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/442366.html
下一篇:Google表格水平單選復選框
