Hi,
I'm using IG 9.2's support for export to Excel. I would like to exclude a couple of columns from being exported to Excel. Can you let me know how that could be done?
Thanks,
Joe
Hello Joe,
The easiest way I found is to register for the EndExport event and simply manipulate the Excel Workbook form there. E.g:
e.Workbook.Worksheets[0].Columns[0].Hidden =
true;
Hope this helps.
Sincerely,
Petar Monov,
DS Engineer,
Infragistics Bulgaria
Thanks Petar but this may not work for me as the column still exists in the Excel. My users need the excel to feed into another system or save as csv where this column would still show.
When handling the InitializeRecord event the InitializeRecordEventArgs has a SkipRecord property. Isnt there something similar for columns ?
Hi Joe,
In that case you can register for the HeaderLabelExporting and CellExporting events and use something like this to prevent the exporting:
if (e.CurrentColumnIndex == 1)
{
e.Cancel = true;
}
Regards Petar.
was this enhanced somehow in last 5 years? I'm using version 2013.2 and it seems like even hiding column in the resulting worksheet doesn't work.
Hello Anton,
Thank you for your post. I have been looking into it and I can suggest you handle the DataPresenterExcelExporter’s ExportSatrted event. This event will pass you a clone of the XamDataGrid. Which is used for the exporting. Since it's a clone, you can make changes to this layout and it will not affect the on-screen grid, only the export. So you can hide fields or layouts, change colors, or anything else you like. I also created sample project for you showing this approach. Please let me know if this helps you or you have further questions on this matter.
Looking forward for your reply.
Thanks, Stefan! That is exactly what I was looking for. I've extended your solution by creating attached property ExcludeFromExport for the Field, so now I'm not dependent on field names and I can mark fields to exclude from export directly in xaml.
Anton,
Can you pls post your attached Property so that we can reuse on our end as well pls?
tnx mate. Did the same on our end.
Example Code:
/// <summary> /// Allows to exclude field from Export /// Credit goes to http://ko.infragistics.com/community/forums/p/34093/499958.aspx#499958 /// </summary> public class ExcludeFromExportProperty : DependencyObject { public static readonly DependencyProperty ExcludeProperty = DependencyProperty.RegisterAttached("Exclude", typeof(bool), typeof(ExcludeFromExportProperty), new PropertyMetadata(false));
public static bool GetExclude(DependencyObject d) { return (bool)d.GetValue(ExcludeProperty); } public static void SetExclude(DependencyObject d, bool value) { d.SetValue(ExcludeProperty, value); } }
and then in our InfragisticsFacade class we have this piece of Code to hide it:
for (var i = 0; i < e.DataPresenter.FieldLayouts[0].Fields.Count; i++) { var field = e.DataPresenter.FieldLayouts[0].Fields[i]; var excluded = ExcludeFromExportProperty.GetExclude(field);
if (excluded) { field.Visibility = Visibility.Collapsed; }
Anvarbek,
it's just a simple attached property of boolean type. You then set it to true in xaml for Field that you don't want to export. Later in ExportStarted event handler you set Visibility to Collapsed for all fields that have it set to true.