public GoogleSheetUpdater(GoogleSheetsClient client, string sheetName, int columnKey, int columnStartWrite)
 {
     _client           = client;
     _sheetName        = sheetName;
     _columnKey        = columnKey;
     _columnStartWrite = columnStartWrite;
 }
Пример #2
0
        /// <summary>
        /// Вставить или обновить значения в гугл таблицу по ключу
        /// </summary>
        /// <param name="client">Клиент</param>
        /// <param name="sheetName">Название листа</param>
        /// <param name="columnKey">Номер колонки с ключом</param>
        /// <param name="columnStartWrite">Начальный номер колонки для вставки значений</param>
        /// <param name="values">Значения (ключ (строка), массив значений)</param>
        public static async Task WriteByKey(GoogleSheetsClient client, string sheetName, int columnKey, int columnStartWrite,
                                            Dictionary <string, object[]> values, string[] titles = null, CancellationToken ct = default)
        {
            if (values == null || values.Count == 0)
            {
                return;
            }

            // Получаем данные
            var data = await client.GetOrAddSheet(sheetName, ct).ConfigureAwait(false);

            var requestsAppend = new List <GoogleSheetAppendRequest>();
            var requestsUpdate = new List <GoogleSheetUpdateRequest>();

            // Если нет таблицы, то сначала вставляем заголовки
            if (data == null && titles != null)
            {
                requestsAppend.Add(CreateAppendRequest(sheetName, columnKey, "Key", columnStartWrite, titles));
            }

            // Вставляем контент
            foreach (var item in values)
            {
                var row = GetRowByValue(data, columnKey, item.Key);
                if (row == null)
                {
                    requestsAppend.Add(CreateAppendRequest(sheetName, columnKey, item.Key, columnStartWrite, item.Value));
                }
                else
                {
                    requestsUpdate.AddRange(CreateUpdateRequests(sheetName, columnStartWrite, row.Value, item.Value));
                }
            }

            // Отправляем данные
            if (requestsAppend.Count > 0)
            {
                await client.Append(requestsAppend, ct).ConfigureAwait(false);
            }
            if (requestsUpdate.Count > 0)
            {
                await client.Update(requestsUpdate, ct).ConfigureAwait(false);
            }
        }