我正在使用Google Sheets API,但遇到一个不确定的错误,我不确定该如何解决。当我尝试在工作表中插入一行时,它告诉我带有URL且没有更多信息的“执行请求失败”。我之前曾遇到过此问题,并了解了如何创建密钥并获得对工作表的授权访问。我可以很好地编辑预先存在的行,以及读取数据。但不允许插入行。这是堆栈跟踪:
at Google.GData.Client.GDataRequest.Execute()
at Google.GData.Client.Service.EntrySend(Uri feedUri, AtomBase baseEntry, GDataRequestType type, AsyncSendData data)
at Google.GData.Client.Service.Insert(Uri feedUri, AtomEntry newEntry, AsyncSendData data)
at Google.GData.Client.Service.Insert[TEntry](Uri feedUri, TEntry entry)
at Google.GData.Client.Service.Google.GData.Client.IService.Insert(AtomFeed feed, AtomEntry entry)
at Google.GData.Client.Service.Insert[TEntry](AtomFeed feed, TEntry entry)
这是我用于工作表的代码:
public static void WriteDataToLine(SpreadsheetsService service, WorksheetEntry sheet, string keyId, int row,
params string[] data)
{
AtomLink listFeedLink = sheet.Links.FindService(GDataSpreadsheetsNameTable.ListRel, null);
ListQuery query = new ListQuery(listFeedLink.HRef.ToString() + "?key=" + keyId);
ListFeed feed = service.Query(query);
if (feed.Entries.Count > row)
{
// Write over a preexisting row
ListEntry entry = (ListEntry)feed.Entries[row];
for (int i = 0; i < data.Count(); i++)
{
entry.Elements[i].Value = data[i];
}
entry.Update();
}
else
{
// Add a new row
ListEntry entry = new ListEntry();
for (int i = 0; i < data.Count(); i++)
{
entry.Elements.Add(new ListEntry.Custom { Value = data[i] });
}
service.Insert(feed, entry);
}
}
除了URL末尾的扩展名“?key =”(加上keyId)(顺便说一句,在添加此身份验证之前我遇到了相同的错误),我还使用了Key.p12带有X509Certificate2
对象的文件。我发现这两件事有助于验证工作表的访问权限,但仍然无法正常工作。
最后一件事:我设法通过Web浏览器访问错误消息给出的URL。它只是一堆XML,但是使用API时出现错误。
编辑:我卸载了以前拥有的软件包并安装了Google Sheets API v4。我仍然遇到同样的问题,仍然可以编辑行但不能插入行。