【发布时间】:2012-12-06 15:10:59
【问题描述】:
我有一个包含任务列表的数据库。我正在使用 VSTO 从该数据库中读取数据并从中创建一个新的 Microsoft Project。任务上限为 3000。
问题是数据库中的记录是随机顺序的。当然,它们在同一个表中以主外键的形式定义了父子关系。但是,有两个限制:
- 我必须一口气读完所有记录。
- 读取记录的顺序可以是完全随机的。
第二个问题是真正的问题发生的地方。因为我很可能首先获得所有 OutlineLevel = 1 记录,然后是一些 OutlineLevel = 5 记录,然后是一些 Outline Level = 2 等等(完全随机)。
由于 VSTO API 在执行 ParentTask.OutlineChildren.Add(<Task>) 的意义上是奇怪的,将创建该父级的子任务,但会将任务添加到网格的最后一行!
这迫使我为遇到的每条记录重新计算 ID。对于ID,我的意思是MS Project 中必须记录的行号。
问题在于,如果我为 3000 个任务重新计算它,它会变得越来越慢。一开始,它每秒可以插入 30-40 个任务,但 处理所有 3000 个任务需要 11 个小时! (这当然是不可接受的)。
是否有一些 API 方法可以快速完成此操作?或者是否有另一种方法可以重新计算子任务的 ID。
- 计算子任务 ID 的代码是迭代的。它从父任务的 ID 开始,并尝试根据子任务的兄弟编号计算子任务将具有的 ID(
SiblingNumber存储在我构建的数据结构中,它充当包装MSProject.Task object)。
【问题讨论】:
-
如果您的更新以 30 个任务/秒开始并且需要 11 小时而不是 2 分钟(30/秒 * 60 秒 = 1800/分钟) - 请确保您发布指向 COM 对象和集合的链接.因此,项目变得非常缓慢。如果您使用 Application.Projects[1].Tasks[1].Name 之类的集合 - 您将启动 4 个对 COM 对象的引用:Projects 集合、Project、Tasks 集合和 Task。所有这些都需要重复使用或发布。
标签: vsto ms-office ms-project