2016-11-21 72 views

回答

1

在没有该API的情况下,我不会建议这是一个好的这样做的方法。其实它是可怕的。但在这里。如果你绝对必须这样做。这可能也有点不妥。

步骤是:

  1. 导出的演示文稿,通​​过驱动器API,为PowerPoint文件.PPTX
  2. 解压缩文件 - 它是包含与XML文件的目录结构的zip文件
  3. 确定演讲者备注文件并按照您的要求处理它们(例如,提取所有文本或者处理XML等)。

丑陋的权利?下面是Google Apps脚本的例子:

  1. 在高级服务的脚本(资源>高级谷歌服务)内启用驱动API

    function example() { 
        // Print out the speaker notes 
        Logger.log(getNotes('123abc......asd'); 
    } 
    
    // Returns an array of strings, one string per slide 
    // representing the speaker notes. 
    function getNotes(presentationId) { 
        //DriveApp.createFile(); 
        var notesRegex = /ppt\/notesSlides\/notesSlide\d+\.xml/; 
    
        var url = 'https://www.googleapis.com/drive/v2/files/' + presentationId + 
        '/export?mimeType=application%2Fvnd.openxmlformats-officedocument.presentationml.presentation'; 
        var options = { 
        headers: { 
         Authorization : 'Bearer ' + ScriptApp.getOAuthToken() 
        } 
        }; 
        var response = UrlFetchApp.fetch(url, options); 
    
        var zipBlob = Utilities.newBlob(response.getContent(), 'application/zip'); 
        var data = Utilities.unzip(zipBlob); 
    
        var notes = []; 
        for (var i = 0; i < data.length; i++) { 
        if (notesRegex.test(data[i].getName())) { 
    
         // Example simply extracts text from speaker notes 
         // You could do something more complex. 
         notes.push(extractTextFromXml(data[i].getDataAsString())); 
        } 
        } 
        return notes; 
    } 
    
    function extractTextFromXml(xml) { 
        var doc = XmlService.parse(xml); 
        var root = doc.getRootElement(); 
        var ns = root.getNamespace('a'); 
    
        var text = []; 
    
        function walkNode(node) { 
        if (node.getText()) { 
         text.push(node.getText()); 
        } 
        var children = node.getChildren(); 
        if (children.length) { 
         children.forEach(function(child) { 
         walkNode(child); 
         }); 
        } 
        } 
        walkNode(root); 
        return text.join('\n'); 
    }