Python Plotly:如何在Excel中嵌入完全交互式Plotly图形?
我正在尝试将交互式plotly(或bokeh)绘图嵌入excel 为此,我尝试了以下三种方法:Python Plotly:如何在Excel中嵌入完全交互式Plotly图形?,python,excel,vba,plotly,plotly-python,Python,Excel,Vba,Plotly,Plotly Python,我正在尝试将交互式plotly(或bokeh)绘图嵌入excel 为此,我尝试了以下三种方法: 将Microsoft Web浏览器用户表单嵌入excel,如下所示: 这可以工作并允许加载联机和脱机html 创建绘图html ''' 使用在excel中重新绘制webbrowser对象。导航到本地plotly.html。横幅上弹出 “…限制此文件显示可访问计算机的活动内容” 单击横幅,我遇到以下错误: 可以在浏览器中打开相同的HTML 有没有办法在excel中显示交互式绘图?交互式绘图需要jav
在excel中重新绘制webbrowser对象。导航到本地plotly.html。横幅上弹出
有没有办法在excel中显示交互式绘图?交互式绘图需要javascript才能工作。出于安全原因,Excel会阻止该javascript。您可以轻松地将静态图像放入excel
在这个问题中已经解决了在excel中包含javascript的挑战:正如@jerlich所提到的,excel阻止javascript。如果你想要完全的交互性,你应该尝试他们链接的解决方法 如果您希望至少具有某种程度的可控性或交互性,请尝试使用
xlwings
。使用excel按钮,您仍然可以在excel和Python之间进行一些通信(包括读取数据和发送图形)
这些限制是:
- 只能使用数据条目和按钮,而不是默认的绘图交互功能。许多可以复制,但这将是更多的工作
- 它只能在您可以设置python脚本的计算机上工作(不过,xlwings pro似乎允许您将程序存储在文件中)
- 似乎您需要通过保存然后添加图形来传递plotly图形,因为直接传递它们需要xlwings pro。使用MatPlotLib可以在没有pro的情况下直接传递
我喜欢你的问题!我希望我能给你一个更好的答案,但似乎你能实现任何远程类似于交互式plotly plot的东西的唯一方法是使用并遵循下面列出的步骤,包括这样的plot函数:
from pyxll import xl_func, plot
import plotly.express as px
@xl_func
def plotly_plot():
# Get some sample data from plotly.express
df = px.data.gapminder()
# Create a scatter plot figure
fig = px.scatter(df.query("year==2007"),
x="gdpPercap", y="lifeExp",
size="pop", color="continent",
log_x=True, size_max=60)
# Show the figure in Excel using pyxll.plot
plot(fig)
这将生成以下绘图:
唉,这将不是一个完全互动的情节,就像我们都知道和喜欢的那样,因为它也在同一页上声明:
您在Excel中看到的绘图将导出为图像,因此
交互式元素将不可用。制作半互动的
绘图您可以向函数中添加参数,以控制绘图的方式
完成后,当这些参数更改时,将重新绘制绘图
但据我所知,这是你在你的问题中所寻求的最接近的。如果您不局限于Excel,而是某种程度上局限于Microsoft领域,其中一位评论员提到,您可以在PowerBI中释放一个完全交互式的绘图。如果这是一个选择,你应该仔细看看。这种方法使用了
R
,不过…最后,在与微软和微软的讨论后,我成功地将交互式绘图带到了excel中
要将Microsoft网页插入excel,必须在注册表编辑器中更改兼容性标志
计算机\HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\16.0\Common\COM兼容性{8856F961-340A-11D0-A96B-00C04FD705A2}
将DWord 0更改为400
现在,您可以将web浏览器对象插入excel,逐步详细信息如下所示
通过添加用于使用X-UA兼容HTML元标记的标记,手动编辑plotly生成的HTML文件
最初从plotly生成的HTML文件如下所示
<html>
<head><meta charset="utf-8" /></head>
<body>
正确,excel webbrowser将打开html,但在打开精心创建的“test1.html”时失败。但是,“test1.html”可以在浏览器(chrome、IE等)中打开。在IE中,需要启用ActiveX控件,但在其他情况下,它可以正常工作。当HTML试图使用JavaScript时,就会出现问题,您必须在Microsoft Excel中启用宏(和JS)!您可以共享plotly html文件吗?我想做一些测试。@QHarr要复制HTML,需要运行上面第2步“创建绘图HTML”中的代码,这将把HTML保存到定义的位置。下一步是加载到excel,此时出现上述错误,单击“是”会出现第二个错误“Plotly is undefined”Hi@jerlich,作为免责声明,我(还)不熟悉COM对象,查看了链接答案,但我不知道如何利用它解决此问题,请您概括一下要遵循的步骤好吗?我对pyxll感到困惑,Python中已经存在免费的COM互操作性。pyxll需要钱。完全互动的情节也在运作,检查这里我不同意XLL的建议。Python已经免费提供了COM互操作性。这听起来太棒了!但我无法让它在我这边发挥作用。我收到
运行时错误438-对象不支持此属性或方法。
我在Windows 10上以.xlsm
文件运行它。你愿意分享更多关于你的设置的细节吗?@Vesland我也在win10中运行,我在这里保存了我的.xlsm文件->和用于在这里生成html的python代码->。如果你需要什么,尽管问。@Vignesh,这太棒了!非常感谢您,最简单的修复有时是最难的-我不知道您是如何发现的,但它是有效的!我试图重新激活/重新分配悬赏,但该选项对我来说没有出现。@vestlands,我正在运行Win10,Office2019@vestland我已经在这里的一个博客上发布了它,因为它是一个大故事。试试看,给我一个反馈
<html>
<head><meta charset="utf-8" /></head>
<body>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
</head>
<body>
Sub Button4_Click()
ActiveSheet.WebBrowser1.Navigate "file:///C:/Users/vignesh.rajendran/Desktop/test5.html"
End Sub