Google apps script 使用Google脚本分离Google文档

Google apps script 使用Google脚本分离Google文档,google-apps-script,google-docs,Google Apps Script,Google Docs,我有一个谷歌文档和几个页面。我希望通过应用程序使用的分页符将其分开,并将每个页面保存到单独的文件中。值得注意的是,此文档中还包含图像 无论如何,我已经看过google脚本提供的功能,它似乎没有任何方便的功能来按页面分割文档。到目前为止,我得到的是: var current = DocumentApp.getActiveDocument(); var body = current.getBody(); var paragraphs = body.getParagraphs(); 因此,我能够深入

我有一个谷歌文档和几个页面。我希望通过应用程序使用的分页符将其分开,并将每个页面保存到单独的文件中。值得注意的是,此文档中还包含图像

无论如何,我已经看过google脚本提供的功能,它似乎没有任何方便的功能来按页面分割文档。到目前为止,我得到的是:

var current = DocumentApp.getActiveDocument();
var body = current.getBody();
var paragraphs = body.getParagraphs();
因此,我能够深入到我的文档中并获得段落,但我不确定从这里可以走到哪里。我的思考过程是获取段落,将它们全部附加到一个字符串中,然后在分页符处拆分。从那里,我可以轻松创建新文档并保存它们。但是,一旦我有了这些段落,我就看不到一种方法来获得分页符。还有,图像是如何处理的?每个图像都在自己的页面上,那么它们是否都是自己的段落


因此,我在这个问题上主要关心的是如何将文档按页分解。这方面的任何帮助都将是非常好的。

好吧,这花了相当多的时间,但我想出了一些我需要的东西:

function splitAndSave()
{

    var folder = getFolderName();
    if (folder == null)
    {
    return false;
    }

var PB  = Doc().ElementType.PAGE_BREAK;

var doc = Doc().getActiveDocument();
var body = doc.getBody();
var par = body.getParagraphs();

var curPage = 1;

    // Naming scheme for files
var page = Doc().create("pg" + curPage);

for (var i = 0; i < par.length; i++)
{
    var hasbreak = false;
    for (var j = 0; j < par[i].getNumChildren(); j++)
    {
        var child = par[i].getChild(j);
        if (child.getType() == PB)
        {
            hasbreak = true;
            break;
        }
    }

    if (!hasbreak)
    {
        var seppar = par[i].copy();
        page.getBody().appendParagraph(seppar);
    }
    else
    {
        var par1 = par[i].copy();
        var par2 = par[1].copy();

        var hitbreak = false;
        for (var i1 = 0; i1 < par1.getNumChildren(); i1++)
        {
            if (par1.getChild(i1).getType() == PB)
            {
                hitbreak = true;
            }

            if (hitbreak)
            {
                par1.removeChild(par1.getChild(i1));
            }
        }

        var hitbreak = false;
        for (var i1 = 0; i1 < par2.getNumChildren(); i1++)
        {
            if (par2.getChild(i1).getType() == PB)
            {
                hitbreak = true;
            }

            if (!hitbreak || par2.getChild(i1).getType() == PB)
            {
                par2.removeChild(par2.getChild(i1));
            }
        }

        page.getBody().appendParagraph(par1);

        // Add file to folder
        page.saveAndClose();

        var file = DocsList.getFileById(page.getId());
        file.addToFolder(folder);

        // Need this step or your file ends up in two places
        file.removeFromFolder(DocsList.getRootFolder());

        curPage++;
                    // Naming scheme for files
        page = Doc().create("pg" + curPage);

        page.getBody().appendParagraph(par2);
    }
}

page.saveAndClose();

var file = DocsList.getFileById(page.getId());
file.addToFolder(folder);

// Need this step or your file ends up in two places
file.removeFromFolder(DocsList.getRootFolder());
Ui().alert("Saving process complete");
}
其他助手:

function Doc()
{
return DocumentApp;
}

function Ui()
{
return Doc().getUi();
}
这将使用“pg”+递增数字的命名约定按页面分解Google文档。它还将它们放在提示符中指定的文件夹中

这里需要注意的是,在您计划拆分的文档上,需要在每一页的末尾放置分页符。因此,基本上,当您进入下一页时,按CTRL+ENTER。这没什么大不了的,事实上,反复按enter键直到进入新页面要快得多


哦,而且相当慢。这对我来说没什么大不了的,因为我只需要偶尔使用它。

感谢Toncoso提供了一个非常实用的工具。谷歌改变了一切,所以我更新了DriveApp。虽然速度仍然很慢,但它可以工作

//all thanks to Toncoso who posted this on stack overflow
//https://stackoverflow.com/questions/22362504/use-google-script-to-separate-a-google-doc
//Updated 6/1/2018 for driveapp

function splitAndSave()
{
    var folder = getFolderName();
    if (folder == null)
    {
    return false;
    }

var PB  = Doc().ElementType.PAGE_BREAK;

var doc = Doc().getActiveDocument();
var body = doc.getBody();
var par = body.getParagraphs();

var curPage = 1;

    // Naming scheme for files
var page = Doc().create("pg" + curPage);

for (var i = 0; i < par.length; i++)
{
    var hasbreak = false;
    for (var j = 0; j < par[i].getNumChildren(); j++)
    {
        var child = par[i].getChild(j);
        if (child.getType() == PB)
        {
            hasbreak = true;
            break;
        }
    }

    if (!hasbreak)
    {
        var seppar = par[i].copy();
        page.getBody().appendParagraph(seppar);
    }
    else
    {
        var par1 = par[i].copy();
        var par2 = par[1].copy();

        var hitbreak = false;
        for (var i1 = 0; i1 < par1.getNumChildren(); i1++)
        {
            if (par1.getChild(i1).getType() == PB)
            {
                hitbreak = true;
            }

            if (hitbreak)
            {
                par1.removeChild(par1.getChild(i1));
            }
        }

        var hitbreak = false;
        for (var i1 = 0; i1 < par2.getNumChildren(); i1++)
        {
            if (par2.getChild(i1).getType() == PB)
            {
                hitbreak = true;
            }

            if (!hitbreak || par2.getChild(i1).getType() == PB)
            {
                par2.removeChild(par2.getChild(i1));
            }
        }

        page.getBody().appendParagraph(par1);

        // Add file to folder
        page.saveAndClose();

        var file = DriveApp.getFileById(page.getId());
        DriveApp.getFolderById(folder.getId()).addFile(file);
        //file.addToFolder(folder);


        // Need this step or your file ends up in two places
        DriveApp.getRootFolder().removeFile(file);

        curPage++;
                    // Naming scheme for files
        page = Doc().create("pg" + curPage);

        page.getBody().appendParagraph(par2);
    }
}

page.saveAndClose();

var file = DriveApp.getFileById(page.getId());
        DriveApp.getFolderById(folder.getId()).addFile(file);

// Need this step or your file ends up in two places
DriveApp.getRootFolder().removeFile(file);
Ui().alert("Saving process complete");
}

function getFolderName()
{
var response = Ui().prompt("Enter a folder name");
if (response.getSelectedButton() == Ui().Button.OK) 
{
    var folder = DriveApp.createFolder(response.getResponseText());
    return folder;
} 
else 
{
    return null;
}
}

function Doc()
{
return DocumentApp;
}

function Ui()
{
return Doc().getUi();
}
//感谢Toncoso在堆栈溢出上发布了此消息
//https://stackoverflow.com/questions/22362504/use-google-script-to-separate-a-google-doc
//driveapp于2018年6月1日更新
函数splitAndSave()
{
var folder=getFolderName();
如果(文件夹==null)
{
返回false;
}
var PB=Doc().ElementType.PAGE_BREAK;
var doc=doc().getActiveDocument();
var body=doc.getBody();
VaR PAR= Boo.GeTebug();
var-curPage=1;
//文件命名方案
var page=Doc().create(“pg”+curPage);
对于(var i=0;i<PAR.长度;I++)
{
var hasbreak=false;
对于(var j=0;j
//all thanks to Toncoso who posted this on stack overflow
//https://stackoverflow.com/questions/22362504/use-google-script-to-separate-a-google-doc
//Updated 6/1/2018 for driveapp

function splitAndSave()
{
    var folder = getFolderName();
    if (folder == null)
    {
    return false;
    }

var PB  = Doc().ElementType.PAGE_BREAK;

var doc = Doc().getActiveDocument();
var body = doc.getBody();
var par = body.getParagraphs();

var curPage = 1;

    // Naming scheme for files
var page = Doc().create("pg" + curPage);

for (var i = 0; i < par.length; i++)
{
    var hasbreak = false;
    for (var j = 0; j < par[i].getNumChildren(); j++)
    {
        var child = par[i].getChild(j);
        if (child.getType() == PB)
        {
            hasbreak = true;
            break;
        }
    }

    if (!hasbreak)
    {
        var seppar = par[i].copy();
        page.getBody().appendParagraph(seppar);
    }
    else
    {
        var par1 = par[i].copy();
        var par2 = par[1].copy();

        var hitbreak = false;
        for (var i1 = 0; i1 < par1.getNumChildren(); i1++)
        {
            if (par1.getChild(i1).getType() == PB)
            {
                hitbreak = true;
            }

            if (hitbreak)
            {
                par1.removeChild(par1.getChild(i1));
            }
        }

        var hitbreak = false;
        for (var i1 = 0; i1 < par2.getNumChildren(); i1++)
        {
            if (par2.getChild(i1).getType() == PB)
            {
                hitbreak = true;
            }

            if (!hitbreak || par2.getChild(i1).getType() == PB)
            {
                par2.removeChild(par2.getChild(i1));
            }
        }

        page.getBody().appendParagraph(par1);

        // Add file to folder
        page.saveAndClose();

        var file = DriveApp.getFileById(page.getId());
        DriveApp.getFolderById(folder.getId()).addFile(file);
        //file.addToFolder(folder);


        // Need this step or your file ends up in two places
        DriveApp.getRootFolder().removeFile(file);

        curPage++;
                    // Naming scheme for files
        page = Doc().create("pg" + curPage);

        page.getBody().appendParagraph(par2);
    }
}

page.saveAndClose();

var file = DriveApp.getFileById(page.getId());
        DriveApp.getFolderById(folder.getId()).addFile(file);

// Need this step or your file ends up in two places
DriveApp.getRootFolder().removeFile(file);
Ui().alert("Saving process complete");
}

function getFolderName()
{
var response = Ui().prompt("Enter a folder name");
if (response.getSelectedButton() == Ui().Button.OK) 
{
    var folder = DriveApp.createFolder(response.getResponseText());
    return folder;
} 
else 
{
    return null;
}
}

function Doc()
{
return DocumentApp;
}

function Ui()
{
return Doc().getUi();
}