【问题标题】:Export more than 100000 rows to Excel - Infragistics Excel exporter将超过 100000 行导出到 Excel - Infragistics Excel 导出器
【发布时间】:2012-06-08 11:50:48
【问题描述】:

我正在使用 ultrawebgrid v11.1 和 xml LoadOnDemand 并启用分页以加载超过 100,000 条记录。

我在InitializeDataSource 事件中编写了BindGrid() 功能。

在每个回发(保存、ExcelExport、Load..)和/或部分回发(页面导航、排序、过滤..)中,我从数据库中获取超过 100,000 条记录并设置网格的数据源。

问题 1:

每次从数据库中查询大量数据都需要更多时间。有没有办法只查询一次数据on load,然后在修改网格中的数据时。

问题 2:

我正在使用UltrawebgridExcelExporter v11.1。点击 Export 按钮,Grid 的数据源在InitializeDataSource 内部初始化,从数据库中获取超过 100,000 条记录。

我要知道,xmlLoadOnDemand设置的时候,每次导出到excel都要设置

AllowPaging = False  

and

LoadOndemand = LoadOnDemand.NotSet

然后绑定网格并导出。

从数据库中获取大量数据需要很长时间,而绑定则需要更长的时间。绑定后,导出到excel时抛出'System Out of Memory'异常。

问题 3:

我不确定即使解决了上述问题,我能否在 Excel 97-2003 中导出超过 65535 行?

如何使用xmlLoadOnDemand优化网格所有操作的性能。

代码:

Protected Sub UWGrid_InitializeDataSource(ByVal sender As Object, ByVal e As Infragistics.WebUI.UltraWebGrid.UltraGridEventArgs) Handles UWGrid.InitializeDataSource

UWGrid.DataSource = dsData 'record set with 100000 rows.

End Sub

Protected Sub btnExportToExcel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExportToExcel.Click

UWGrid.DisplayLayout.Pager.AllowPaging = False

UWGrid.DisplayLayout.LoadOnDemand = LoadOnDemand.NotSet

UWGrid.DataBind()

'Dim wBook As New Excel.Workbook(Excel.WorkbookFormat.Excel2007)

UltraWebGridExcelExporter1.DownloadName = "ExportFile.xls"

UltraWebGridExcelExporter1.Export(UWGrid)

End Sub

【问题讨论】:

  • Infragistics 论坛上发布并回答了相同的问题:news.infragistics.com/forums/p/70018/354551.aspx#354551
  • @roken - 那就是我,这个问题没有答案。这是 Infragistics 的限制。
  • 当你得到 OutOfMemoryException 时,#2 的调用堆栈中有什么?如果在导出器将工作簿写入内存流时发生这种情况,则可以在将 ExportMode 设置为 Custom 时将文件写入文件系统,然后稍后读取文件以供稍后下载。
  • @alhalama :是的,这是在导出器写入内存流时。应用程序架构不允许我们创建文件。我必须在记忆中做到这一点。目前,我将导出为 CSV 作为临时解决方案。
  • @EstefanyVelez 是否可以创建一个临时文件,删除对 excel 导出器和 excel 对象的引用,然后加载临时文件并发送给客户端?这应该允许对对象进行垃圾收集,并允许您导出更多数据。

标签: export-to-excel infragistics ultrawebgrid


【解决方案1】:

回答您的问题 3 - 65535 行不是 Infragistics 限制,它是 Excel 97/2003 格式的限制。解决它的唯一方法是以 Excel 2007+ 格式 (XLSX) 导出

【讨论】:

  • 这正是我在回答中所说的。 infragistics 的早期版本 Excel 导出控件使用 Excel 97/2003 API 导出数据。他们新推出的控件现在可以很好地处理这些东西。我的问题是,如何在 UltrawebgridExcelExporter 中实现这一点。
  • 我自己使用 UltrawebgridExcelExporter(目前也是 11.1 版),它确实支持您在代码中注释的行 - 因此您可以使用 UltrawebgridExcelExporter 导出 XSLX
【解决方案2】:

Infragistics 的答复是将记录拆分到多个工作簿中。因为存在不允许超过 65535 行的限制。

虽然他们的新 WebGrids 解决了这个限制,我通过导出到 CSV 文件解决了我的问题。

所以这个问题没有明确的答案,只能解决:)

【讨论】:

    【解决方案3】:
    private void Form1_Shown(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Serial number");
            dt.Columns.Add("Name");
            dt.Columns.Add("Values");
            for (int i = 0; i < 500; i++)
            {
                dt.Columns.Add("Column" + i.ToString());
            }
            for (int i = 0; i < 100000; i++)
            {
                dt.Rows.Add(i.ToString(), "Jipson PJ", (i + 100).ToString());
            }
    
            ultraGrid1.DataSource = dt;
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
    
            Workbook w = new Infragistics.Excel.Workbook();
    
            //w.CurrentFormat = WorkbookFormat.Excel2007;
            w.Worksheets.Add(this.Text);
            this.ultraGridExcelExporter1.FileLimitBehaviour = Infragistics.Win.UltraWinGrid.ExcelExport.FileLimitBehaviour.TruncateData;
    
            this.ultraGridExcelExporter1.Export(this.ultraGrid1, w.Worksheets[this.Text]);
    
            w.Save("C://Users//jipso//Documents//excel//1.xls"); // Save as .xlsx file name.
        }
    

    【讨论】:

    • 导出时没有得到所有行和列
    • “导出时没有得到所有行和列”这是一个问题还是答案?
    猜你喜欢
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-19
    • 2013-09-25
    • 2012-05-16
    相关资源
    最近更新 更多