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

Excel 的 Interop 编程(二)

关键字:Excel,Interop

作者:TR@SOE    更新:2008-09-03 16:12:46    浏览:15677

    我们继续讨论Excel中Workbook的一些操作。

  • 打开文本文件,数据库或XML文件

    我们可以分别使用OpenText,OpenDatabase,OpenXML来处理。下面是个简单的例子,我们打开一个文本文件,该文件用逗号分割,共两列:城市名和电话区号。注意:电话区号是有一个数字0作为前导的,如果在程序中我们不加以一些处理,那么我们就必须在稍后用Excel来完成这个调整工作了。我们从第二行开始调入数据。先看一下原始的文本文件:

城市,电话区号
苏州,0512
无锡,0510
南京,025
北京,010
上海,021
广州,020

    程序代码如下:

// Delphi.NET

procedure TWinForm.Button4_Click(sender: System.Object; e: System.EventArgs);
var FN: string;
var FieldInfo: System.Array;
var a: System.Int32;
begin
  if(OFD.ShowDialog = System.Windows.Forms.DialogResult.OK) then
  begin
    a:=1;
    FN:=OFD.FileName;
    FieldInfo:=System.Array.CreateInstance(a.GetType, 2, 2);
    FieldInfo.SetValue(1, 0, 0);
    FieldInfo.SetValue(1, 0, 1);
    FieldInfo.SetValue(2, 1, 0);
    FieldInfo.SetValue(2, 1, 1);

    EA.WorkbookS.OpenText(FN, STM, 2, Microsoft.Office.Interop.Excel.XlTextParsingType.xlDelimited,
      Microsoft.Office.Interop.Excel.XlTextQualifier.xlTextQualifierDoubleQuote, STM,
      STM, STM, true, STM, STM, STM,
    FieldInfo, STM, STM, STM, STM, STM);
  end;
end;

// C#

private void button4_Click(object sender, System.EventArgs e)
{
  String FN;
  System.Int64 a=1;
// 本文转自 C++Builder研究 - http://www.ccrun.com/article.asp?i=1048&d=2g5hp2
  Array FieldInfo = Array.CreateInstance(a.GetType(),2,2);
  FieldInfo.SetValue(1, 0,0);
  FieldInfo.SetValue(1, 0,1);
  FieldInfo.SetValue(2, 1,0);
  FieldInfo.SetValue(2, 1,1);
  if(OFD.ShowDialog()==DialogResult.OK)
  {
    FN=OFD.FileName;
    EA.Workbooks.OpenText(FN, STM, 2, Excel.XlTextParsingType.xlDelimited,
    Excel.XlTextQualifier.xlTextQualifierDoubleQuote, STM, STM, STM,
      true, STM, STM, STM,
      FieldInfo, STM, STM, STM, STM, STM);
  }
}

    关于OpenText函数的详细说明,可以参考VBA的说明。我只强调以下几点:

  • 和我们的理解不同,OpenText没有返回类型,所以我们不能将一个Workbook和它相关联。
  • 注意上面OpenText参数中,我用粗体显示的参数:
    • 2:这个参数指定了从第2行开始导入文本文件;
    • true:这个参数为true说明我们是用逗号(“,”)分割的文本文件;
    • FieldInfo:这个参数说明了文本文件中各列应该用怎样的格式来进行格式化。我们会在稍后详细说明。

    FieldInfo是整个函数中最关键的一个参数。我们知道,如果直接在Excel中导入类似“0512”这样的数据,Excel会自作聪明的将其转化到“512”,因为Excel认为0512中的前导0是没有意义的。要解决这个问题,我们需要在OpenText时指定FieldInfo。

    根据VBA帮助里的说明: “FieldInfo: xlColumnDataType 类型,可选。包含各数据列分析信息的数组。对本参数的解释取决于 DataType 值。如果此数据由分隔符分隔,本参数为由两元素数组组成的数组,其中每个两元素数组指定一个特定列的转换选项。第一个元素为列标(从 1 开始),第二个元素是 XlColumnDataType 常量之一,用以指定如何分析该列”,我们可以知道,FieldInfo它是一个二维数组构成的一维数组。二维数组的第一个元素说明列的序号,第二个元素说明列的类型(具体列的类型请参见VBA帮助)。对于我们需要指定列类型的列,都有这么一个数值序列,从而构成了另外一个一维数组。

    本例中,我们实际上只要指定第二列的格式,但是为了说明FieldInfo构成,我还是指定了两个列。

  • 工作簿的引用

    我们可以用数字索引或者名称索引的方式来引用各个工作簿。继续上面的例子,我们用一个Workbook与其相关联,然后将其关闭。

// Delphi .NET
EWB:=EA.Workbooks[1];
EWB.Close(STM, STM, STM);

// C#
EWB=EA.Workbooks["1.txt"];
EWB.Close(STM, STM, STM);

    我们分别用了两种方法来引用工作表:数字和名称。

    另外一个值得注意的是,在我们保存一个新建的工作簿之前,我们应该用标题栏中显示的名称(不包含.xls后缀)来引用一个工作簿。

上篇文章:Excel 的 Interop 编程(一)
下篇文章:浅析C++中内存分配的方式
相关搜索:
  中搜索“Excel 的 Interop 编程(二) ”相关内容
  中搜索“Excel 的 Interop 编程(二) ”相关内容
  中搜索“Excel 的 Interop 编程(二) ”相关内容
  中搜索“Excel 的 Interop 编程(二) ”相关内容
  中搜索“Excel 的 Interop 编程(二) ”相关内容
  中搜索“Excel 的 Interop 编程(二) ”相关内容
C++Builder 研究 - http://www.ccrun.com © 2001,2011  总访问量: 44026048  来访IP: 54.81.79.128  晋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研究!