Paano Gumawa at Magpatakbo ng Macro sa LibreOffice Calc sa Linux

Ang LibreOffice ay ang sagot ng mundo ng FOSS sa mainstream at proprietary na Microsoft Office Suite. Binuo ng nangungunang mga developer at nag-aambag ng software ng Office Productivity, nag-aalok ito ng kumpletong kapalit para sa Microsoft Office sa maraming Operating System.

Ang LibreOffice app na katumbas ng Microsoft Excel ay tinatawag na LibreOffice Calc. Ito ay may ilang mga tampok at isang interface na katulad ng Excel. Mayroon itong built-in na Macro engine upang bumuo at magpatakbo ng Macros para sa automation. Gayunpaman, hindi nito sinusuportahan ang Visual Basic, ngunit sinusuportahan ang sarili nitong wika; LibreOffice Basic, para sa mga macro sa programming.

Ang LibreOffice suite ay na-pre-install sa karamihan ng mga distribusyon ng Linux, kabilang ang Ubuntu, Debian, Fedora, at CentOS.

Paglikha At Pagpapatakbo ng Macro sa LibreOffice Calc

Una, gumawa tayo ng worksheet na may ilang sample na data.

Upang buksan ang Macros organizer, pumunta sa Tools » Macros » Organize Macros » LibreOffice Basics. Bubuksan nito ang LibreOffice Basic Macros window tulad ng ipinapakita sa screenshot sa ibaba.

Maglagay ng bagong pangalan para sa Macro, pagkatapos ay i-click ang Bagong button sa kanang ibabang bahagi ng window.

Dapat mo na ngayong makita ang screen ng Macro editor sa LibreOffice Basic.

Gaya ng nakikita natin, ang mga manu-manong ginawang Macro ay ginawa bilang default sa ilalim ng “My Macros & Dialogs -> Standard -> Module1”.

Sa kasalukuyan, mayroong dalawang macro: Ang isa ay Pangunahin, na isang default na walang laman na macro, at iba pa ay pagsusulit, ang macro na ginawa namin sa itaas. Papahusayin natin ngayon ang pagsubok na macro.

Gagawin ng aming macro ang mga sumusunod na gawain:

  • Suriin kung aling mga tao ang may propesyon na manunulat
  • Gumawa ng bagong sheet
  • Ilipat ang lahat ng mga entry para sa mga manunulat sa bagong sheet

Ang sumusunod ay ang aming Macro:

Sub test rem Ilipat ang mga entry na may propesyon na Writer sa bagong sheet na dim crs(8) bilang object dim j bilang Integer dim prof bilang object dim i bilang Integer dim sh bilang object dim sh2 bilang object sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1 para sa i = 1 hanggang 5 x = 1 prof = sh.GetCellByPosition(3, i) rem I-store ang kumpletong row sa variable Kung prof.string = "Writer" Pagkatapos crs(j) = sh.getCellRangeByPosition(0, i, 3, i) j = j + 1 End If next i rem Ngayon lumikha ng bagong sheet at isulat ang data na ito doon ThisComponent.Sheets.insertNewByName("Writers", 1) sh2 = ThisComponent.Sheets(1) i = 0 Do Habang hindi IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 Loop End Sub

Hayaan akong ipaliwanag sa iyo ang macro sa itaas sa bawat seksyon.

Sub test. . . End Sub

pagsusulit ay ang pangalan ng aming macro, kaya sa code, ito ay tinutukoy bilang Sub test (sub = subroutine). Katulad din, tinatapos namin ang macro code na ito sa pahayag End Sub. Tandaan na ang mga pahayag na ito ay awtomatikong idinaragdag kapag gumawa kami ng macro mula sa menu, bagama't maaaring direktang isulat ng user ang macro code dito at ang pangalan ng Subroutine ay ituturing bilang macro name.

rem 

Lahat ng komento sa LibreOffice Basic ay nagsisimula sa keyword rem. Ang isang kumpletong linya na nagsisimula sa rem ay itinuturing na komento. Ang isa pang paraan ay ang paggamit ' (iisang baligtad na kuwit) sa simula ng linya.

dim crs(8) bilang object dim j bilang Integer dim prof bilang object dim i bilang Integer dim sh bilang object dim sh2 bilang object

Ito ay variable na deklarasyon sa LibreOffice Basic. Ang pangkalahatang syntax ay madilim bilang . Upang magdeklara ng array, gumamit ng syntax na katulad ng variable na crs, kung saan 8 ang haba ng array.

sh = ThisComponent.Sheets(0) crs(0) = sh.getCellRangeByPosition(0, 0, 3, 0) j = 1

ThisComponent ay tumutukoy sa kasalukuyang dokumento. Sa kasong ito, ito ay isang Calc Worksheet. Nilo-load namin ang Sheet na may index 0, ibig sabihin, ang unang sheet, sa variable na sh. Mayroon ding mga function para mag-load ng Sheet gamit ang pangalan.

Susunod na tawagan namin ang function getCellRangeByPosition ng object sh at i-load ito sa array crs. Ang Cell Range ay tumutukoy sa isang pangkat ng mga cell sa sheet batay sa posisyon.

Tandaan na ang mga argumento, 0, 0 (column 0, row 0) ay tumutukoy sa panimulang cell ng range, at 3, 0 (column 3, row 0) ay tumutukoy sa nagtatapos na cell ng range. Sa gayon 0, 0, 3, 0 ay tumutukoy sa unang (heading) na hilera ng aming sample sheet.

para sa i = 1 hanggang 5 x = 1 prof = sh.GetCellByPosition(3, i) rem I-store ang kumpletong row sa variable Kung prof.string = "Writer" Pagkatapos crs(j) = sh.getCellRangeByPosition(0, i, 3, i ) j = j + 1 Wakas Kung susunod i

Gumagamit kami ng a para sa pahayag na i-loop sa mga hilera. Ang para sa bloke ay nagtatapos sa a susunod statement, na nagdaragdag ng variable i sa dulo ng bawat pag-ulit.

Susunod na tinatawag namin ang isang function GetCellByPosition ng object sh. Nagpapasa kami ng mga parameter (3, i), ibig sabihin, sa bawat pag-ulit, ang object ng cell sa column 3 at row i ay kinukuha sa variable na prof.

Pagkatapos ay gumagamit kami ng isang Kung statement para suriin kung ang value sa cell prof ay “Writer”. Kung ito ay, muli naming tawagan ang function getCellRangeByPosition, sa pagkakataong ito, kasama ang i kapalit ng numero ng row ng simula at pagtatapos. Muli, iniimbak namin ito sa array crs.

ThisComponent.Sheets.insertNewByName("Writers", 1) sh2 = ThisComponent.Sheets(1)

Una, lumikha kami ng isang bagong sheet na may pangalan Mga manunulat, sa posisyon 1, na kung saan ay ang ika-2 posisyon, bilang index ay nagsisimula sa 0. Pagkatapos ay makakakuha tayo ng isang bagay ng bagong likhang sheet na ito, upang maipasok natin ang data ng mga manunulat sa sheet na ito.

i = 0 Gawin Habang hindi IsNull(crs(i)) sh2range = sh2.getCellRangeByPosition(0, i, 3, i) sh2range.setDataArray(crs(i).getDataArray) i = i + 1 Loop

Ang Gawin habang Ang pahayag ng loop ay ginagamit kapag gusto nating mag-loop batay sa mga kundisyon, kumpara sa pag-loop sa isang hanay ng mga halaga ng integer, kung saan ginagamit ang paggamit para sa gaya ng ipinakita kanina. Dito, umiikot kami hanggang crs(i) ay hindi null.

Susunod, tumawag ulit kami getCellRangeByPosition sa katulad na paraan tulad ng dati upang makakuha ng range object sa bagong sheet.

Sa wakas, tinatawag namin ang dalawang function: getDataArray na nagbabalik ng data mula sa crs(i), ibig sabihin, isang hilera ng data (tungkol sa isang manunulat) mula sa unang sheet; at isinusulat namin ang data na ito sa hanay ng cell sa bagong sheet gamit setDataArray.

Panghuli, i-save ang macro mula sa File » I-save lahat opsyon.

Upang patakbuhin ang macro, pumunta sa Mga Tool » Macro » Run Macro at piliin ang iyong Macro mula sa direktoryo ng "My Macros" sa Macro Selector Library. I-click ang Takbo button pagkatapos pumili ng Macro Name.

Ang pagpapatakbo ng macro sa itaas sa aming sample na spreadsheet, ay gumagawa ng sumusunod na resulta.

Ito ang paraan upang lumikha ng mga macro sa LibreOffice. Para sa higit pang impormasyon at mga opsyon, sumangguni sa opisyal na dokumentasyon.

? Cheers!