コード例 #1
0
    public async Task Spreadsheet_StartWorksheet_NoFreezing()
    {
        // Arrange
        var worksheetOptions = new WorksheetOptions();

        using var stream = new MemoryStream();
        await using (var spreadsheet = await Spreadsheet.CreateNewAsync(stream))
        {
            // Act
            await spreadsheet.StartWorksheetAsync("My sheet", worksheetOptions);

            await spreadsheet.FinishAsync();
        }

        // Assert
        SpreadsheetAssert.Valid(stream);
        using var actual = SpreadsheetDocument.Open(stream, true);
        var worksheet = actual.WorkbookPart !.WorksheetParts.Select(x => x.Worksheet).Single();

        Assert.Null(worksheet.SheetViews);
    }
コード例 #2
0
    public async Task Spreadsheet_AddDataValidation_DecimalValue(string op, XLOperator expectedOperator)
    {
        // Arrange
        const double value      = 123.45;
        var          validation = op switch
        {
            "eq" => DataValidation.DecimalEqualTo(value),
            "neq" => DataValidation.DecimalNotEqualTo(value),
            "gt" => DataValidation.DecimalGreaterThan(value),
            "gte" => DataValidation.DecimalGreaterThanOrEqualTo(value),
            "lt" => DataValidation.DecimalLessThan(value),
            "lte" => DataValidation.DecimalLessThanOrEqualTo(value),
            _ => throw new ArgumentOutOfRangeException(nameof(op))
        };

        using var stream = new MemoryStream();
        await using (var spreadsheet = await Spreadsheet.CreateNewAsync(stream))
        {
            await spreadsheet.StartWorksheetAsync("Sheet");

            // Act
            spreadsheet.AddDataValidation("A1", validation);
            await spreadsheet.FinishAsync();
        }

        // Assert
        SpreadsheetAssert.Valid(stream);
        using var workbook = new XLWorkbook(stream);
        var worksheet        = workbook.Worksheets.Single();
        var actualValidation = Assert.Single(worksheet.DataValidations);
        var actualRange      = Assert.Single(actualValidation.Ranges);
        var cell             = Assert.Single(actualRange.Cells());

        Assert.Equal(1, cell.Address.ColumnNumber);
        Assert.Equal(1, cell.Address.RowNumber);
        Assert.Equal(XLAllowedValues.Decimal, actualValidation.AllowedValues);
        Assert.Equal(expectedOperator, actualValidation.Operator);
        Assert.Equal(value.ToString(CultureInfo.InvariantCulture), actualValidation.MinValue);
        Assert.Empty(actualValidation.MaxValue);
    }
コード例 #3
0
    public async Task Spreadsheet_AddRow_MixedCellTypeRows(bool firstRowStyled, Type type)
    {
        // Arrange
        const string firstCellValue = "First";
        const string secondCellValue = "Second";
        using var stream = new MemoryStream();
        await using (var spreadsheet = await Spreadsheet.CreateNewAsync(stream))
        {
            await spreadsheet.StartWorksheetAsync("Sheet");

            var style = new Style();
            style.Font.Bold = true;
            var styleId = spreadsheet.AddStyle(style);

            // Act
            if (firstRowStyled)
            {
                await spreadsheet.AddRowAsync(CellFactory.Create(type, firstCellValue, styleId));
                await spreadsheet.AddRowAsync(new DataCell(secondCellValue));
            }
            else
            {
                await spreadsheet.AddRowAsync(new DataCell(firstCellValue));
                await spreadsheet.AddRowAsync(CellFactory.Create(type, secondCellValue, styleId));
            }

            await spreadsheet.FinishAsync();
        }

        // Assert
        SpreadsheetAssert.Valid(stream);
        using var workbook = new XLWorkbook(stream);
        var worksheet = workbook.Worksheets.Single();
        var actualFirstCell = worksheet.Cell(1, 1);
        var actualSecondCell = worksheet.Cell(2, 1);
        Assert.Equal(firstCellValue, actualFirstCell.Value);
        Assert.Equal(secondCellValue, actualSecondCell.Value);
        Assert.Equal(firstRowStyled, actualFirstCell.Style.Font.Bold);
        Assert.Equal(!firstRowStyled, actualSecondCell.Style.Font.Bold);
    }
コード例 #4
0
    public async Task Spreadsheet_AddRow_MultiFormatCellWithStringValue(bool formatting, Type type)
    {
        // Arrange
        const string cellValue = "Formatting test";
        var fontName = formatting ? "Arial" : null;
        var fillColor = formatting ? Color.Green as Color? : null;
        var fontColor = formatting ? Color.Red as Color? : null;
        using var stream = new MemoryStream();
        await using (var spreadsheet = await Spreadsheet.CreateNewAsync(stream))
        {
            await spreadsheet.StartWorksheetAsync("Sheet");

            var style = new Style();
            style.Fill.Color = fillColor;
            style.Font.Bold = formatting;
            style.Font.Color = fontColor;
            style.Font.Italic = formatting;
            style.Font.Name = fontName;
            style.Font.Strikethrough = formatting;
            var styleId = spreadsheet.AddStyle(style);
            var styledCell = CellFactory.Create(type, cellValue, styleId);

            // Act
            await spreadsheet.AddRowAsync(styledCell);
            await spreadsheet.FinishAsync();
        }

        // Assert
        SpreadsheetAssert.Valid(stream);
        using var workbook = new XLWorkbook(stream);
        var worksheet = workbook.Worksheets.Single();
        var actualCell = worksheet.Cell(1, 1);
        Assert.Equal(cellValue, actualCell.Value);
        Assert.Equal(formatting, actualCell.Style.Fill.BackgroundColor.Color == fillColor);
        Assert.Equal(formatting, actualCell.Style.Font.Bold);
        Assert.Equal(formatting, actualCell.Style.Font.FontColor.Color == fontColor);
        Assert.Equal(formatting, string.Equals(actualCell.Style.Font.FontName, fontName, StringComparison.Ordinal));
        Assert.Equal(formatting, actualCell.Style.Font.Italic);
        Assert.Equal(formatting, actualCell.Style.Font.Strikethrough);
    }
コード例 #5
0
    public async Task Spreadsheet_StartWorksheet_Freezing(int?columns, int?rows)
    {
        // Arrange
        var worksheetOptions = new WorksheetOptions
        {
            FrozenColumns = columns,
            FrozenRows    = rows
        };

        var expectedColumnName    = CellReferenceHelper.GetExcelColumnName((columns ?? 0) + 1);
        var expectedCellReference = $"{expectedColumnName}{(rows ?? 0) + 1}";
        var expectedActivePane    = columns switch
        {
            not null when rows is not null => PaneValues.BottomRight,
            not null => PaneValues.TopRight,
            _ => PaneValues.BottomLeft
        };

        using var stream = new MemoryStream();
        await using (var spreadsheet = await Spreadsheet.CreateNewAsync(stream))
        {
            // Act
            await spreadsheet.StartWorksheetAsync("My sheet", worksheetOptions);

            await spreadsheet.FinishAsync();
        }

        // Assert
        SpreadsheetAssert.Valid(stream);
        using var actual = SpreadsheetDocument.Open(stream, true);
        var worksheet = actual.WorkbookPart !.WorksheetParts.Select(x => x.Worksheet).Single();
        var sheetView = worksheet.SheetViews !.Cast <SheetView>().Single();

        Assert.Equal(PaneStateValues.Frozen, sheetView.Pane !.State !.Value);
        Assert.Equal(columns, (int?)sheetView.Pane.HorizontalSplit?.Value);
        Assert.Equal(rows, (int?)sheetView.Pane.VerticalSplit?.Value);
        Assert.Equal(expectedCellReference, sheetView.Pane.TopLeftCell?.Value);
        Assert.Equal(expectedActivePane, sheetView.Pane.ActivePane?.Value);
    }