【问题标题】:Create a file inside a folder using MimeType inside Google Drive using AppScript使用 AppScript 在 Google Drive 中使用 MimeType 在文件夹中创建文件
【发布时间】:2026-02-19 00:10:02
【问题描述】:

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"); 是否有可能使这种动态化?

【问题讨论】:

    标签: google-apps-script google-sheets google-drive-api


    【解决方案1】:

    我相信你的目标如下。

    • 您想通过从以下 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. 通过使用 Drive API 中的导出方法导出 Google 文档,下载具有预期 mimeType 的文件。
    3. 将导出的文件作为文件创建到特定文件夹中。

    示例脚本:

    在您使用此脚本之前,please enable Drive API at Advanced Google services。并且请在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 Docs 中。所以请根据您的实际情况进行修改。

    参考资料:

    【讨论】:

    • 谢谢你的回答,但这对我来说太复杂了......我正在做不同的方式。