如果Microsoft.Office.Interop.Excel程序集引用存在,则编译函数A,不编译函数B;
如果Microsoft.Office.Interop.Excel程序集引用不存在,则编译函数B,不编译函数A;函数A里,有一些excel操作。
函数B里,没有excel操作。
如果Microsoft.Office.Interop.Excel程序集引用不存在,则编译函数B,不编译函数A;函数A里,有一些excel操作。
函数B里,没有excel操作。
public void A()
{
}#else public void B()
{
}#endif
至于判断对方是否安装Excel,只要判断注册表项即可,即使没有安装Excel,引用那个Microsoft.Office.Interop.Excel的项目依然正常工作,只要不执行到对应的方法,执行对应的方法前,判断下注册表的Offiec安装信息即可。
另外还有更好的方法,参考如下代码: bool isExcelInstalled()
{
Type type = Type.GetTypeFromProgID("Excel.Application");
return type != null;
}总之那个Microsoft.Office.Interop.Excel你只管带到客户端即可,免得客户端安装的Office版本和你的不一样,找不到同版本的Microsoft.Office.Interop.Excel.dll而报错。
如果说你不需要判断用户是否安装了Excel,那么直接自己定义一个#define A不也一样吗?第一次编译#define A,第二次编译删除#define A,这样就得到了两个版本了。
如果这台机子,没有安装office,函数A,能够被编译吗?函数A里面,是有execel操作的啊。
其实,我要实现的,就是普通的条件编译啊。只不过,这个条件是“机子上有没有安装office”。
如何:通过主互操作程序集面向 Office 应用程序
不需要考虑用户机器上是否安装Excel,COM组件是运行时绑定的,如果判断用户机器上没有Excel,那么不执行操作Excel的代码即可,不会影响程序其它部分的运行。
如果无,则编译B.cs,不编译A.cs。是不是这个意思?
if(excel==null)
throw new Exception("没有安装Excel。");excel.Visible = true;
var workbook = excel.workbooks; workbook.Add();
sheet = excel.ActiveSheet;
var i = 1;
var data = new double[] { 1.0, 5.0, 9.5, 2.7, 3.2, 0.6 };
foreach (var d in data)
{
var cell = sheet.Cells[i, 1];
cell.Value = "第 " + i + "行";
cell.ColumnWidth = 10;
cell = sheet.Cells[i, 2];
cell.Value = d;
i++;
}
var button = new Button { Content = "click me!", Width = 80, Height = 20 };
this.Container.Children.Add(button);
button.Click += new RoutedEventHandler(button_Click);
CheckValues();
excel.DisplayAlerts = false;
excel.Quit();
那么运行时根据是否安装excel来调用不同的程序,很简答。
我们的系统都使用网页形式、经过类似搜索引擎和广告系统的方式来推广。而安装为本地系统的silverlght应用程序又是自动到服务器上去更新的。因此我们的企业应用系统,从来不使用wpf开发。而是使用silverlight。
原来技术还要和技术分挂钩啊
原来COM技术还要区分C++和C#
C#就不能用COM?C#就不能用API?
你真傻