簡體   English   中英

如何使用C#清除Google Spreadsheet中指定工作表的所有格式?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM