วิธีแก้ไขข้อผิดพลาด - อาร์กิวเมนต์ไม่ถูกต้อง: file.contentType เมื่อสร้าง Google ชีตใหม่

ฉันกำลังพยายามสร้าง Google ชีตใหม่ในโฟลเดอร์ที่สร้างขึ้น แต่มีปัญหากับประเภทเนื้อหา

ฉันค้นหาข้อผิดพลาดนี้แล้ว แต่ไม่พบสิ่งใดเลย การค้นหาส่วนใหญ่มีข้อผิดพลาด MimeType แต่ฉันไม่คิดว่านั่นคือปัญหา ด้านล่างเป็นรหัสที่ฉันใช้:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var newFolder = DriveApp.getFolderById("MyID").createFolder("New Folder");
newFolder.createFile("myFileName",ss,MimeType.GOOGLE_DOCS);

เมื่อใดก็ตามที่ฉันเรียกใช้สิ่งนี้ในสเปรดชีต ฉันได้รับข้อผิดพลาดต่อไปนี้:

อาร์กิวเมนต์ไม่ถูกต้อง: file.contentType (บรรทัด 3 ไฟล์ "Code")

ฉันได้ลองใช้ "" สำหรับเนื้อหาสำหรับ createFile แล้ว


person Pcud    schedule 02.02.2017    source แหล่งที่มา
comment
คุณต้องการแปลงจากสเปรดชีตเป็นเอกสารหรือไม่ หรือคุณต้องการเพียงแค่สร้างเอกสารใหม่? เนื่องจากในสคริปต์ของคุณ ดูเหมือนว่าคุณต้องการแปลงหรือนำเข้าข้อมูลสเปรดชีตไปยัง Google doc   -  person Tanaike    schedule 02.02.2017
comment
โอ้ว้าว. ฉันไม่อยากจะเชื่อเลยว่าฉันไม่ได้ตระหนักถึงสิ่งนั้น ฉันตั้งใจจะสร้างสเปรดชีตใหม่ ฉันเปลี่ยน MimeType เป็น .GOOGLE_SHEETS แล้ว แต่ยังคงแสดงข้อผิดพลาดเดิม   -  person Pcud    schedule 03.02.2017


คำตอบ (3)


แล้วตัวอย่างต่อไปนี้ล่ะ? ฉันไม่สามารถใช้ MimeType ของ GOOGLE_SHEETS และ GOOGLE_DOCS ได้เช่นกัน ฉันไม่รู้ว่าทำไม ดังนั้นฉันจึงเสนอให้ใช้ SpreadsheetApp.create() การไหลมีดังนี้

  1. สร้างสเปรดชีตโดยใช้ SpreadsheetApp.create()

  2. เพิ่มข้อมูลโฟลเดอร์ปลายทางลงในสเปรดชีต

  3. ลบข้อมูลโฟลเดอร์ต้นฉบับออกจากสเปรดชีต

ด้วยวิธีนี้ คุณสามารถสร้างสเปรดชีตไปยังโฟลเดอร์ที่คุณต้องการได้

สคริปต์:

var sheetfile = "myFileName";
var destfolder = "MyID";
var sheet = SpreadsheetApp.create(sheetfile);
var file = DriveApp.getFileById(sheet.getId());
var destfolder = DriveApp.getFolderById(destfolder).addFile(file);
var docfile = file.getParents().next().removeFile(file);

อัปเดต: 25 พฤศจิกายน 2020

เมื่อวันที่ 27 กรกฎาคม 2020 มีการเพิ่มวิธีการ moveTo(destination) และวิธีการของ addFile และ removeFile จะเลิกใช้แล้ว อ้างอิง ดังนั้น เมื่อใช้วิธีการ moveTo(destination) สำหรับสคริปต์ด้านบนจะเป็นดังนี้

var sheetfile = "myFileName";
var destfolder = "MyID";
var sheet = SpreadsheetApp.create(sheetfile);
var file = DriveApp.getFileById(sheet.getId());
var destfolder = DriveApp.getFolderById(destfolder);
var docfile = file.moveTo(destfolder);
  • เมื่อใช้วิธีการ Files: insert of Drive API ก็สามารถใช้สคริปต์ต่อไปนี้ได้เช่นกัน อ้างอิง

      var sheetfile = "myFileName";
      var destfolder = "MyID";
      Drive.Files.insert({title: sheetfile, mimeType: MimeType.GOOGLE_SHEETS, parents: [{id: destfolder}]});
    
person Tanaike    schedule 03.02.2017
comment
จากการอัปเดต Google ไดรฟ์ในวันที่ 30 กันยายน 2020 ซึ่งทุกออบเจ็กต์สามารถมีพาเรนต์เดียวได้ - ฉันไม่แน่ใจว่าจะใช้งานได้หรือไม่ - var docfile = file.getParents().next().removeFile(file); - person Moiz Tankiwala; 25.11.2020
comment
@Moiz Tankiwala ขอบคุณสำหรับความคิดเห็นของคุณ ในระยะปัจจุบัน ดูเหมือนว่าสคริปต์ข้างต้นใช้งานได้ แต่จากความคิดเห็นของคุณ ฉันได้เพิ่มรูปแบบอื่นในคำตอบของฉัน - person Tanaike; 25.11.2020

วิธีนี้ใช้ได้กับฉัน

function myFunction() {
var sheetfile = "myfilename";
var destfolder = "MYFOLDER";
var sheet = SpreadsheetApp.create(sheetfile);
var file = DriveApp.getFileById(sheet.getId());
var destfolder = DriveApp.getFoldersByName(destfolder).next();
var docfile = file.moveTo(destfolder);
}

โดยไม่ต้องถัดไป(); มันไม่ทำงานสำหรับฉัน

person bedji    schedule 10.03.2021

ฉันประสบปัญหาเดียวกันและแทนที่จะพยายามสร้างไฟล์ทันที ฉันคิดว่าจะมีโซลูชันที่สะอาดกว่า โดยที่ฉันเก็บสเปรดชีตว่างไว้หนึ่งสเปรดชีต (เพียงสร้างสเปรดชีตในไดรฟ์และตั้งชื่อเป็นเทมเพลต) เป็นเทมเพลตที่จะทำ คัดลอกออกจาก

var templateFileId = asfashfkhsfkhfkhkashf; //นี่คือสิ่งที่คุณต้องกำหนดให้เป็นค่าคงที่ var DestinationFolderId = sdfashfkhaskf var newSpreadsheet = DriveApp.getFileById(templateFileId).makeCopy(NewSpreadsheet, DestinationFolderId);

person Moiz Tankiwala    schedule 25.11.2020