public GoogleSheetUpdater(GoogleSheetsClient client, string sheetName, int columnKey, int columnStartWrite) { _client = client; _sheetName = sheetName; _columnKey = columnKey; _columnStartWrite = columnStartWrite; }
/// <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); } }