簡體   English   中英

使用kendoGrid啟動Excel導出(大量行)

[英]Initiates the Excel export (Large number of rows) using kendoGrid

在數據加載到網格后,我有一個要求' 導出到Excel '當我有大約100s的行數較少但是現在我得到的數據恰好是12250行時,這非常有效。 這是加載到網格,但當我嘗試' 導出到Excel '時它無法正常工作。

這個負載是我的網格 `

.Columns(column =>
            {
                column.Bound(p => p.CBCustomerName).Title("CB Customers");
                column.Bound(p => p.CBReceiveDateTimeUTC).Title("CB Date").Format("{0:MM/dd/yyyy}");
                column.Bound(p => p.CBExpirationDate).Title("CBExpiration Date").Format("{0:MM/dd/yyyy HH:mm:ss}");               

            })
            //.Events(e => e.DataBound("onDataBound"))
            .Sortable()
            .Scrollable()
            .Filterable()
            .Pageable(pageable => pageable
            .Refresh(true)
            .PageSizes(true)
            .ButtonCount(5))
            .DataSource(dataSource => dataSource
            .Ajax()
            .Group(x=> { x.Add(p => p.ReceiveDateTimeUTC);})
            .PageSize(20)
            .Events(events => events.Error("error_handler"))
            .Read(read => read.Action("uspPendingWork", "PendingWork").Data("getGridData"))

        )`

' 導出到Excel '

 $(document).ready(function () {
            $("#ExportXL").on('click', function () {
                var grid = $("#PendingWorkGrid").data("kendoGrid");
                grid.saveAsExcel();
                $("#SearchBT").click();
            })
        });

注意:加載到網格工作正常。 注意:導出到Excel也適用於行較少(約100或200) 但如果行更像12250“導出到Excel”沒有發生。

如果我能糾正某事,請告訴我。 這樣我就可以導出到excel了。

可以從客戶端功能導出到Excel的記錄(行項)的限制因瀏覽器而異, Daniel在類似的問題中說

每個瀏覽器都有自己的局限性,我擔心在大多數情況下我們無法控制它們。 也就是說, 在導出期間導出大量數據會生成對於給定瀏覽器來說可能太長的字符串。

因為文件內容完全在客戶端構建,所以它依賴於每個瀏覽器存儲由Spreadsheet.saveAsExcel()函數處理的格式化字符串(例如JSON)的能力。

如果要導出到包含大量記錄/行(例如12,250行)的Excel文件,我建議使用Telerik.Documents.SpreadsheetStreaming命名空間來生成內存中的導出記錄流,然后將其轉換為字節數組,可以作為FileResult傳遞。 下面是一個在控制器操作方法中執行服務器端處理的示例(為簡潔起見,剪切了一些部分):

[HttpPost]
public ActionResult ExportToExcel(int rowsCount, string fileName)
{
    // column header names, separated by comma
    string[] columnHeaderNames = { "CBCustomerName", "CBReceiveDateTimeUTC", "CBExpirationDate" };

    // column width values, separated by comma    
    double[] columnWidths = { 30, 14.5, 14.5 };

    SpreadDocumentFormat exportFormat = SpreadDocumentFormat.Xlsx;
    string mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    string ext = "xlsx";

    string fileNameWithExt = string.Format("{0}.{1}", fileName, ext);

    // byte array to hold MemoryStream result
    byte[] rendered = null;

    using (var stream = new MemoryStream())
    {
        using (IWorkbookExporter workbook = SpreadExporter.CreateWorkbookExporter(exportFormat, stream))
        {
            using (IWorksheetExporter worksheet = workbook.CreateWorksheetExporter("WorksheetName"))
            {
                for (int i = 0; i < columnWidths.Length; i++)
                {
                    using (IColumnExporter columnExport = worksheet.CreateColumnExporter())
                    {
                        // export column settings here
                    }
                }

                // other stuff

                for (int rowIndex = 0; rowIndex < rowsCount; rowIndex++)
                {
                    using (IRowExporter rowExport = worksheet.CreateRowExporter())
                    {
                        // export row settings here
                    }
                }

                // other stuff
            }
        }

        rendered = stream.ToArray();
    }

    return File(rendered, mimeType, fileNameWithExt);
}

類似問題:

導出到Excel行限制

Excel導出不能使用超過一千條記錄

其他參考(服務器端導出到Excel):

使用SpreadsheetStreaming進行大型文檔導出(Telerik示例)

GridExcelSpreadProcessing示例

找到了一個簡單的解決方案。 經過一些研究后才知道,如果數據量更大,那么唯一的選擇就是服務器端出口實施

<button id="ExportXL" name="ExportXL" type="button" value="Export to Excel" onclick="location.href='@Url.Action("ExportToExcel", "Controler Name")'" />



public ActionResult ExportToExcel()
    {
        using (var excel = new ExcelPackage())
        {
            var workSheet = excel.Workbook.Worksheets.Add("Worksheet Name");
            workSheet.Cells[1, 1].LoadFromCollection(result, PrintHeaders: true, TableStyle: OfficeOpenXml.Table.TableStyles.Medium6);
            workSheet.Cells[workSheet.Dimension.Address].AutoFitColumns();
            return File(excel.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Reports.xlsx");
        }

    }

**結果是您的數據集合(您可能從數據庫中獲取)

** TableStyle:OfficeOpenXml.Table.TableStyles.Medium6 - Excel行樣式

** ExcelPackage - ( EPPlus )可以包括在Package config ----> Install-Package EPPlus -Version 4.5.1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM