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 阅读:20

職場菊菊子

簡介:感謝大家的關注