【问题标题】:Call Javascript from VBA on Excel on a Mac在 Mac 上的 Excel 上从 VBA 调用 Javascript
【发布时间】:2018-10-01 12:38:16
【问题描述】:

我想在 excel 上创建一个 VBA 宏,单击按钮将打开浏览器(chrome 或 safari)登录到网站,提取所需的浮点值,然后使用该值填充工作表中的给定单元格。

网上有关于如何使用 Internet Explorer 实现此目的的示例,但这在 Mac 上不可用。我也看过使用 Selenium 的指南,但这似乎不适用于 mac。

javascript 本身类似于(在某个网站上打开浏览器后):

document.getElementById("username").value = "username"
document.getElementById("password").value = "password"
document.getElementsByClassName("button")[0].click()
value = parseFloat(document.getElementsByClassName("value")[1].innerText.slice(1))

【问题讨论】:

  • 所以我建议用另一种语言编写程序,然后用 VBA 执行它,如下所示:stackoverflow.com/a/12320294/2446254 我的首选是带有 puppeteer 的 node.js,但你可以使用任何东西! (您可能很难快速了解这一切是如何完成的)
  • 考虑一下 python 和 xlwings。我相信有一个适用于 mac 2016 或更高版本的插件。 docs.xlwings.org/en/stable/addin.html
  • @QHarr 你不能在带有 xlwings 的 mac 上的 python 函数中返回值
  • @PaddyRoddy 谢谢。我不知道。
  • PSA 即使 Mac 上的 xlwings 不支持 UDF,仍然可以运行处理电子表格的 Python 代码。

标签: javascript excel vba macos web-scraping


【解决方案1】:

我通过结合使用python-seleniumxlwings 解决了这个问题。我的 VBA 调用 RunPython ("import python_script; python_script.fun()")

python_script.py

import xlwings as xw
from selenium import webdriver

def fun():
    # Creates a reference to the calling Excel file
    wb = xw.Book.caller()

    # opens chrome
    chrome_driver_path = '/usr/local/bin/chromedriver'
    driver = webdriver.Chrome(chrome_driver_path)

    # open website and login
    driver.get('url')
    driver.find_element_by_id('username').send_keys('username')
    driver.find_element_by_id('password').send_keys('password')
    driver.find_element_by_name('buttonId').click()

    # finds member price sum
    table_body = driver.find_element_by_xpath("//*[@class='classname']").text
    price = float(table_body.split()[2][1:])

    # closes chrome
    driver.quit()

    # changes cell value
    sheet = wb.sheets['sheetname']
    sheet.range('cell').value = price

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2015-09-15
    相关资源
    最近更新 更多