public void A1NotationParts(string sheetName,
                                    string startColumn,
                                    int?startRow,
                                    string endColumn,
                                    int?endRow,
                                    string expectedA1Notation)
        {
            var a1 = new A1Notation(sheetName,
                                    startColumn, startRow, endColumn, endRow);

            a1.ToString().Should().Be(expectedA1Notation);
        }
Esempio n. 2
0
        /// <summary>
        /// Calculates A1 Notation for the first cell.
        /// </summary>
        /// <returns></returns>
        private string CalculateFirstCellA1()
        {
            var sb = new StringBuilder();

            sb.Append("'");
            sb.Append(_sheet.Properties.Title);
            sb.Append("'");
            sb.Append("!");
            sb.Append(A1Notation.ToCellFormat(
                          Range.StartColumnIndex.Value,
                          Range.StartRowIndex.Value));

            return(sb.ToString());
        }
        public void A1NotationRange(string range,
                                    string expectedParsedRange,
                                    string expectedSheetName,
                                    string expectedStartColumn,
                                    int?expectedStartRow,
                                    string expectedEndColumn,
                                    int?expectedEndRow)
        {
            var a1 = new A1Notation(range);

            a1.SheetName.Should().Be(expectedSheetName);
            a1.StartColumn.Should().Be(expectedStartColumn);
            a1.EndColumn.Should().Be(expectedEndColumn);
            a1.EndRow.Should().Be(expectedEndRow);
            a1.ToString().Should().Be(expectedParsedRange);
        }
Esempio n. 4
0
        /// <summary>
        /// Reads daily offers from this restaurant.
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public IEnumerable <DailyOfferFood> ReadDailyOffers(DateTime date)
        {
            var foundMerge = FindDateRangeInSheets(date);

            if (foundMerge.IsSuccess)
            {
                var namesRange = A1Notation.ToRangeFormat(
                    foundMerge.Value.Range.StartColumnIndex.Value, 2,    // Start Corner
                    foundMerge.Value.Range.EndColumnIndex.Value, 6);     // End corner

                var offersList = _reader.ReadSheetData(string.Format("'{0}'!{1}", foundMerge.Value.SheetName, namesRange));

                return(DataExtractor.ExtractDailyOffers(offersList));
            }
            else
            {
                _logger.LogError($"Unable to load daily offers for Restaurant Hedone on date {date.Date.ToString()}");
                return(new DailyOfferFood[0]);
            }
        }
 public void A1ColumnReferenceFromIndex(int index, string expectedColumnReference)
 {
     A1Notation.GetColumnReferenceFromIndex(index)
     .Should().Be(expectedColumnReference);
 }
 public void A1ColumnIndex(string columnReference, int expectedIndex)
 {
     A1Notation.GetColumnReferenceIndex(columnReference)
     .Should().Be(expectedIndex);
 }
        public async Task <RunMergeTemplateProgress> RunMergeTemplateAsync(
            MergeTemplate mergeTemplate,
            Action <RunMergeTemplateProgress> progressReporter = null,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            if (mergeTemplate == null)
            {
                throw new ArgumentNullException(nameof(mergeTemplate));
            }
            var emailMergeTemplate = mergeTemplate as EmailMergeTemplate;

            if (emailMergeTemplate == null)
            {
                throw new InvalidOperationException("Currently only mergeTemplates of type Email are supported.");
            }
            if (emailMergeTemplate.EmailTemplate == null)
            {
                throw new InvalidOperationException("MergeTemplate.EmailTemplate cannot ben null");
            }

            string range     = mergeTemplate.SheetName;
            var    dataRange = await _sheetsService.GetDataRangeAsync(
                mergeTemplate.SpreadSheetId, mergeTemplate.SheetName);

            if (mergeTemplate.HeaderRowNumber > 1)
            {
                // we'll define a custom range
                range = new A1Notation(mergeTemplate.SheetName,
                                       dataRange.StartColumn,
                                       mergeTemplate.HeaderRowNumber,
                                       dataRange.EndColumn,
                                       dataRange.EndRow).ToString();
            }

            if (!dataRange.EndRow.HasValue)
            {
                throw new InvalidOperationException($"Could not retrieve the number of rows in sheet {mergeTemplate.SheetName}");
            }

            var progress = new RunMergeTemplateProgress(
                dataRange.EndRow.Value - (dataRange.StartRow ?? 1));
            await _sheetsService.GetValuesAsDictionaryDataPump(mergeTemplate.SpreadSheetId,
                                                               range, async values =>
            {
                if (!ShouldProcess(mergeTemplate, values))
                {
                    progress.AddSkipped();
                    return;
                }

                try
                {
                    await ProcessMergeTemplateAsync(emailMergeTemplate.EmailTemplate, values);
                    progress.AddProcessed();
                }
                catch (Exception err)
                {
                    _logger.Error(err, "Error processing merge template");
                    progress.AddError();
                }
                finally
                {
                    progressReporter?.Invoke(progress);
                }
            });

            return(progress);
        }