🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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" ~~~