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); }
/// <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); }
/// <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); }