.net 如何使用Excel互操作优化与单元格相关的工作簿创建性能?

.net 如何使用Excel互操作优化与单元格相关的工作簿创建性能?,.net,performance,excel,interop,.net,Performance,Excel,Interop,摘要 我使用Visual Basic和Visual Studio 2008在.NET中编写了一个Excel包装器 这个问题是我追求的继续=在你进一步阅读之前,请注意这些问题 ) ) 我还就这一主题咨询了其他相关问题,发现这些问题非常有趣: A B 假设 我现在知道,为了表现的缘故,我将无法按照我在初稿中预期的方式行事 现在,我写下这些假设来帮助我度过难关: 创建逻辑工作簿时,即尚未保存在硬盘上的工作簿,我不需要立即初始化单元格 因为我不需要初始化单元格,所以我可以简单地用空单元格初始化Re

摘要

我使用Visual Basic和Visual Studio 2008在.NET中编写了一个Excel包装器

这个问题是我追求的继续=在你进一步阅读之前,请注意这些问题

  • )
  • )
  • 我还就这一主题咨询了其他相关问题,发现这些问题非常有趣:

    A
    B

    假设

    我现在知道,为了表现的缘故,我将无法按照我在初稿中预期的方式行事

    现在,我写下这些假设来帮助我度过难关:

    • 创建逻辑工作簿时,即尚未保存在硬盘上的工作簿,我不需要立即初始化单元格
    因为我不需要初始化单元格,所以我可以简单地用空单元格初始化ReadOnlyDictionary(Of String,ICell),同时构建我的列名并将它们初始化到字典中

    在第一次访问单元时,我可以简单地检查它是否已初始化,并在未初始化时初始化它

    • 在磁盘上创建工作簿时,我可以没有要初始化的单元格,也就是说,我在磁盘上创建文件,并返回创建的IWorkbook接口实例的实例
    事实上,此工作簿刚刚创建,尚未包含任何值。因此,单元字典的部分初始化可能再次成为一种方法

    另外,假设我必须为单元格设置值,我知道如果我简单地使用一个包含我必须设置单元格的值的二维数组,它会变得更快

    在这两种情况下,在ISHEET.Cype字典之外使用对象数组对于性能来说是很有趣的,但是在面向对象编程时,当我们知道一个单元应该知道它自己的存在时,它看起来很奇怪。这就是我在Range interop接口和Cell类之间使用依赖项注入时打算做的

    在这种方法中,如何使用单元格值对本机单元格进行赋值?

    • 在打开工作簿时,我必须使用具有值的范围初始化Sheet.Cells
    • 使用过的单元格包含非空值
    • 使用过的单元格以两种可能的方式返回:
      我范围互操作接口的实例; 二,。使用范围的值可以在二维对象数组中获得
    建筑和行为思想

    我想给自己写一个CellCollection或类似的东西,用从
    (object[,])NativeSheet.UsedRange.get_Value(XlRangeValueDataType.xlRangeValueDefault)
    获得的二维数组初始化,然后我可以用一个属性调用一个带有地址(“A1”)的单元格,然后从
    对象[,]
    获取相应的值并返回它。当它要格式化一个给定的单元格时,我可以简单地调用相应的
    范围
    给定的一个或多个单元格

    这个想法还没有被精确化,我在解释它的时候仍然有点困惑。如果您对此有任何疑问,请随时提问,以便我自己能够更精简、更快地完成任务

    问题

    • 优化此体系结构,同时保持其面向对象设计的“干净”的最佳方法是什么

    • 是否有其他替代方案可以让我在投入性能的同时保持单元寻址功能可用


    感谢大家对我们的友好和宝贵的帮助

    请查看此问题的答案: