XamDataGrid で GridViewSettings.Orientation を Horizontal に設定すると、標準の ExcelExporter では画面の転置表示どおりのレイアウトでエクスポートできません。DataPresenterExcelExporter の HeaderLabelExporting および CellExporting イベントで既定の書き出しをキャンセルし、行と列のインデックスを入れ替えてセル値を設定することで、画面表示どおりの位置で Excel に出力できます。
XamDataGrid の設定
Horizontal 表示にするには、XamDataGrid.ViewSettings に設定する GridViewSettings の Orientation プロパティに Horizontal を指定します。
<igWPF:XamDataGrid x:Name="xamDataGrid1" DataSource="{Binding}">
<igWPF:XamDataGrid.ViewSettings>
<igWPF:GridViewSettings Orientation="Horizontal" />
</igWPF:XamDataGrid.ViewSettings>
<igWPF:XamDataGrid.FieldLayouts>
<igWPF:FieldLayout>
<igWPF:FieldLayout.Settings>
<igWPF:FieldLayoutSettings AutoGenerateFields="False" />
</igWPF:FieldLayout.Settings>
<igWPF:FieldLayout.Fields>
<igWPF:Field Name="Id" />
<igWPF:Field Name="Name" Label="氏名"/>
...
</igWPF:FieldLayout.Fields>
</igWPF:FieldLayout>
</igWPF:XamDataGrid.FieldLayouts>
</igWPF:XamDataGrid>

HeaderLabelExporting / CellExporting イベントの処理
DataPresenterExcelExporter の HeaderLabelExporting イベントと CellExporting イベントでは、それぞれ e.Cancel を true にして既定のセル書き出しをキャンセルし、e.CurrentRowIndex と e.CurrentColumnIndex の値を入れ替えたうえで、Workbook の該当セルに値を設定しています。これにより、Horizontal 表示で転置されたグリッドの見た目どおりの位置に、ヘッダーラベルとセル値が出力されます。
var exporter = new DataPresenterExcelExporter();
exporter.HeaderLabelExporting += Exporter_HeaderLabelExporting;
exporter.CellExporting += Exporter_CellExporting;
exporter.Export(xamDataGrid1, @"..\..\..\Excel\out.xlsx", WorkbookFormat.Excel2007);
private void Exporter_HeaderLabelExporting(object? sender, HeaderLabelExportingEventArgs e)
{
e.Cancel = true;
var row = e.CurrentRowIndex;
var col = e.CurrentColumnIndex;
e.Workbook.Worksheets[e.CurrentWorksheet.Index].Rows[col].Cells.Value = e.Label;
}
private void Exporter_CellExporting(object? sender, CellExportingEventArgs e)
{
e.Cancel = true;
var row = e.CurrentRowIndex;
var col = e.CurrentColumnIndex;
e.Workbook.Worksheets[e.CurrentWorksheet.Index].Rows[col].Cells.Value = e.Value;
}
実行結果
サンプルを実行して「Excel Export」ボタンをクリックすると、XamDataGrid の Horizontal 表示のレイアウトのまま、行と列の位置が画面表示どおりに転置された状態で Excel ファイル(out.xlsx)が出力されます。
