首先:我尝试在 codeplex 上回答几天,但我收到了系统降级通知。(codeplex 目前正在讨论中。完整讨论: http: //netoffice.codeplex.com/discussions/587938)
不确定我是否正确理解您,或者您可能没有意识到 COM 是如何工作的。任何时候你调用 Application.ActiveSheet 你都会得到一个新的!!!实例(来自应用程序的代理)当然,它在 COM-Server 上仍然是同一个实例(如果当前工作表没有更改),但每次请求时都会得到一个新实例/代理。(您不需要在 NetOffice 中显式地处理每个实例/代理实例,此外,您可以使用“==”或“!=”轻松比较本地代理实例,但这只是 NetOffice 的一些魔法)
每次请求或使用缓存策略时,您都必须重新投射 Worksheet 实例。
我能为您做的就是在 NetOffice Factory Core 举办一场活动。像这样的东西:
//Event Trigger Example
private NetOfficeCore_OnCreateInstance(object newInstance, ref Type replaceTo)
{
Worksheet sheet = newInstance as WorkSheet;
if(null != sheet && sheet.Name = "MySheet")
{
replaceTo = typeof(MyCustomWorkSheet);
}
}
在此示例中,所有名称为“MySheet”的工作表都希望自动替换为您的自定义类型。(当然,您仍然必须将 Application.ActiveSheet 转换为您的自定义类型)
让我知道您的想法*,以便我今天可以创建此活动并构建新版本。
*Sebastian(免责声明:来自 NetOffice 的作者)