Google Sheets API:创建电子表格或将电子表格移动到文件夹中
Posted
技术标签:
【中文标题】Google Sheets API:创建电子表格或将电子表格移动到文件夹中【英文标题】:Google Sheets API: Create or move Spreadsheet into Folder 【发布时间】:2017-08-13 19:40:57 【问题描述】:是否可以在指定文件夹中创建电子表格,还是必须使用 Drive API 之后才能移动它?
【问题讨论】:
您必须使用 Drive API。 【参考方案1】:取决于您要如何使用以及如何创建电子表格,可以像这样创建电子表格。
function create_ss_in_folder(folder, name)
var ss = SpreadsheetApp.create(name);
var id = ss.getId();
var file = DriveApp.getFileById(id);
var folder = get_folder_by_name(folder);
folder.addFile(file);
DriveApp.getRootFolder().removeFile(file);
return id;
再一次没有太多信息,我不知道当有编程方式时,你为什么要手动创建电子表格。
一些有用的链接:
https://developers.google.com/apps-script/reference/drive/folder
https://developers.google.com/apps-script/advanced/drive
更新:
//Move it to desired folder
var fileID = 'Your file ID'
var folderID = 'Folder ID'
var file = DriveApp.getFileById(fileID).getName()
var folder = DriveApp.getFolderById(folderID)
var newFile = file.makeCopy(file, folder)
// This will remove it from root.
DriveApp.getFileById(fileID).setTrashed(true)
【讨论】:
我使用 Google Sheet API v4 和 nodejs 来创建电子表格。我的想法是,有一种方法可以定义一个目标文件夹,应该在其中创建工作表。 是的,你可以。但是你需要先创建它,然后在应对后删除它。 好吧,这就是我坚持的,会试试这个!谢谢!【参考方案2】:我有点晚了,但我发现的方式不需要复制/删除文件。您只需删除并添加父母。我的代码是 Ruby 而不是 JS,但我确信存在类似的东西。
file = service.get_file(file_id,fields: 'parents')
service.update_file(
file_id,
file
remove_parents: file.parents,
add_parents: new_folder_id,
fields: 'id,parents'
)
在搜索drive api docs 几分钟后,我发现下面的代码让 Node.JS 将文件移动到特定文件夹中。希望这会有所帮助。
fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ'
folderId = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E'
// Retrieve the existing parents to remove
drive.files.get(
fileId: fileId,
fields: 'parents'
, function(err, file)
if (err)
// Handle error
console.log(err);
else
// Move the file to the new folder
var previousParents = file.parents.join(',');
drive.files.update(
fileId: fileId,
addParents: folderId,
removeParents: previousParents,
fields: 'id, parents'
, function(err, file)
if(err)
// Handle error
else
// File moved.
);
);
【讨论】:
【参考方案3】:@ukaric 给出的方法的略微修改版本。这会在与当前电子表格相同的文件夹中创建一个新表单(可以是您需要的任何文档类型)。这也可以用于移动文件,然后只需将创建部分替换为获取对目标文件的引用即可。
function createInCurrentFolder()
// Create a new form in drive root
var form = FormApp.create("New_Form");
var formFile = DriveApp.getFileById(form.getId())
// Get the parent folders of the open document
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssFile = DriveApp.getFileById(ss.getId());
var ssParents = ssFile.getParents();
// Check if we have a parent and
// assume the first parent to be the current folder
if (ssParents.hasNext())
var parentFolder = ssParents.next();
// Check for root folder
if (parentFolder.getId() == DriveApp.getRootFolder().getId()) return;
// Add the created form to current folder
// and remove it from root folder
parentFolder.addFile(formFile);
DriveApp.removeFile(formFile);
【讨论】:
【参考方案4】:使用驱动 API 创建一个空工作表并使用工作表 api 打开它:
function getClient()
$client = new \Google_Client();
putenv(
'GOOGLE_APPLICATION_CREDENTIALS='.__DIR__."/config/google-creds.json"
);
$client = new \Google_Client();
$client->setScopes(
[
\Google_Service_Drive::DRIVE,
\Google_Service_Storage::CLOUD_PLATFORM,
'https://www.googleapis.com/auth/spreadsheets',
]
);
$client->useApplicationDefaultCredentials();
return $client;
// Get the API client and construct the service object.
$client = getClient();
$service = new Google_Service_Drive($client);
$ROOT_FOLDER_ID='you-must-set-this-to-your-folder-id';
// create the empty sheet:
$googleServiceDriveDriveFile = new \Google_Service_Drive_DriveFile();
$googleServiceDriveDriveFile->setMimeType(
'application/vnd.google-apps.spreadsheet')
;
$googleServiceDriveDriveFile->setName('Test');
$googleServiceDriveDriveFile->setParents([$ROOT_FOLDER_ID]);
$res = $service->files->create($googleServiceDriveDriveFile);
// print the id of the file we just made
print 'Created file with id : ' . $res->getId() . "\n";
// Print the names and IDs for up to 10 files.
$optParams = array(
'pageSize' => 10,
'fields' => 'nextPageToken, files(id, name)',
'q' => "'$ROOT_FOLDER_ID' in parents"
);
$results = $service->files->listFiles($optParams);
if (count($results->getFiles()) == 0)
print "No files found.\n";
else
print "Files:\n";
foreach ($results->getFiles() as $file)
printf("%s (%s)\n", $file->getName(), $file->getId());
// fetch the sheet you created and edit it.
$service = new Google_Service_Sheets($client);
$sheet = $service->spreadsheets->get($res->getId());
print "Fetched sheet with name: " . $sheet->getSpreadsheetUrl() . "\n";
【讨论】:
您基于 php 的解决方案回答了原始问题并解决了我遇到的多个问题:invalidContentType 和 wrongUrlForUpload。以上是关于Google Sheets API:创建电子表格或将电子表格移动到文件夹中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Python 中的 API 重命名 Google Sheets 电子表格中的(工作)表?
如何使用 Python 访问(读取、写入)Google Sheets 电子表格?
使用Sheets API v4获取与Google帐户关联的所有电子表格列表
Google Sheets API:如何为可嵌入工作表“发布到网络”?