https://developers.google.com/apps-script/reference/base/mime-type
function msWordExt() {
var ss = SpreadsheetApp.openById('1MUwH0Cm1cwHcTWSCGPp2SePbzs_4QQmtjwOEWOrOkMw');
var sheetName = ss.getSheetByName("Sheet2");
var get = sheetName.getRange(2,3).getValue();
var folder = DriveApp.getFolderById("1rsicZccurujGp5Ye5HUecBIAPf3_h5Pc");
folder.createFile("MS Word",get,MimeType.MICROSOFT_WORD);
}
目标1:当我尝试使用相同的代码来创建Google幻灯片或任何其他Google或Opendocument扩展时,它不起作用。
function msSlidesExt() {
var ss = SpreadsheetApp.openById('1MUwH0Cm1cwHcTWSCGPp2SePbzs_4QQmtjwOEWOrOkMw');
var sheetName = ss.getSheetByName("Sheet2");
var get = sheetName.getRange(2,3).getValue();
var folder = DriveApp.getFolderById("1rsicZccurujGp5Ye5HUecBIAPf3_h5Pc");
folder.createFile("PLAIN TEXT",get,MimeType.GOOGLE_SLIDES);
}
上面的代码不会在我指定的云端硬盘中创建 Google 幻灯片文件。
目标2:如何创建一个函数,而不是硬编码此DriveApp.getFolderById("1rsicZccurujGp5Ye5HUecBIAPf3_h5Pc");
是否有可能使这种动态化?
我相信你的目标如下。
您希望通过放置文本数据从以下 9 种 mimeType 中进行选择来创建文件。
MimeType.GOOGLE_DOCS
MimeType.GOOGLE_SLIDES
MimeType.GOOGLE_SHEETS
MimeType.MICROSOFT_WORD
MimeType.MICROSOFT_POWERPOINT
MimeType.MICROSOFT_EXCEL
MimeType.OPENDOCUMENT_TEXT
MimeType.OPENDOCUMENT_PRESENTATION
MimeType.OPENDOCUMENT_SPREADSHEET
您希望在特定文件夹中创建文件。
为此,这个答案怎么样?
问题和解决方法:
不幸的是,在当前阶段,上述文件无法由DriveApp.createFile()
直接创建。虽然可以将 mimeType 提供给文件,但文件内容与 mimeType 不同。因此,在这种情况下,需要使用解决方法。在此答案中,我想提出以下解决方法。解决方法如下。
- 将文件创建为 Google 文档(文档、幻灯片和电子表格(。
- 通过在云端硬盘 API 中使用导出方法导出 Google 文档,下载具有预期 mimeType 的文件。
- 将导出的文件创建到作为文件的特定文件夹。
示例脚本:
在使用此脚本之前,请在高级 Google 服务中启用云端硬盘 API。并且请在main
函数中设置filename, folderId, mimeType, get
的变量。然后,请运行main
功能。
const createFile = (filename, folderId, mimeType, content) => {
const docs = () => {
const d = DocumentApp.create(filename);
d.getBody().editAsText().setText(content);
d.saveAndClose();
return d.getId();
}
const slides = () => {
const s = SlidesApp.create(filename);
s.getSlides()[0].insertTextBox(content);
s.saveAndClose();
return s.getId();
}
const sheets = () => {
const s = SpreadsheetApp.create(filename);
s.getSheets()[0].getRange("A1").setValue(content);
SpreadsheetApp.flush();
return s.getId();
}
const convert = {
[MimeType.GOOGLE_DOCS]: docs,
[MimeType.GOOGLE_SLIDES]: slides,
[MimeType.GOOGLE_SHEETS]: sheets,
[MimeType.MICROSOFT_WORD]: docs,
[MimeType.MICROSOFT_POWERPOINT]: slides,
[MimeType.MICROSOFT_EXCEL]: sheets,
[MimeType.OPENDOCUMENT_TEXT]: docs,
[MimeType.OPENDOCUMENT_PRESENTATION]: slides,
[MimeType.OPENDOCUMENT_SPREADSHEET]: sheets,
};
const fileId = convert[mimeType]();
if (mimeType.includes("google")) {
Drive.Files.patch({parents: [{id: folderId}]}, fileId);
return fileId;
}
const url = `https://www.googleapis.com/drive/v3/files/${fileId}/export?mimeType=${mimeType}`;
const blob = UrlFetchApp.fetch(url, {headers: {authorization: `Bearer ${ScriptApp.getOAuthToken()}`}}).getBlob();
const id = Drive.Files.insert({title: filename, parents: [{id: folderId}]}, blob);
DriveApp.getFileById(fileId).setTrashed(true);
return id;
}
// Please run this function.
function main() {
var ss = SpreadsheetApp.openById('1MUwH0Cm1cwHcTWSCGPp2SePbzs_4QQmtjwOEWOrOkMw');
var sheetName = ss.getSheetByName("Sheet2");
var get = sheetName.getRange(2,3).getValue();
const filename = "sample";
const folderId = "1rsicZccurujGp5Ye5HUecBIAPf3_h5Pc";
const mimeType = MimeType.GOOGLE_SLIDES;
const fileId = createFile(filename, folderId, mimeType, get);
console.log(fileId);
}
main
函数返回所创建文件的文件 ID。
注意:
- 在此示例脚本中,作为示例案例,文本数据只是放入 Google 文档。因此,请根据您的实际情况进行修改。
引用:
- 高级谷歌服务
- 文件:导出