PivotGridコントロールはFlexGridコントロールの拡張です。したがって、FlexGridに付属する拡張モジュールでサポートされている形式であれば、どの形式にもエクスポートできます。サポートされている形式には、XLSLX、CSV、PDFなどがあります。以下の例では、現在のビューとそれを転置したビューの2つのシートを含むExcelファイルをエクスポートします。
以下の画像は、以下のコードを実装した後にOLAPコントロールがどのように表示されるかを示しています。
次のコード例は、OLAPデータをExcelファイルにエクスポートする方法を示します。この例では、「クイックスタート」セクションで作成したサンプルを使用します。
コード内(Index.cshtml)
Razor |
コードのコピー
|
---|---|
@using OLAPSample.Models; @model IEnumerable<ProductData> <br /> @(Html.C1().PivotEngine().Id("indexEngine").Bind(Model) .RowFields(pfcb => pfcb.Items("Country")) .ColumnFields(cfcb => cfcb.Items("Product")) .ValueFields(vfcb => vfcb.Items("Sales"))) @Html.C1().PivotPanel().ItemsSourceId("indexEngine") @Html.C1().PivotChart().ItemsSourceId("indexEngine") @Html.C1().PivotGrid().Id("indexGrid").ItemsSourceId("indexEngine") <button type="button" class="btn btn-default" onclick="saveView()">ビューを保存</button><br /> <button type="button" class="btn btn-default" onclick="loadView()">ビューをロード</button><br /> <button type="button" class="btn btn-default" onclick="excelExport()">XLSXにエクスポート</button> @section Scripts{ <script src="http://cdnjs.cloudflare.com/ajax/libs/jszip/2.5.0/jszip.min.js"></script> <script type="text/javascript"> function saveView() { var ng = c1.getService('indexEngine'); if (ng && ng.isViewDefined) { localStorage.viewDefinition = ng.viewDefinition; } } function loadView() { var ng = c1.getService('indexEngine'); if (ng && localStorage.viewDefinition) { ng.viewDefinition = localStorage.viewDefinition; var cmbRowTotals = wijmo.Control.getControl('#RowTotals'); if (cmbRowTotals) { cmbRowTotals.selectedValue = ng.showRowTotals; } var cmbColTotals = wijmo.Control.getControl('#ColTotals'); if (cmbColTotals) { cmbColTotals.selectedValue = ng.showColumnTotals; } var chkShowZeros = document.getElementById('ColTotals'); if (chkShowZeros) { chkShowZeros.checked = ng.showZeros; } } } function excelExport() { var pivotGrid = wijmo.Control.getControl('#indexGrid'); // 現在のビューを含むブックを作成します var book = wijmo.grid.xlsx.FlexGridXlsxConverter.save(pivotGrid, { includeColumnHeaders: true, includeRowHeaders: true }); book.sheets[0].name = 'Main View'; addTitleCell(book.sheets[0], getViewTitle(pivotGrid.engine)); // 転置したビューを含むシートを追加します transposeView(pivotGrid.engine); var transposed = wijmo.grid.xlsx.FlexGridXlsxConverter.save(pivotGrid, { includeColumnHeaders: true, includeRowHeaders: true }); transposed.sheets[0].name = 'Transposed View'; addTitleCell(transposed.sheets[0], getViewTitle(pivotGrid.engine)); book.sheets.push(transposed.sheets[0]); transposeView(pivotGrid.engine); // ブックを保存します book.save('wijmo.OLAP.xlsx'); } // 現在のビューのタイトルを構築します function getViewTitle(ng) { var title = ''; for (var i = 0; i < ng.valueFields.length; i++) { if (i > 0) title += ', '; title += ng.valueFields[i].header; } title += ' by '; if (ng.rowFields.length) { for (var i = 0; i < ng.rowFields.length; i++) { if (i > 0) title += ', '; title += ng.rowFields[i].header; } } if (ng.rowFields.length && ng.columnFields.length) { title += ' and by '; } if (ng.columnFields.length) { for (var i = 0; i < ng.columnFields.length; i++) { if (i > 0) title += ', '; title += ng.columnFields[i].header; } } return title; } function transposeView(ng) { ng.deferUpdate(function () { // 行/列フィールドを保存します var rows = [], cols = []; for (var r = 0; r < ng.rowFields.length; r++) { rows.push(ng.rowFields[r].header); } for (var c = 0; c < ng.columnFields.length; c++) { cols.push(ng.columnFields[c].header); } // 行/列フィールドをクリアします ng.rowFields.clear(); ng.columnFields.clear(); // 転置した順序で行/列フィールドを復元します for (var r = 0; r < rows.length; r++) { ng.columnFields.push(rows[r]); } for (var c = 0; c < cols.length; c++) { ng.rowFields.push(cols[c]); } }); } //xlxsシートにタイトルセルを追加します function addTitleCell(sheet, title) { // セルを作成します var cell = new wijmo.xlsx.WorkbookCell(); cell.value = title; cell.style = new wijmo.xlsx.WorkbookStyle(); cell.style.font = new wijmo.xlsx.WorkbookFont(); cell.style.font.bold = true; // セルを保持する行を作成します var row = new wijmo.xlsx.WorkbookRow(); row.cells[0] = cell; // 新しい行をシートに追加します sheet.rows.splice(0, 0, row); } </script> } |