Ejemplo n.º 1
0
        // Appends existing sheet with specified rows.
        internal static SpreadsheetsResource.ValuesResource.AppendRequest GetAppendRowsRequest(SheetsService sheetsService, string spreadsheetId, string sheetTitleId, int columnCount, int rowCount, int rowsToAdd, IList <IList <object> > newRowsData)
        {
            // Construct string representing range(rows) appending the sheet
            string appendedSheetRange = RangeTranslator.GetRangeString(sheetTitleId, LiveSheetLeftIndex, LiveSheetTopIndex, columnCount, rowCount + rowsToAdd);

            // Construct requestBody value range.
            ValueRange requestBody = new ValueRange();

            // Assign request body range string.
            requestBody.Range = appendedSheetRange;

            // Assign request body values.
            requestBody.Values = newRowsData;

            // Constructs append rows request.
            SpreadsheetsResource.ValuesResource.AppendRequest request = sheetsService.Spreadsheets.Values.Append(requestBody, spreadsheetId, appendedSheetRange);

            // Specify the way in which input data should be interpreted.
            request.ValueInputOption = SpreadsheetsResource.ValuesResource.AppendRequest.ValueInputOptionEnum.RAW;

            // Specify the way in which input data should be inserted.
            request.InsertDataOption = SpreadsheetsResource.ValuesResource.AppendRequest.InsertDataOptionEnum.INSERTROWS;

            // Return constructed append rows request.
            return(request);
        }
        //                sheet title id, sheet grid data
        public static IDictionary <string, IList <IList <string> > > GetDataAsStringsGridsIndex(this Spreadsheet spreadsheet, IDictionary <string, string> requiredRangesBySheetTitleId)
        {
            IDictionary <string, IList <IList <string> > > stringsGridsIndex = new Dictionary <string, IList <IList <string> > >();

            HashSet <string> requiredSheetTitleIds = new HashSet <string>(requiredRangesBySheetTitleId.Keys);

            // Foreach sheet
            foreach (string requiredSheetTitleId in requiredSheetTitleIds)
            {
                string sheetRequiredRange = requiredRangesBySheetTitleId[requiredSheetTitleId];

                // Declare range translator out variables
                // Translate string range back in to separate range parameters
                RangeTranslator.RangeStringToParameters(sheetRequiredRange, out string dummyString, out int sheetRequiredLeftIndex, out int sheetRequiredTopIndex, out int sheetRequiredColumnCount, out int sheetRequiredRowCount);

                // Add sheet strings grids index placeholder dictionary entry
                stringsGridsIndex.Add(requiredSheetTitleId, null);

                // TODO confirm spreadsheet.Sheets is never null
                // Obtain sheet data if any available
                Sheet sheet = spreadsheet.Sheets.Where(s => s.Properties.Title == sheetRequiredRange).FirstOrDefault();

                if (!(sheet is null))
                {
                    // Fill that sheet with a list representing required amount of rows.
                    stringsGridsIndex[requiredSheetTitleId] = sheet.GetDataAsStringsGrid(sheetRequiredColumnCount, sheetRequiredRowCount);
                }
        // Inserts rows range into the existing sheet
        internal static async Task InsertRowsAsync(this SheetsService sheetsService, string spreadsheetId, string sheetTitleId, int?sheetId, int columnCount, int toBeInsertedTopRowIndex, int toBeInsertedRowCount, IList <IList <object> > newRowsData)
        {
            // Wait for google apis request quota availability.
            await SessionRequestsLimiter.Instance.WaitAsync();

            // Obtain appropriate insert row batch request.
            SpreadsheetsResource.BatchUpdateRequest insertRowsRequest = GoogleServicesExtensionsRequestsFactory.GetInsertRowsRequest(sheetsService, spreadsheetId, sheetId, toBeInsertedTopRowIndex, toBeInsertedRowCount);

            // Execute insert sheet rows request in safe synchronous manner.
            await RequestsExecutor.SafeExecuteAsync <BatchUpdateSpreadsheetResponse>(insertRowsRequest);

            // If new rows data haven't been provided
            if (!(newRowsData is null))
            {
                // Obtain new rows range string.
                string newRowsRangeString = RangeTranslator.GetRangeString(sheetTitleId, 0, toBeInsertedTopRowIndex, columnCount, toBeInsertedRowCount);

                // Fills inserted rows with provided data.
                await sheetsService.UpdateRangeDataAsync(spreadsheetId, newRowsRangeString, newRowsData);
            }
        }