csv 使用Google云端硬盘API更新电子表格

5n0oy7gb  于 2022-12-06  发布在  Go
关注(0)|答案(1)|浏览(165)

我想更新一个驱动器文件夹中的现有电子表格,但在实现http请求时遇到了问题。我按照文档进行了操作,并能够更新电子表格,但我尝试以JSON发送的请求正文总是转换为CSV。这导致JSON部分根据当前逗号分布到各个单元格中。
例如,cell 1 =“{key 1”和cell 2 =“value 1”等等。但是,这使我无法指定工作表的样式和单元格中的值。
我发现了发送多部分请求的可能性,然而,结果是相同的。现在,第一个边界字符串和初始信息,直到第一个逗号被包括在第一个单元格中,其余的是根据现有的逗号划分的。
我想做的是发送一个HTTP请求,其主体由JSON文件组成,该JSON文件包含Google Sheets API中描述的电子表格的指定信息,但无法找到我当前的错误。即使mimetype设置为"application/vnd.google-apps.spreadsheet",json也总是转换为csv。

cnjp1d6j

cnjp1d6j1#

mimetype“应用程序/vnd.google-apps.电子表格”

如果问题文件是一个实际的google sheets文件类型。例如mime类型是"application/vnd.google-apps.spreadsheet"。那么你应该通过google sheets api来更新它。其他明智的通过google drive更新它,你将需要加载文件本身到一个文件流,然后上传它的方式。你不能挑选什么部分上传与驱动器它的全部或没有。驱动器不't没有能力格式化像单元格和stuch这样的东西,它只是上传原始文件数据。

Mime类型“文本/纯文本”

如果该文件实际上是csv文件,因此mime类型是"text/plain",那么您可以通过将文本转换为流直接更新文本。
你还没有说你使用的是什么语言,所以这里是我的C#示例。代码是从How to upload to Google Drive API from memory with C#中截取的

var uploadString = "Test";
var fileName = "ploadFileString.txt";
// Upload file Metadata
var fileMetadata = new Google.Apis.Drive.v3.Data.File()
    {
     Name = fileName,
     Parents = new List<string>() { "1R_QjyKyvET838G6loFSRu27C-3ASMJJa" }  // folder to upload the file to
     };

var fsSource = new MemoryStream(Encoding.UTF8.GetBytes(uploadString ?? ""));

string uploadedFileId;
            
// Create a new file, with metadata and stream.
var request = service.Files.Create(fileMetadata, fsSource, "text/plain");
request.Fields = "*";
var results = await request.UploadAsync(CancellationToken.None);

if (results.Status == UploadStatus.Failed)
   {
   Console.WriteLine($"Error uploading file: {results.Exception.Message}");
   }
// the file id of the new file we created
uploadedFileId = request.ResponseBody?.Id;

相关问题