Как очистить все форматирование для указанного листа в таблице Google, используя C #? - PullRequest
0 голосов
/ 28 июня 2019

В настоящее время мое приложение может переносить все значения из указанного листа в электронной таблице Excel в лист Google и очищать все значения из указанного листа в листе Google, используя ClearValuesRequest.

Как удалить все форматирование (стили шрифта, цвета ячеек и т. Д.) С указанного листа в таблице Google? Я часами просматривал документацию , но не смог точно понять, что мне нужно делать, поскольку это не так просто, как при использовании 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);
            }
        }

1 Ответ

0 голосов
/ 12 июля 2019

Чтобы ответить на мой собственный вопрос, это то, что сработало для меня. Если был / есть лучший способ, то я не знаю об этом.

После долгих исследований я не смог найти опцию Очистить любое форматирование, используя ClearValuesRequest. Я должен был выполнить BatchUpdateSpreadsheetRequest вместо этого. Оттуда мне пришлось использовать RepeatCellRequest и предоставить GridRange для Range, чтобы повторить ячейку. К сожалению, GridRange не принимает нотацию A1, поэтому мне пришлось создать вспомогательные методы для преобразования диапазона в нотации А1 к индексам.

Это удаляет / сбрасывает все форматирование для всего листа.

Метод 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);
        }
...