2017-05-13 1 views
0

Ich versuche, eine Funktion zu schreiben, die die Überschrift entfernen, aber die Schriftart und Größe des aktuellen Absatzes beibehalten würde.Wie wird die Schriftfamilie und -größe eines Standard-formatierten Absatzes abgerufen?

Es scheint jedoch, dass Werte für die Schriftfamilie/Schriftgröße nicht von Absätzen abgerufen werden können, deren Standardschriftart durch die angewendete Überschrift festgelegt wurde.

var cursor = DocumentApp.getActiveDocument().getCursor(); if (!cursor) return; 
var ctext = cursor.getSurroundingText(); 
var para = ctext.asParagraph(); 
para.setHeading(DocumentApp.ParagraphHeading.HEADING1); // sets Arial 20 
var text = ctext.asText(); 
var ff = text.getFontFamily(); 
var fs = text.getFontSize(); 
DocumentApp.getUi().alert(ff+" "+fs); // NULL NULL 

Ich habe versucht, die Überschriften Schriftarten und -größen Zugriff auf sie auf diese Weise zu bekommen, aber Google App Script scheint nicht diejenigen überall verfügbar zu machen.

Antwort

0

Mehr von einer Bestätigung, dass dies jetzt nicht möglich ist, habe ich mir das Attributes-Objekt angesehen und sogar direkt mit dem gleichen Ergebnis darauf zugegriffen. Zur Umgehung des Problems, da Sie die Standardeinstellungen kennen, können Sie diese als Objekte speichern und sie setzen, wenn die Bedingungen im Skript erfüllt sind:

function resetHeadings() { 
    var body = DocumentApp.getActiveDocument().getBody(); 

    // store an object with default object attributes you can apply later 
    var defaults = { 
    "Heading 1": { 
     FONT_SIZE: 20, 
     FONT_FAMILY: 'Arial', 
    }, 
    "Heading 2": { 
     FONT_SIZE: 16, 
     FONT_FAMILY: 'Arial' 
    } 
    }; 

    var pars = body.getParagraphs(); 

    for(var i in pars) { 
    var props = pars[i].getAttributes(); 
    if(props["HEADING"] == "Heading 1") { 

     // reset the Heading to normal 
     props[i].setHeading(DocumentApp.ParagraphHeading.NORMAL); 

     // Then, spoof with your stored defaults 
     // You can chain .setAttributes() with the line above. Shown separate for clarity. 
     props[i].setAttributes(defaults["Heading 1"]); 
    } 
    } 
} 

Es ist nicht perfekt, aber es wird Sie das Ergebnis erhalten Sie beschreiben . Sie können einen Case/Switch-Test für jede Überschrift anstelle mehrerer if-Anweisungen verwenden.

Verwandte Themen