Advanced Module Importing¶
xlSlim supports importing modules that depend on packages not located in the site-packages folder. Typically these would be packages developed by you, your colleages or other teams within your organisation.
Additionally, xlSlim lets you control which functions are imported from a module and allows you to rename the functions. This is often useful when Python modules are large or have unclear function names.
Let’s assume your colleages have developed a package area_calculators containing various functions to calculate areas.
import math
def area(r: float) -> float:
"""Calculates the area of a circle as πr²"""
return math.pi * r ** 2
def area(l: float, w: float) -> float:
"""Calculates the area of a rectangle as l x w"""
return l * w
def area(l: float) -> float:
"""Calculates the area of a square as l x l"""
return l * l
This package is located in the folder “another_location” that could be on your local PC or a network drive.
You have written Python code in calculations.py that uses the above calculators to determine the area of various complex shapes:
from area_calculators.circle import area as circle_area
from area_calculators.square import area as square_area
from area_calculators.rectangle import area as rectangle_area
def complex_area(l: float, w: float, r: float) -> float:
"""Return the area of a complex shape with the area of a square with sides l, a rectangle
with sides l and w, and a circle with radius r."""
return circle_area(r) + square_area(l) + rectangle_area(l, w)
def another_complex_area(l: float, w: float, r: float) -> float:
"""Return the area of a complex shape with the area of two squares with sides l, a rectangle
with sides l and w, and a circle with radius r."""
return circle_area(r) + 2 * square_area(l) + rectangle_area(l, w)
def yet_another_complex_area(l: float, w: float, r: float) -> float:
"""Return the area of a complex shape with the area of two squares with sides l, two rectangles
with sides l and w, and a circle with radius r."""
return circle_area(r) + 2 * square_area(l) + rectangle_area(l, w)
Note
All the Python code and Excel files shown are available from github in the xlslim-code-samples repo. I highly recommend downloading the samples from github. The Excel workbooks contain many tips and tricks.
Save the Python code as new files on your PC. I saved the files in my Documents folder with the area_calculators package files saved in a “another_location” folder also under my Documents folder.
Open Excel and enter this RegisterPyModule()
formula (amending the location to match where you saved the calculations.py file):
=RegisterPyModule("C:\Users\russe\Documents\calculations.py")
The registration fails as xlSlim doesn’t know where to find the area_calculators package.
Close and reopen Excel, enter this amended formula:
=RegisterPyModule("C:\Users\russe\Documents\calculations.py",,,,"C:\Users\russe\Documents\another_location")
Now the module registration works as we have told xlSlim where to look for additional Python code. We could have passed a range of additional locations too.
Filtering and Renaming Functions¶
Our module has registered but it has added every function to Excel:
We are really only interested in two functions: complex_area and another_complex_area.
We can restrict the functions imported by passing an Excel range with their names to the RegisterPyModule()
call.
This results in only the selected functions being registered with Excel:
This is looking good, but we really wanted to have nicer function names in Excel. xlSlim allows you to rename the functions by passing a second column of Excel function names as shown in B2:B3:
Now we have successfully imported only the two functions we chose and we have given them better names!
All with no code changes as usual.