创建、连接和终止 Excel 实例
我们从最简单的脚本开始介绍,这个脚本创建一个 Excel 实例,并向其中添加一个新的工作簿:
Code: Select all
objExcel := ComObjCreate("Excel.Application")
objExcel.Workbooks.Add
不过在执行本文中的代码时,为了查看代码执行的效果,这里必须让它显示出来:
Code: Select all
objExcel.Visible := True
Code: Select all
objExcel := ComObjActive("Excel.Application") ; 获取当前活动的 Excel 实例的句柄
Code: Select all
objExcel.Quit
我们已经会创建 Excel 实例,现在看看如何打开电子表格。在 Excel 对象模型(有关详细信息,请参阅 MSDN 中的 Excel Object Model Overview)中,电子表格包含在 Workbooks 对象中。要打开电子表格,我们需要创建一个 Workbooks 集合的实例,然后使用 Open 方法打开电子表格。听起来很复杂,但具体到能够创建 Excel 实例的 ComObjCreate 的调用,只需要写以下区区两行代码:
Code: Select all
objExcel := ComObjCreate("Excel.Application")
objWorkbook := objExcel.Workbooks.Open("C:\test.xls")
有没有打开电子表格的其他的编程方法?有。实际上,我们这个专题中的许多操作都可以用其他的方法完成。但出于时间和版面的考虑,我们将以最容易被初学者接受的方法来编写 Excel 脚本。如果您希望了解能够完成相同任务的其他的方法,请查看Excel 帮助中的 Excel 对象模型文档。
保存文件
直接保存到当前文件(注:如果是新建的工作簿调用Save方法时会以创建时默认的工作簿名称保存在用户文档目录下):
Code: Select all
objExcel.Workbook.Save()
Code: Select all
objExcel.ActiveWorkbook.SaveAs("C:\test.xls")
首先我们简单地引用一个单元格,然后相应地设置值。下面将在第一行第一列输入“AutoHotkey”:
Code: Select all
objExcel.Cells(1, 1).Value := "AutoHotkey"
现在我们把刚才存入的数据读取并显示出来:
Code: Select all
strCell := objExcel.Cells(1, 1).Value
MsgBox, % strCell
格式设置
在脚本中设置单元格的格式和手动设置单元格一样的简单,在下面将设置单元格 A1 的格式:
Code: Select all
objExcel.Cells(1, 1).Font.Bold := TRUE ; 将文本设为黑体
objExcel.Cells(1, 1).Font.Size := 24 ; 将字体大小设为 24
objExcel.Cells(1, 1).Font.ColorIndex := 3 ; 将字体颜色设为红色
Code: Select all
objExcel.Cells(1, 1).Font.Italic := TRUE
Code: Select all
objExcel.Cells(1, 1).Font.Name := "Times New Roman"
Code: Select all
objExcel.Cells(1, 1).Interior.ColorIndex := 9
使用范围
在许多时候我们需要对多个单元格,例如同一行的某些单元格或整列单元格,这时需要使用范围。虽然有几种不同的方法指示范围中包含的单元格,但是它们有一点是共同的:它们都需要您创建 Range 对象的实例,然后指定哪些单元格是该范围的一部分。例如,下面是一些创建范围的常用方法。
要创建包含单个单元格的范围:
Code: Select all
objRange2 := objExcel.Range("A1")
Code: Select all
objRange := objExcel.ActiveCell.EntireColumn
Code: Select all
objRange := objExcel.ActiveCell.EntireRow
Code: Select all
objRange := objExcel.Range("E5")
objRange.Activate
objRange := objExcel.ActiveCell.EntireRow
Code: Select all
objRange := objExcel.Range("A1:C10")
要创建包含所有数据的范围:
Code: Select all
objCell := objExcel.Range("A1").SpecialCells(11)
注:在 Excel 中可以使用许多灵活的方式指定范围,然而在某些要求比较高难以直接使用范围时,这时可以考虑循环:
Code: Select all
; 这里在 A1-I1 单元格中依次存入数字 1-9
while, (A_Index < 10)
{
strCell := Chr(A_Index + 64) . "1"
objExcel.Range(strCell).value := A_Index
}
数据排序
您还可以对 Excel 中的内容进行排序:
Code: Select all
objRange2 := objExcel.Range("A1")
Code: Select all
objRange.Sort(objRange2, ComObjMissing(), ComObjMissing(), ComObjMissing(), ComObjMissing(), ComObjMissing(), ComObjMissing(), 1)
一个完整的脚本
现在我们把前面的大部分操作合并到一个完整的脚本中,在其中我们将进行下列操作:
- 更改带标签的单元格 (1,1) 的背景颜色和字体颜色;
- 创建包含我们正在使用的五个单元格的范围 (A1:A5) 并更改字体大小;
- 创建包含带有四个物理学家名字的单元 (A2:A5) 的范围并更改背景颜色;
- 选择列 A 并使用 Autofit() 方法来重新设置列的大小,以便所有的文本都适合;
- 创建只包含 A1 的范围并对列 A 进行排序。
Code: Select all
objExcel := ComObjCreate("Excel.Application")
objExcel.Visible := True
objExcel.Workbooks.Add
objExcel.Cells(1, 1).Value := "Name"
objExcel.Cells(1, 1).Font.Bold := TRUE
objExcel.Cells(1, 1).Interior.ColorIndex := 30
objExcel.Cells(1, 1).Font.ColorIndex := 2
objExcel.Cells(2, 1).Value := "Schr?dinger"
objExcel.Cells(3, 1).Value := "Heisenberg"
objExcel.Cells(4, 1).Value := "Bohr"
objExcel.Cells(5, 1).Value := "Einstein"
objRange := objExcel.Range("A1","A5")
objRange.Font.Size := 14
objRange := objExcel.Range("A2","A5")
objRange.Interior.ColorIndex := 36
objRange := objExcel.ActiveCell.EntireColumn
objRange.AutoFit()
objRange2 := objExcel.Range("A1")
objRange.Sort(objRange2, ComObjMissing(), ComObjMissing(), ComObjMissing(), ComObjMissing(), ComObjMissing(), ComObjMissing(), 1)
就这些吗?
基础教程到这里就结束了,不管您信不信,您可以在系统管理脚本中使用的所有奇妙的方法,我们都还没有接触到。例如,我们还没有讨论使用 Excel 来创建图表或图形的可能性。如果您想对 Excel 进行深入的学习以执行更多更高级的操作,可以将下面两种方法结合起来:
- 通过 VBA 帮助简单的熟悉 Excel 中的数据对象模型,并学习其中的例子;
- 通过 Excel 的宏功能录制手动进行的操作,并查看相应的 VBA 代码,把它们转换成 AutoHotkey 中的代码是很简单的。
此外,在官方论坛和中文论坛可以找到许多在脚本中操作 Excel 的实用的例子,例如:用AHK_L原生的com处理excel实例