Excel cell data types

With GemBox.Spreadsheet, it's possible to set Excel cell values to various .NET objects such as String, Double, and DateTime in C# and VB.NET, as shown in the example below.

using GemBox.Spreadsheet;
using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        // If using the Professional version, put your serial key below.
        SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");

        var workbook = new ExcelFile();
        var worksheet = workbook.Worksheets.Add("Types");

        worksheet.Rows[0].Style = workbook.Styles[BuiltInCellStyleName.Heading1];
        worksheet.Columns[0].Width = 25 * 256;
        worksheet.Columns[1].Width = 25 * 256;
        worksheet.Columns[2].Width = 25 * 256;

        worksheet.Cells[0, 0].Value = "Value";
        worksheet.Cells[0, 1].Value = ".NET Value Type";
        worksheet.Cells[0, 2].Value = "Cell Value Type";

        // Sample data values.
        object[] values =
        {
            DBNull.Value,
            byte.MaxValue,
            sbyte.MinValue,
            short.MinValue,
            ushort.MaxValue,
            1000,
            (uint)2000,
            long.MinValue,
            ulong.MaxValue,
            float.MaxValue,
            double.MaxValue,
            3000.45m,
            true,
            DateTime.Now,
            'a',
            "Sample text.",
            new StringBuilder("Sample text."),
        };

        // Write data and data type to Excel cells.
        for (int i = 0; i < values.Length; i++)
        {
            object value = values[i];

            worksheet.Cells[i + 1, 0].Value = value;
            worksheet.Cells[i + 1, 1].Value = value.GetType().ToString();
        }

        // Save to Excel file and load it back as ExcelFile object.
        using (var stream = new MemoryStream())
        {
            workbook.Save(stream, SaveOptions.XlsxDefault);
            workbook = ExcelFile.Load(stream, LoadOptions.XlsxDefault);
            worksheet = workbook.Worksheets[0];
        }

        // Write cell type to Excel cells.
        for (int i = 0; i < values.Length; i++)
            worksheet.Cells[i + 1, 2].Value = worksheet.Cells[i + 1, 0].ValueType.ToString();

        workbook.Save("Data Types.%OutputFileType%");
    }
}
Imports GemBox.Spreadsheet
Imports System
Imports System.IO
Imports System.Text

Module Program

    Sub Main()

        ' If using the Professional version, put your serial key below.
        SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY")

        Dim workbook As New ExcelFile()
        Dim worksheet = workbook.Worksheets.Add("Types")

        worksheet.Rows(0).Style = workbook.Styles(BuiltInCellStyleName.Heading1)
        worksheet.Columns(0).Width = 25 * 256
        worksheet.Columns(1).Width = 25 * 256
        worksheet.Columns(2).Width = 25 * 256

        worksheet.Cells(0, 0).Value = "Value"
        worksheet.Cells(0, 1).Value = ".NET Value Type"
        worksheet.Cells(0, 2).Value = "Cell Value Type"

        ' Sample data values.
        Dim values As Object() =
        {
            DBNull.Value,
            Byte.MaxValue,
            SByte.MinValue,
            Short.MinValue,
            UShort.MaxValue,
            1000,
            CUInt(2000),
            Long.MinValue,
            ULong.MaxValue,
            Single.MaxValue,
            Double.MaxValue,
            3000.45D,
            True,
            DateTime.Now,
            "a"c,
            "Sample text.",
            New StringBuilder("Sample text.")
        }

        ' Write data and data type to Excel cells.
        For i = 0 To values.Length - 1
            Dim value As Object = values(i)
            worksheet.Cells(i + 1, 0).Value = value
            worksheet.Cells(i + 1, 1).Value = value.GetType().ToString()
        Next

        ' Save to Excel file and load it back as ExcelFile object.
        Using stream As New MemoryStream()
            workbook.Save(stream, SaveOptions.XlsxDefault)
            workbook = ExcelFile.Load(stream, LoadOptions.XlsxDefault)
            worksheet = workbook.Worksheets(0)
        End Using

        ' Write cell type to Excel cells.
        For i = 0 To values.Length - 1
            worksheet.Cells(i + 1, 2).Value = worksheet.Cells(i + 1, 0).ValueType.ToString()
        Next

        workbook.Save("Data Types.%OutputFileType%")

    End Sub
End Module
Setting Excel cell value to various data types in C# and VB.NET
Screenshot of Excel cell data types

To assign the cell value, you can use either the ExcelCell.Value property or one of the ExcelCell.SetValue methods. For performance reasons, the SetValue is the preferred way to set the cell value to a numerical or date type (value types) because it avoids boxing and unboxing .NET value types.

To check if an object of a specific type can be assigned to the Excel cell value, use the ExcelFile.SupportsType method.

When saving the ExcelFile object to an Excel file, GemBox.Spreadsheet will write the .NET objects from cell values in the appropriate Excel type. Microsoft Excel stores cell value as a number, text, logical value, error value, or as empty (see the description of the TYPE function).

So for instance, the StringBuilder object will be written as text, the Boolean object will be written as a logical value, and the DateTime object will be written as a number with a specific Number Format.

However, Int64 and UInt64 objects will be written as text values because Excel can't store all the digits for large integer numbers. If the least significant digits are not necessary, use floating-point for large numbers.

See also


Next steps

GemBox.Spreadsheet is a .NET component that enables you to read, write, edit, convert, and print spreadsheet files from your .NET applications using one simple API.

Download Buy