public async Task Spreadsheet_AddRow_EmptyMemoryRow(Type type)
    {
        // Arrange
        using var stream = new MemoryStream();
        await using (var spreadsheet = await Spreadsheet.CreateNewAsync(stream))
        {
            await spreadsheet.StartWorksheetAsync("Sheet");

            var addRowTask = type switch
            {
                _ when type == typeof(Cell) => spreadsheet.AddRowAsync(ReadOnlyMemory <Cell> .Empty),
                _ when type == typeof(DataCell) => spreadsheet.AddRowAsync(ReadOnlyMemory <DataCell> .Empty),
                _ when type == typeof(StyledCell) => spreadsheet.AddRowAsync(ReadOnlyMemory <StyledCell> .Empty),
                _ => throw new ArgumentOutOfRangeException(nameof(type), type, null)
            };

            // Act
            await addRowTask;
            await spreadsheet.FinishAsync();
        }

        // Assert
        SpreadsheetAssert.Valid(stream);
        using var actual = SpreadsheetDocument.Open(stream, true);
        var sheetPart = actual.WorkbookPart !.WorksheetParts.Single();

        Assert.Empty(sheetPart.Worksheet.Descendants <OpenXmlCell>());
    }
    public async Task Spreadsheet_AddRow_CellWithIntegerValue(int?value, Type type)
    {
        // Arrange
        using var stream = new MemoryStream();
        await using (var spreadsheet = await Spreadsheet.CreateNewAsync(stream))
        {
            await spreadsheet.StartWorksheetAsync("Sheet");

            var cell = CellFactory.Create(type, value);

            // Act
            await spreadsheet.AddRowAsync(cell);

            await spreadsheet.FinishAsync();
        }

        // Assert
        SpreadsheetAssert.Valid(stream);
        using var actual = SpreadsheetDocument.Open(stream, true);
        var sheetPart  = actual.WorkbookPart !.WorksheetParts.Single();
        var actualCell = sheetPart.Worksheet.Descendants <OpenXmlCell>().Single();

        Assert.Equal(CellValues.Number, actualCell.GetDataType());
        Assert.Equal(value?.ToString() ?? string.Empty, actualCell.InnerText);
    }
    public async Task Spreadsheet_AddRow_CellWithVeryLongStringValue(int length, Type type)
    {
        // Arrange
        var value = new string('a', length);

        using var stream = new MemoryStream();
        var options = new SpreadCheetahOptions {
            BufferSize = SpreadCheetahOptions.MinimumBufferSize
        };

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

            var cell = CellFactory.Create(type, value);

            // Act
            await spreadsheet.AddRowAsync(cell);

            await spreadsheet.FinishAsync();
        }

        // Assert
        SpreadsheetAssert.Valid(stream);
        using var actual = SpreadsheetDocument.Open(stream, true);
        var sheetPart  = actual.WorkbookPart !.WorksheetParts.Single();
        var actualCell = sheetPart.Worksheet.Descendants <OpenXmlCell>().Single();

        Assert.Equal(CellValues.InlineString, actualCell.DataType?.Value);
        Assert.Equal(value, actualCell.InnerText);
    }
    public async Task Spreadsheet_AddRow_CellWithStringValue(string?value, Type type)
    {
        // Arrange
        using var stream = new MemoryStream();
        await using (var spreadsheet = await Spreadsheet.CreateNewAsync(stream))
        {
            await spreadsheet.StartWorksheetAsync("Sheet");

            var cell = CellFactory.Create(type, value);

            // Act
            await spreadsheet.AddRowAsync(cell);

            await spreadsheet.FinishAsync();
        }

        // Assert
        SpreadsheetAssert.Valid(stream);
        using var actual = SpreadsheetDocument.Open(stream, true);
        var        sheetPart        = actual.WorkbookPart !.WorksheetParts.Single();
        var        actualCell       = sheetPart.Worksheet.Descendants <OpenXmlCell>().Single();
        CellValues?expectedDataType = value is null ? null : CellValues.InlineString;

        Assert.Equal(expectedDataType, actualCell.DataType?.Value);
        Assert.Equal(value ?? string.Empty, actualCell.InnerText);
    }
    public async Task Spreadsheet_AddAsRow_ObjectWithCustomType()
    {
        // Arrange
        const string value      = "value";
        var          customType = new CustomType("The name");

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

            // Act
            await spreadsheet.AddAsRowAsync(new RecordWithCustomType(customType, value));

            await spreadsheet.FinishAsync();
        }

        // Assert
        stream.Position  = 0;
        using var actual = SpreadsheetDocument.Open(stream, false);
        var sheetPart  = actual.WorkbookPart !.WorksheetParts.Single();
        var cells      = sheetPart.Worksheet.Descendants <OpenXmlCell>().ToList();
        var actualCell = Assert.Single(cells);

        Assert.Equal(value, actualCell.InnerText);
    }
    public async Task Spreadsheet_AddAsRow_ObjectWithProperties(ObjectType type)
    {
        // Arrange
        const string firstName = "Ola";
        const string lastName  = "Nordmann";
        const int    age       = 30;

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

            // Act
            if (type == ObjectType.Class)
            {
                await spreadsheet.AddAsRowAsync(new ClassWithProperties(firstName, lastName, age));
            }
            else if (type == ObjectType.Record)
            {
                await spreadsheet.AddAsRowAsync(new RecordWithProperties(firstName, lastName, age));
            }
            else if (type == ObjectType.Struct)
            {
                await spreadsheet.AddAsRowAsync(new StructWithProperties(firstName, lastName, age));
            }
            else if (type == ObjectType.ReadOnlyStruct)
            {
                await spreadsheet.AddAsRowAsync(new ReadOnlyStructWithProperties(firstName, lastName, age));
            }

            await spreadsheet.FinishAsync();
        }

        // Assert
        stream.Position  = 0;
        using var actual = SpreadsheetDocument.Open(stream, false);
        var sheetPart = actual.WorkbookPart !.WorksheetParts.Single();
        var cells     = sheetPart.Worksheet.Descendants <OpenXmlCell>().ToList();

        Assert.Equal(firstName, cells[0].InnerText);
        Assert.Equal(lastName, cells[1].InnerText);
        Assert.Equal(age.ToString(), cells[2].InnerText);
        Assert.Equal(3, cells.Count);
    }
Exemplo n.º 7
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);
    }
Exemplo n.º 8
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);
    }