[英]How do I clear all formatting for a specified sheet within a Google Spreadsheet using C#?
我的應用程序當前能夠將Excel電子表格中指定工作表的所有值傳輸到Google表格,並使用ClearValuesRequest
Google工作表中指定工作表的所有值。
如何清除Google Spreadsheet中指定工作表的所有格式(字體樣式,單元格顏色等)? 我花了數小時來瀏覽文檔,但由於無法像使用ClearValuesRequest
一樣簡單明了,因此無法完全理解我需要做的事情。
該代碼的作用范圍僅是清除電子表格中的值。
public string ClearSheetData(string spreadsheetId, string sheetName)
{
try
{
GoogleConnections googleConnections = new GoogleConnections();
new ConnectToGoogle().ConnectToGoogleSheets(googleConnections, ClientSecretFilePath, ApplicationName, UserName);
sheetName = sheetName.Replace("!", "").Replace("$","");
sheetName = string.Concat(sheetName, "!").TrimEnd();
string range = string.Concat(sheetName, "A:ZZ");
ClearValuesRequest requestBody = new ClearValuesRequest();
SpreadsheetsResource.ValuesResource.ClearRequest clearRequest =
googleConnections.sheetsService.Spreadsheets.Values.Clear(requestBody, spreadsheetId, range);
clearRequest.Fields = "*"; //I had hoped that this would clear the formats as well. But it seems to be used as a selector for a partial response.
ClearValuesResponse response = clearRequest.Execute();
return (JsonConvert.SerializeObject(response));
}
catch (Exception e)
{
return string.Concat("Message: ", e.Message, Environment.NewLine, "StackTrace: ", e.StackTrace, Environment.NewLine, "InnerException: ", e.InnerException);
}
}
要回答我自己的問題,這對我有用。 如果有更好的方法,那么我不知道。
經過大量研究,我找不到使用ClearValuesRequest
清除任何格式的選項。 我不得不執行BatchUpdateSpreadsheetRequest
代替。 從那里,我必須使用RepeatCellRequest
並為Range
提供GridRange
以便在其中重復單元格。不幸的是, GridRange
不接受A1表示法,因此我必須創建Helper方法以將A1表示法的范圍轉換為索引。
這將清除/重置整個工作表的所有格式。
ClearFormatting方法
public string ClearFormatting(SheetsService sheetsService, string spreadsheetId, string sheetName, string range)
{
string str = string.Empty;
try
{
GoogleSheetsHelper helper = new GoogleSheetsHelper();
range = helper.RemoveSheetNameHelper(range);
string[] strArray = range.Split(':');
List<Request> requestList = new List<Request>();
BatchUpdateSpreadsheetRequest body = new BatchUpdateSpreadsheetRequest()
{
Requests = (IList<Request>)requestList
};
int sheetId = helper.GetSheetIdHelper(sheetsService, spreadsheetId, sheetName);
Request request = new Request()
{
RepeatCell = new RepeatCellRequest()
{
Range = new GridRange()
{
SheetId = new int?(sheetId),
StartColumnIndex = new int?(GoogleSheetsHelper.A1ToColumnHelper(strArray[0]) - 1),
StartRowIndex = new int?(GoogleSheetsHelper.A1ToRowHelper(strArray[0]) - 1),
},
Fields = "*"
}
};
body.Requests.Add(request);
BatchUpdateSpreadsheetResponse response = sheetsService.Spreadsheets.BatchUpdate(body, spreadsheetId).Execute();
str = JsonConvert.SerializeObject(response);
}
catch (Exception e)
{
str = "Message" + e.Message + Environment.NewLine + Environment.NewLine + "InnerException: " + e.InnerException + Environment.NewLine + Environment.NewLine + "Data: " + e.Data + Environment.NewLine + Environment.NewLine + "HelpLink: " + e.HelpLink + Environment.NewLine + Environment.NewLine + "Source: " + e.Source + Environment.NewLine + Environment.NewLine + "StackTrace: " + e.StackTrace + Environment.NewLine + Environment.NewLine + "TargetSite: " + e.TargetSite + Environment.NewLine + Environment.NewLine;
}
return str;
}
A1ToRowHelper
internal static int A1ToRowHelper(string a1)
{
string empty = string.Empty;
string str = a1;
for (int i = 0; i < str.Length; i++)
{
char chr = str[i];
if (char.IsNumber(chr))
{
empty = string.Concat(empty, chr.ToString());
}
}
return int.Parse(empty);
}
A1ToColumnHelper
internal static int A1ToColumnHelper(string a1)
{
string empty = string.Empty;
string str = a1;
for (int i = 0; i < str.Length; i++)
{
char chr = str[i];
if (char.IsLetter(chr))
{
empty = string.Concat(empty, chr.ToString());
}
}
if (string.IsNullOrEmpty(a1))
{
throw new ArgumentNullException("a1");
}
empty = empty.ToUpperInvariant();
int num = 0;
for (int i = 0; i < empty.Length; i++)
{
char chr1 = empty[i];
num *= 26;
num = num + chr1 - 65 + 1;
}
return num;
}
GetSheetIdHelper
public int GetSheetIdHelper(SheetsService sheetsService, string spreadsheetId, string sheetName)
{
Sheet sheet = sheetsService.Spreadsheets.Get(spreadsheetId).Execute().Sheets.First<Sheet>((Sheet x) => x.Properties.Title.Equals(sheetName));
int? sheetId = sheet.Properties.SheetId;
return (sheetId.HasValue ? sheetId.GetValueOrDefault() : 0);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.