将超过 1000 行写入 Google Sheet
Writing more than 1000 rows into Google Sheet
我必须将 1000 多行写入 Google sheet,因此我需要增加行数(我得到了 Google.Apis.Requests.RequestError 当我尝试写入 4640 行时)。
搜索 Whosebug 网站得到的信息告诉我我需要使用 UpdateSheetPropertiesRequest 或 InsertDimensionRequest 并创建一个新的请求在同一个 Spreadsheets.BatchUpdate 调用中。
基于 Whosebug 中的 Python 示例,我设置了 InsertDimensionRequest 实例的属性并将它们包含在我现有的代码中(= Ian Preston 公开可用的 C# 代码).
代码如下所示:
public void AddCells(GoogleSheetParameters googleSheetParameters, List<GoogleSheetRow> rows)
{
var requests = new BatchUpdateSpreadsheetRequest { Requests = new List<Request>() }; //Existing code
int sheetId = GetSheetId(_sheetsService, _spreadsheetId, googleSheetParameters.SheetName); //Existing code
InsertDimensionRequest insertDimensionRequest = new InsertDimensionRequest(); //Added code
insertDimensionRequest.Range.SheetId = sheetId; //Added code
insertDimensionRequest.Range.Dimension = "ROWS"; //Added code
insertDimensionRequest.Range.StartIndex = 999; //Added code
insertDimensionRequest.Range.EndIndex = 6999; //Added code
insertDimensionRequest.InheritFromBefore = false; //Added code
var request = new Request { UpdateCells = new UpdateCellsRequest { Start = gc, Fields = "*" } }; //Existing code
//some code here
var request1 = new Request { ???????? }; //code to be added - how should the request look like?
requests.Requests.Add(request); //Existing code
requests.Requests.Add(request1); //Added code
}
但我不知道如何在 C# 中创建新请求。
我的问题是:如何创建这样的请求(在我的代码中命名为 request1)?
我已经找到答案了。
DimensionRange dr = new DimensionRange
{
SheetId = sheetId,
Dimension = "ROWS",
StartIndex = 999,
EndIndex = 6999 // adding extra 6000 rows
};
var request1 = new Request { InsertDimension = new InsertDimensionRequest { Range = dr, InheritFromBefore = false } };
然后(请求的顺序很重要):
requests.Requests.Add(request1);
requests.Requests.Add(request);
编辑 01-06-2022: 可以从 GitHub 下载使用上述片段的完整代码 - 请参阅那里的 GoogleSheets 项目。
也可以使用userEnteredValue
。这会清除 sheet 并且对我来说莫名其妙地将行数设置为未知值,但至少设置为 4640.
编辑 31-05-2022: 如果您对 userEnteredValue
的用法了解更多,请随时详细说明此事。
GridRange dr2 = new GridRange
{
SheetId = sheetId
};
var request2 = new Request { UpdateCells = new UpdateCellsRequest { Range = dr2, Fields = "userEnteredValue" } };
然后(请求的顺序可能也很重要):
requests.Requests.Add(request2);
requests.Requests.Add(request);
我必须将 1000 多行写入 Google sheet,因此我需要增加行数(我得到了 Google.Apis.Requests.RequestError 当我尝试写入 4640 行时)。
搜索 Whosebug 网站得到的信息告诉我我需要使用 UpdateSheetPropertiesRequest 或 InsertDimensionRequest 并创建一个新的请求在同一个 Spreadsheets.BatchUpdate 调用中。
基于 Whosebug 中的 Python 示例,我设置了 InsertDimensionRequest 实例的属性并将它们包含在我现有的代码中(= Ian Preston 公开可用的 C# 代码).
代码如下所示:
public void AddCells(GoogleSheetParameters googleSheetParameters, List<GoogleSheetRow> rows)
{
var requests = new BatchUpdateSpreadsheetRequest { Requests = new List<Request>() }; //Existing code
int sheetId = GetSheetId(_sheetsService, _spreadsheetId, googleSheetParameters.SheetName); //Existing code
InsertDimensionRequest insertDimensionRequest = new InsertDimensionRequest(); //Added code
insertDimensionRequest.Range.SheetId = sheetId; //Added code
insertDimensionRequest.Range.Dimension = "ROWS"; //Added code
insertDimensionRequest.Range.StartIndex = 999; //Added code
insertDimensionRequest.Range.EndIndex = 6999; //Added code
insertDimensionRequest.InheritFromBefore = false; //Added code
var request = new Request { UpdateCells = new UpdateCellsRequest { Start = gc, Fields = "*" } }; //Existing code
//some code here
var request1 = new Request { ???????? }; //code to be added - how should the request look like?
requests.Requests.Add(request); //Existing code
requests.Requests.Add(request1); //Added code
}
但我不知道如何在 C# 中创建新请求。
我的问题是:如何创建这样的请求(在我的代码中命名为 request1)?
我已经找到答案了。
DimensionRange dr = new DimensionRange
{
SheetId = sheetId,
Dimension = "ROWS",
StartIndex = 999,
EndIndex = 6999 // adding extra 6000 rows
};
var request1 = new Request { InsertDimension = new InsertDimensionRequest { Range = dr, InheritFromBefore = false } };
然后(请求的顺序很重要):
requests.Requests.Add(request1);
requests.Requests.Add(request);
编辑 01-06-2022: 可以从 GitHub 下载使用上述片段的完整代码 - 请参阅那里的 GoogleSheets 项目。
也可以使用userEnteredValue
。这会清除 sheet 并且对我来说莫名其妙地将行数设置为未知值,但至少设置为 4640.
编辑 31-05-2022: 如果您对 userEnteredValue
的用法了解更多,请随时详细说明此事。
GridRange dr2 = new GridRange
{
SheetId = sheetId
};
var request2 = new Request { UpdateCells = new UpdateCellsRequest { Range = dr2, Fields = "userEnteredValue" } };
然后(请求的顺序可能也很重要):
requests.Requests.Add(request2);
requests.Requests.Add(request);