ahk控制excel系列1工作表和简单的单元格操作

    我个人用excel还是蛮多的,之前都是用vba,现在想用ahk控制对象来替代vba的效果,省的学两个语言麻烦.

    本来打算一篇文章写完,不过感觉不知道多久才能发出来,所以一点一点就开始发了,文章内容有借鉴社区同类型的文章以及群友的帮助.

;删除工作表以及关掉excel的屏幕刷新简单的用法
objExcel.Application.DisplayAlerts:= False
i:=1
Loop % objExcel.Sheets.Count
{ 
 if (objExcel.ActiveSheet.Name="hzn")
    break
objExcel.ActiveSheet.Delete
}
objExcel.Application.DisplayAlerts:= true

 

  ;选中工作表
objExcel.Sheets("hzn").Activate  ;使用sheet1的名字
objExcel.Sheet1.Activate  ;直接引用sheet1,
objExcel.sheets(1).Activate  ;选中工作簿中第一个sheet
objExcel.Sheets.Select  ;全选
;工作表改名一定记得加:
objExcel.ActiveSheet.Name:= "hzn"
objExcel.Sheets("何").Name := "哈哈"
;默认从激活的左边添加,可以先激活表格再添加,vba的在某个表格的方向添加的语法没测试成功
objExcel.Sheets.Add
;删除工作表以及关掉excel的屏幕刷新简单的用法
objExcel.Application.DisplayAlerts:= False
i:=1
Loop % objExcel.Sheets.Count
{ 
 if (objExcel.ActiveSheet.Name="hzn")
    break
objExcel.ActiveSheet.Delete
}
objExcel.Application.DisplayAlerts:= true
;在新的窗口复制一个当前的工作簿
objExcel.sheets("hzn").Copy
;报告和使用当前表格的工作簿的数量,定义为变量
Shtnum:=objExcel.Sheets.Count  
MsgBox,% Shtnum

;活动的工作表
objExcel.ActiveSheet


;提取工作表的名字
i:=1
Loop % objExcel.Sheets.Count
{  
objExcel.sheets(i).Range("A1"):= objExcel.sheets(i).Name
i:=i+1
}



;提取表名到单元格,没有foreach遍历所以不能用thisworkbook,勉强实现
book := objExcel.ActiveWorkbook
book.Sheets.Count 
{   objExcel.sheets(A_Index).Activate
    sheet := book.Sheets(A_Index)
    If (sheet.Name != "汇总") 
    {
        objExcel.Range("A" . A_Index) := sheet.Name
    }
}

 

 

接下来是一些简单的单元格操作

  ;判断一个单元格值的方法
  if (objExcel.Cells(1,1).Value="1.000000")
    MsgBox,1
  else
    MsgBox,2
return


  ; Range选中区域删除
  objExcel.Range("C8:C14").Select
  objExcel.Selection.ClearContents
  
  ;单元格赋值
objExcel.Range("A1"):= 520
 ;简单的对字体进行格式设置,做个示范具体的用vba查
objExcel.Cells(1, 1).Font.Bold := TRUE    ; 将文本设为黑体
objExcel.Cells(1, 1).Font.Size := 24    ; 将字体大小设为 24
objExcel.Cells(1, 1).Font.ColorIndex := 3    ; 将字体颜色设为红色
objExcel.Cells(1, 1).Font.Italic := TRUE
objExcel.Cells(1, 1).Font.Name := "Times New Roman" 
objExcel.Range("A1:B4,D2,F3:G6").Interior.ColorIndex := 9  ;改颜色的暂时只能用这个,另一个测试的有问题

;选中整行整列
objExcel.Range("E5").Activate
objExcel.ActiveCell.EntireRow.Activate
objExcel.ActiveCell.EntireColumn.Activate


;创建包含一个区域的变量
objRange := objExcel.Range("A1:C10")
objCell := objExcel.Range("A1").SpecialCells(11)   ;包含所有数据


;使用while循环输入输入数字,比loop简单一些,运用了内部变量循环次数
while, (A_Index < 10)
{
    strCell := Chr(A_Index + 64) . "1"
    objExcel.Range(strCell).value := A_Index
}




;清除所有,清除内容和格式
objExcel.Range("B1:B10").Clear
objExcel.Range("B1:B10").ClearContents
objExcel.Range("B1:B10").ClearFormats


;合并单元格
 objExcel.Range("C8:C14").Select
 objExcel.Selection.Merge 
 objExcel.Selection.UnMerge 
 
 
;清除空行的根据vba改的ahk,非常复杂
lngFirstRow:=objExcel.ActiveSheet.UsedRange.Row
lngLastRow:=lngFirstRow + objExcel.ActiveSheet.UsedRange.Rows.Count - 1
Loop 
{
  if (objExcel.Application.WorksheetFunction.CountA(objExcel.Rows(lngLastRow))=0)
  {
    objExcel.Rows(lngLastRow).Delete
  }
  lngLastRow:=lngLastRow-1
}until (lngLastRow=lngFirstRow)

 

 

 

都是一些简单的vba改的,可以通过这些示例观察出ahk怎么用对象的,自己多测试测试就发现其实很简单,不要怕错.

给TA捐赠
共{{data.count}}人
人已捐赠
其他

AutoHotkey使用API函数检测蓝牙设备状态

2022-1-25 16:37:30

其他

AutoHotkey执行VBA代码的例子

2022-1-25 23:04:27

6 条回复 A文章作者 M管理员
  1. AHK中文社区
    1河许人给您打赏了¥2
  2. AHK中文社区

    不错?

  3. user13732

    入坑,瞌睡送枕头,谢谢谢谢~~

  4. dbgba
    dbgba给您打赏了¥2
  5. iadngos

    谢谢分享

个人中心
购物车
优惠劵
有新私信 私信列表
搜索