How to reproduce:
public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
public RadForm1()
{
InitializeComponent();
this.radGridView1.DataSource = this.GetData();
this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
GridViewDecimalColumn decimalColumn = this.radGridView1.Columns[0] as GridViewDecimalColumn;
decimalColumn.DecimalPlaces = 2;
decimalColumn.FormatString = "{0:N2}";
decimalColumn.ExcelExportType = DisplayFormatType.Custom;
decimalColumn.ExcelExportFormatString = "0.000";
}
public object GridViewSpreaExport { get; private set; }
private object GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(double));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Bool", typeof(bool));
dt.Columns.Add("Date", typeof(DateTime));
for (int i = 0; i < 100; i++)
{
dt.Rows.Add(1.10 + i, "Name " + i, i % 2 == 0, DateTime.Now.AddDays(i));
}
return dt;
}
private void radButton1_Click(object sender, EventArgs e)
{
GridViewSpreadStreamExport spreadExporter = new GridViewSpreadStreamExport(this.radGridView1);
spreadExporter.FileExportMode = FileExportMode.CreateOrOverrideFile;
SpreadStreamExportRenderer renderer1 = new SpreadStreamExportRenderer();
spreadExporter.RunExportAsync(@"..\..\exported-stream.xlsx", renderer1);
}
}
Workaround: Create a custom SpreadStreamExportRenderer
public class CustomSpreadStreamExportRenderer : SpreadStreamExportRenderer
{
public override void SetCellValue(DataType dataType, object value)
{
switch (dataType)
{
case DataType.Number:
this.SetNumberValue(value);
break;
case DataType.DateTime:
this.SetDateTimeValue(value);
break;
case DataType.Boolean:
this.SetBooleanValue(value);
break;
case DataType.Other:
if (this.SetNumberValue(value))
{
break;
}
if (this.SetDateTimeValue(value))
{
break;
}
if (this.SetBooleanValue(value))
{
break;
}
this.SetStringValue(value);
break;
case DataType.String:
default:
this.SetStringValue(value);
break;
}
}
}