欢迎光临 C++Builder 研究! 本站主要面向软件开发者(Developer/Programmer), 提供 C++Builder, Delphi, C/C++, VC++ 等相关的资料。发布信息请致信给
编程文档
本站首页 www.ccrun.com | 编程文档 |   关键字:

Excel 的 Interop 编程(三)

关键字:Excel,Interop

作者:TR@SOE    更新:2008-09-03 16:16:47    浏览:17649

    本节我们继续讨论Excel中Application里的一些方法:执行动作的成员。

  • Calculate

    该方法强制Excel进行一次重新计算。一般而言,Excel会进行自动计算。但是在某些情况下,我们有可能会设置Excel不进行自动运算。这时,我们就需要进行人工计算,以获得更新的结果。我们可以进行整个应用范围、单一表单范围或指定范围内的计算。目前我只测试了整个应用范围内以及EA.Range()/EA.get_Range()的重新计算。似乎在BDS中,Workbook似乎并没有Calculate方法。有待近一步查证。

    从实际应用来说,虽然Excel进行重新计算的速度非常快,但是如果能够限定重新计算的范围,应该是更有效率的做法。

    在下面的代码段中,需要注意,Delphi/C#中对范围的引用是不同的。Delphi比较直观,可以用Range方法,而C#必须用get_Range方法。在BDS开发环境中,Delphi的代码在输入Range().之后会弹出可用方法、成员提示,而C#则不行。

// Delphi .NET

EA.Calculate; //EA是早先定义的ExcelApplication对象
EA.Range['a1', 'b12'].Calculate;

// C#

EA.Calculate();
EA.get_Range("a1", "b12").Calculate();

  • CheckSpelling

    该方法返回一个bool值,表示所提供的字符串的拼写是否正确。作为可选参数,可以指定拼写检查所使用的词典以及是否忽略拼写错误等。

    核心代码如下:

// Delphi .NET

procedure TWinForm.Button2_Click(sender: System.Object; e: System.EventArgs);
var r:Microsoft.Office.Interop.Excel.Range;
var s: string;
begin
r:=EWA.Range['CheckSpelling', STM];
s:=r.Value2.ToString;
if (EWA.CheckSpelling(s,STM, STM)) then
begin
r.Offset[0,1].Value2:='Correct!';
end
else
begin
// 本文转自 C++Builder研究 - http://www.ccrun.com/article.asp?i=1049&d=g52wcw
r.Offset[0,1].Value2:='Wrong!';
end;
end;

// C#

private void button2_Click(object sender, System.EventArgs e)
{
Excel.Range r;
String s;
r=EWA.get_Range("CheckSpelling", STM);
s=r.Value2.ToString();
if(EWA.CheckSpelling(s, STM, STM))
{
r.get_Offset(0,1).Value2="Correct!";
}
else
r.get_Offset(0,1).Value2="Wrong!";
}
}

    继续注意在Delphi/C#中对Range/Offset的不同引用方法,在C#中必须加以前缀get_。在本例中,我们使用了一种新的定位方法:名称定位来确定一个范围。这个方法比用RC方式(型如A3/B14)更加灵活。Offset/get_Offset是个新方法,它将当前的范围偏移一定的行列而获得一个新的范围。在上例中,我们用(0,1)表示行不变(0),而列向右偏移一列(1)。因此,如果原来的CheckSpelling命名单元格在B8,那么新的范围将是B9。

  • Evaluate

    我个人认为,该方法的作用其实并不明显。它用来将一个Excel名称转化为实际的引用或值。下例中,我们可以在一个单元格中输入一个字符串(当然是合法的单元格或范围),然后程序将其转换到一个实际的单元格引用,并在该单元格中输入数据。需要注意的是,在Delphi中,r2:=EWA.Evaluate(r1) as Microsoft.Office.Interop.Excel.Range的写法编译能通过,但是在运行时会出现错误,而在C#中是可以的:

//Delphi .NET

procedure TWinForm.Button3_Click(sender: System.Object; e: System.EventArgs);
var r1: Microsoft.Office.Interop.Excel.Range;
var r2: Microsoft.Office.Interop.Excel.Range;
begin
r1:=EWA.Range['Evaluate', STM];
r2:=EWA.Range[r1.Value2,STM];
r2.Value2:='Input here!';

end;

//C#

private void button3_Click(object sender, System.EventArgs e)
{
Excel.Range r1, r2;
r1=EWA.get_Range("Evaluate", STM);
r2=(Excel.Range)EWA.Evaluate(r1.Value2);
r2.Value2="Input here!";

 

上篇文章:Excel 的 Interop 编程(二)
下篇文章:浅析C++中内存分配的方式
相关搜索:
  中搜索“Excel 的 Interop 编程(三) ”相关内容
  中搜索“Excel 的 Interop 编程(三) ”相关内容
  中搜索“Excel 的 Interop 编程(三) ”相关内容
  中搜索“Excel 的 Interop 编程(三) ”相关内容
  中搜索“Excel 的 Interop 编程(三) ”相关内容
  中搜索“Excel 的 Interop 编程(三) ”相关内容
C++Builder 研究 - http://www.ccrun.com © 2001,2011  总访问量: 44197107  来访IP: 54.226.113.250  晋ICP备05000574号
Tags: Borland CodeGear Embarcadero C++Builder Delphi VC++ C/C++ RAD Studio BCB BDS Source Code VCL MFC COM SDK Components Controls Developer Programmer 编程学习资料 源代码 源程序 源码 编程文档 经验技巧 组件 控件 元件 开源 函数 软件开发 一切尽在C++Builder研究!