# xlwings with R and Julia
雖然xlwings是一個純Python包,但是有一些跨語言包允許從/與其他語言相對直接使用。 但是,這意味著除了R或Julia之外,你總是需要安裝帶xlwings的Python。 我們推薦[Anaconda](https://store.continuum.io/cshop/anaconda/)發行版,另見[安裝](installation.md)。
## R
R指令適用于Windows,但在Mac上相應的工作方式除外,目前不支持將R函數作為用戶定義函數調用(但是`RunPython`有效,請參閱[使用“RunPython調用Python”](vba.html#運行蟒蛇))。
步驟:
* 安裝 R 和 Python
* Add `R_HOME` environment variable to base directory of installation, .e.g `C:\Program Files\R\R-x.x.x`
* Add `R_USER` environment variable to user folder, e.g. `C:\Users\<user>`
* 添加`C:\Program Files\R\R-x.x.x\bin` 到 `PATH`
* 重新啟動Windows,因為添加環境變量!
### R語言的簡單函數
我們想要從Excel訪問的原始R函數(保存在`r_file.R`中):
~~~
myfunction <- function(x, y){
return(x * y)
}
~~~
Python包裝器代碼:
~~~
import xlwings as xw
import rpy2.robjects as robjects
# 您可能想要使用某個相對路徑或將文件放在R的當前工作目錄中
robjects.r.source(r"C:\path\to\r_file.R")
@xw.func
def myfunction(x, y):
myfunc = robjects.r['myfunction']
return tuple(myfunc(x, y))
~~~
導入此函數后(請參見:[VBA: 用戶自定義函數 (UDFs)](udfs.md)),它將從Excel中作為udf提供。
### R語言的數組函數
我們想要從Excel訪問的原始R函數(保存在`r_file.R`中):
~~~
array_function <- function(m1, m2){
# 矩陣乘法
return(m1 %*% m2)
}
~~~
Python包裝器代碼:
~~~
import xlwings as xw
import numpy as np
import rpy2.robjects as robjects
from rpy2.robjects import numpy2ri
robjects.r.source(r"C:\path\to\r_file.R")
numpy2ri.activate()
@xw.func
@xw.arg("x", np.array, ndim=2)
@xw.arg("y", np.array, ndim=2)
def array_function(x, y):
array_func = robjects.r['array_function']
return np.array(array_func(x, y))
~~~
導入此函數后(請參閱:[VBA: 用戶自定義函數 (UDFs)](udfs.md)),它將作為UDF從Excel中獲得。
## Julia語言
步驟:
* 安裝 Julia 和 Python
* 從交互式Julia解釋器運行`Pkg.add("PyCall")`
然后可以使用以下語法從Julia調用xlwings(冒號負責自動類型轉換):
~~~
julia> using PyCall
julia> @pyimport xlwings as xw
julia> xw.Book()
PyObject <Book [Workbook1]>
julia> xw.Range("A1")[:value] = "Hello World"
julia> xw.Range("A1")[:value]
"Hello World"
~~~