【问题标题】:VSTO - Add controls to worksheet taking much timeVSTO - 向工作表添加控件需要很长时间
【发布时间】:2015-07-30 06:47:39
【问题描述】:

我正在使用 VSTO(VB.NET 编程)构建一个 excel 应用程序。我需要在运行时将组合框添加到工作表中,但是此操作花费的时间太长。我正在添加大约 100~500 个组合。

我正在做这样的事情

For Each cell_address In my_cells_address_list
    Dim rng = Me.sheet.Range(cell_address)
    Me.sheet.Controls.AddControl(New ComboBox(), rng, "MyApp_Combo_" & rng.Address(0, 0))
Next

为了让它更快,我在添加组合框之前这样做(如下)

Me.sheet.Application.Calculation = Excel.XlCalculation.xlCalculationManual
Me.sheet.Application.ScreenUpdating = False
Me.sheet.Application.EnableEvents = False

但是这个命令并没有提高我的表现。我认为当添加组合时,工作表受到保护并且用户无法触发excel的任何基本功能是相关的。

使用组合,滚动工作表的性能也非常低......

有一些解决方法可以让它更快吗?

【问题讨论】:

    标签: excel performance vsto controls worksheet


    【解决方案1】:

    为什么需要在工作表中添加这么多组合框?很可能有更优雅的问题解决方案。您是否考虑过使用 .Net 控件创建任务窗格?

    我还建议立即释放所有底层 COM 对象。使用 System.Runtime.InteropServices.Marshal.ReleaseComObject 在您使用完 Excel 对象后释放它。然后在 Visual Basic 中将变量设置为 Nothing(在 C# 中为 null)以释放对对象的引用。在Systematically Releasing Objects 文章中阅读更多相关信息。它与 Outlook 相关,但相同的原则可以应用于任何 Office 加载项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多