使用 AppScript 在 Google 云端硬盘内使用 MimeType 在文件夹中创建一个文件



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 不同。因此,在这种情况下,需要使用解决方法。在此答案中,我想提出以下解决方法。解决方法如下。

  1. 将文件创建为 Google 文档(文档、幻灯片和电子表格(。
  2. 通过在云端硬盘 API 中使用导出方法导出 Google 文档,下载具有预期 mimeType 的文件。
  3. 将导出的文件创建到作为文件的特定文件夹。

示例脚本:

在使用此脚本之前,请在高级 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 文档。因此,请根据您的实际情况进行修改。

引用:

  • 高级谷歌服务
  • 文件:导出