如何实例化新的工作表

时间:2015-03-18 20:10:15

标签: c# netoffice

我想继承NetOffice.ExcelApi.Worksheet类,因为我需要一个带有额外字段的“自定义”工作表。作为构造这个新类的一个实例的一部分,我想只调用基类的构造函数。也就是说,基本上我需要一个常规Worksheet,但需要设置一些额外的字段并在其上有几个额外的功能。

如何创建新Worksheet?到目前为止,我只使用Add类中的Sheets方法,它会自动为您执行此操作,然后将其添加到工作表中。据我所知,Worksheet类的构造函数需要获取父对象(这不是问题)和传入的COM代理。我该怎么做?

2 个答案:

答案 0 :(得分:0)

我建议您使用NPOI来处理excel。它工作正常,不需要安装excel。它可以从NuGet获得。样本为here。希望这有帮助。

答案 1 :(得分:0)

首先:我尝试在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"想要用自定义类型替换automicaly。 (您仍然需要将Application.ActiveSheet转换为您的自定义类型)

让我知道你的想法*所以我今天可以创建这个活动并建立一个新版本。

*塞巴斯蒂安 (免责声明:NetOffice的作者)