Initial Commit, basic tranclusion working
This commit is contained in:
commit
1dcb7f16fe
1
.clasp.json
Normal file
1
.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1KlR8cKW5jd9Fu-soBwK1dljmLi0XcHMIoYeUbnLXFZKMme-EaMqubaIk"}
|
1
.claspignore
Normal file
1
.claspignore
Normal file
@ -0,0 +1 @@
|
||||
.#*
|
9
.editorconfig
Normal file
9
.editorconfig
Normal file
@ -0,0 +1,9 @@
|
||||
# EditorConfig is awesome: https://EditorConfig.org
|
||||
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/node_modules/
|
||||
/package-lock.json
|
3
.prettierrc
Normal file
3
.prettierrc
Normal file
@ -0,0 +1,3 @@
|
||||
trailingComma: es5
|
||||
singleQuote: true
|
||||
jsxBracketSameLine: true
|
76
Code.ts
Normal file
76
Code.ts
Normal file
@ -0,0 +1,76 @@
|
||||
function onOpen() {
|
||||
const ui = SpreadsheetApp.getUi();
|
||||
ui.createMenu('test')
|
||||
.addItem('test1', 'test')
|
||||
.addToUi();
|
||||
}
|
||||
|
||||
function copyElement(
|
||||
source_element: GoogleAppsScript.Document.Element,
|
||||
dest: GoogleAppsScript.Document.Body,
|
||||
index?: number
|
||||
) {
|
||||
const element = source_element.copy();
|
||||
// based on https://stackoverflow.com/questions/6783819/google-app-script-copy-document-page
|
||||
if (element.getType() == DocumentApp.ElementType.PARAGRAPH)
|
||||
if (index) dest.insertParagraph(index, element.asParagraph());
|
||||
else dest.appendParagraph(element.asParagraph());
|
||||
else if (element.getType() == DocumentApp.ElementType.TABLE)
|
||||
if (index) dest.insertTable(index, element.asTable());
|
||||
else dest.appendTable(element.asTable());
|
||||
else if (element.getType() == DocumentApp.ElementType.LIST_ITEM)
|
||||
if (index) dest.insertListItem(index, element.asListItem());
|
||||
else dest.appendListItem(element.asListItem());
|
||||
else if (element.getType() == DocumentApp.ElementType.INLINE_IMAGE)
|
||||
if (index) dest.insertImage(index, element.asInlineImage());
|
||||
else dest.appendImage(element.asInlineImage());
|
||||
else
|
||||
throw new Error(
|
||||
"According to the doc this type couldn't appear in the body: " +
|
||||
element.getType()
|
||||
);
|
||||
}
|
||||
|
||||
function copyBody(
|
||||
source: GoogleAppsScript.Document.Body,
|
||||
dest: GoogleAppsScript.Document.Body,
|
||||
index?: number
|
||||
) {
|
||||
var totalElements = source.getNumChildren();
|
||||
for (var j = 0; j < totalElements; ++j) {
|
||||
if (index) copyElement(source.getChild(j), dest, index + j);
|
||||
else copyElement(source.getChild(j), dest);
|
||||
}
|
||||
}
|
||||
|
||||
function test() {
|
||||
const cell = SpreadsheetApp.getActive().getCurrentCell();
|
||||
const template = DocumentApp.openById(
|
||||
'1V0uMuM80BGpjpdt1AmuzlU97tDI_u-y2rOfdl4tkqmc'
|
||||
);
|
||||
|
||||
const source_doc = DocumentApp.openById(
|
||||
'1tB9--ilbfDixuQAEMk0_D6KqNFToQzs-au6NiotCH5M'
|
||||
);
|
||||
const out_doc = template; // TODO: make a copy of template, and write to that
|
||||
|
||||
const insert_point = out_doc
|
||||
.getBody()
|
||||
.findText('{{test}}')
|
||||
?.getElement();
|
||||
|
||||
if (insert_point) {
|
||||
// find the parent element that is a direct descendant of the body
|
||||
let parent = insert_point;
|
||||
while (
|
||||
parent.getParent().getType() != DocumentApp.ElementType.BODY_SECTION
|
||||
) {
|
||||
parent = parent.getParent();
|
||||
}
|
||||
const idx = out_doc.getBody().getChildIndex(parent);
|
||||
|
||||
// insert with index 0 is an append, for some reason
|
||||
copyBody(source_doc.getBody(), out_doc.getBody(), idx + 1);
|
||||
out_doc.getBody().removeChild(parent);
|
||||
}
|
||||
}
|
7
appsscript.json
Normal file
7
appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
Reference in New Issue
Block a user