aardio无需VBA,同样可以交互式操作当前打开的ExcelWPS

职场菊菊子 2024-05-06 21:07:58
引言

我们都知道,交互式操作当前打开的Excel或者WPS最方便的方式,一般是通过VBA完成一些自动化操作。其实也可以通过代码方式,获取当前打开的Excel文件,并进行自动化操作,此时就无需VBA。本文跟大家分享通过国产编程语言aardio代替VBA完成一些自动化的工作。

操作步骤

aardio操作当前打开的Excel或者WPS,通常需要遵循以下步骤:

获取当前打开的Excel根据业务诉求,查询或者修改单元格的值设置单元格格式保存

aardio提供了com.excel组件用于操作Excel和WPS,该组件当前封装的内容比较少,具体需要查看微软MSDN文档。但是常用的操作其实并不多,本文会涉及到一些常用操作Excel的方法。依次按照上面的步骤来讲解。

获取当前打开的Excel

使用com.excel组件新建Excel或者打开当前Excel。交互式操作Excel针对当前打开的Excel或者WPS文件,可以通过下面的方法来实现。

var excel, err = com.excel(false)

考虑到一些可能获取失败的问题,简单封装了一个方法,获取当前正在工作的Excel。

import com.excel;getActiveExcel = function(){ var running = true var excel, err while(running) { excel, err = com.excel(false) assert(excel, err) var wb = excel.ActiveWorkbook if(wb == null){ excel.Quit() } else { running = false } } return excel}获取当前正在工作的工作簿和工作表

aardio中可以分别通过ActiveWorkbook和ActiveSheet获取当前活动的工作簿和工作表。

var excel = getActiveExcel() var wb = excel.ActiveWorkbook var sht = wb.ActiveSheet获取当前活动的单元格

aardio中,可以通过excel.ActiveCell获取当前活动的单元格。

var cell = excel.ActiveCell设置值和获取值

aardio可以通过Cells或者Range来获取单元格,然后再通过Value2属性获取和设置单元格的值,通过Formula设置单元格公式信息。

var cell = excel.ActiveCell //获取当前单元格 console.log(cell.Value2) console.log(sht.Cells(1,1).Value2) console.log(sht.Range("B2").Value2)

我们添加一列D列,并D列赋值。

var totalRows = sht.UsedRange.Rows.Count sht.Range("D1").Value2 = "Added" for(i=2;totalRows;1){ sht.Range("D"+i).Formula = string.format("=C%d + 1", i) }获取当前选区信息

交互式操作Excel的时候,通常需要获取当前用户选择的单元格或者选区。前面提到的ActiveSheet可以获取到当前选择的一个单元格。可以通过excel.Selection操作用户选定的区域。

import string.builder;// 获取当前选区信息 var sel = excel.Selection console.log(string.format("选区地址,%s", sel.Address(false, false))) for(i=0;sel.Rows.Count-1;1){ var sb = string.builder() for(j=0;sel.Columns.Count-1;1){ sb.append(sht.Cells(sel.Row+i,sel.Column+j).Value2 + " ") } console.log(string.format("%2d,%s", i+1, tostring(sb.trim()))) }设置单元格颜色和边框

通常情况下,处理完Excel数据之后,还需要整理一下Excel的格式。通过Interior属性设置单元格颜色,Borders属性设置单元格边框。

// 设置颜色 sht.Range("D1:D"+totalRows).Interior.ColorIndex = 15 // Excel内置颜色,取值范围1-255 // 设置边框 var borders = sht.Range(sht.Cells(1,1), sht.Cells(totalRows,4)).Borders borders.Weight = excel.xlHairline borders(excel.xlInsideVertical).Weight = excel.xlContinuous // 内部边框保存

保存Excel可以通过Save保存在原来的位置,或者SaveAs保存在一个新的位置。

excel.Save()// 或者另存为excel.SaveAs(path)退出Excel

交互式场景下,通常不需要在代码中主动退出Excel进程。如果实在需要,可以通过Quit方法退出Excel进程。

excel.Quit()完整代码

下面是案例的完整代码。

import console;import com.excel;import string.builder;getActiveExcel = function(){ var running = true var excel, err while(running) { excel, err = com.excel(false) assert(excel, err) var wb = excel.ActiveWorkbook if(wb == null){ excel.Quit() } else { running = false } } return excel}testExcel2 = function(){ var excel = getActiveExcel() var wb = excel.ActiveWorkbook var sht = wb.ActiveSheet var cell = excel.ActiveCell var totalRows = sht.UsedRange.Rows.Count // 获取值 console.log(cell.Value2) console.log(sht.Cells(1,1).Value2) console.log(sht.Range("B2").Value2) // 设置值 sht.Range("D1").Value2 = "Added" for(i=2;totalRows;1){ sht.Range("D"+i).Formula = string.format("=C%d + 1", i) } // 获取当前选区信息 var sel = excel.Selection console.log(string.format("选区地址,%s", sel.Address(false, false))) for(i=0;sel.Rows.Count-1;1){ var sb = string.builder() for(j=0;sel.Columns.Count-1;1){ sb.append(sht.Cells(sel.Row+i,sel.Column+j).Value2 + " ") } console.log(string.format("%2d,%s", i+1, tostring(sb.trim()))) } // 设置颜色 sht.Range("D1:D"+totalRows).Interior.ColorIndex = 15 // 设置边框 var borders = sht.Range(sht.Cells(1,1), sht.Cells(totalRows,4)).Borders borders.Weight = excel.xlHairline borders(excel.xlInsideVertical).Weight = excel.xlContinuous // 保存 excel.Save()}testExcel2();console.pause();
0 阅读:22

职场菊菊子

简介:感谢大家的关注