Saturday, June 30, 2012

RadGrid - Export to Excel with Custom Currency Format

A couple days ago, I had a requirement from client that is they want to export to excel from RadGrid with the currency format is "$ xxx.xx USD" (may be it's negative value), moreover, in that excel file, they can calculate their fields. After googling on 2-day I had no result although I tried to ask the question on telerik forum at here and also stackoverflow.
Luckily, based on some suggestions on both 2 site, I solved this problem (phew, God bless me)

Below is all steps to get it (I assumed we can format "$ xxx.xx USD" on grid)

Step 1:
Register the ExcelExportCellFormatting event for grid

protected void grid_ExcelExportCellFormatting(object source, ExcelExportCellFormattingEventArgs e)
{
     var item = e.Cell.Parent as GridDataItem;
     var hdfCurrency = item.FindControl("hdfCurrency") as HiddenField;
     var format = FormatCurrencyWhenExportToExcel(hdfCurrency.Value);
     switch (e.FormattedColumn.UniqueName)
     {
          case "TotalPrice":
              var hdfTotalPrice = item.FindControl("hdfTotalPrice") as HiddenField;
              // Assumption the hdfTotalPrice.Value = "25.00" or "-25.00";
 
              e.Cell.Text = hdfTotalPrice.Value;
              e.Cell.Style["mso-number-format"] = format;
              break;
     }
}


Step 2:
Write the FormatCurrencyWhenExportToExcel function

public static string FormatCurrencyWhenExportToExcel(string currency)
{
       var regionInfo = new System.Globalization.RegionInfo(Globals.GetCurrencyCulture(currency).Name);
       var format = @"\0022" + regionInfo.CurrencySymbol + @"\0022\#\,\#\#0\.00\ \0022" + regionInfo.ISOCurrencySymbol + @"\0022";
       return format;
}
 
That's all.
Enjoy your code.
 
We can reference these sites: 
http://niallodoherty.com/post.cfm/basic-html-to-excel-formatting
http://agoric.com/sources/software/htmltoExcel
http://cosicimiento.blogspot.com/2008/11/styling-excel-cells-with-mso-number.html
http://www.telerik.com/help/aspnet-ajax/grid-html-export.html
 

2 comments: