在写作时调用HYPERLINK公式中的Excel函数“Link_Location”
我正在使用XLWINGS向Excel添加一些function。 我希望能够使用特定的audio播放器与特定的编解码器播放audio文件,当Excel单元格中的超链接被点击(而不是超链接公式被写入其单元格时)。
xlwings UDF是:
@xw.func(volatile=False) def play_audio(audiofilepath): ''' Use the audioplayer defined at the top of the module as a path to an executable to open the audiofile. The audioplayer auto-closes when the reproduction of the audio file is complete as the timeout parameter is equal to the calculated duration of the file ''' #Get file length in seconds with contextlib.closing(wave.open(audiofilepath,'r')) as f: frames = f.getnframes() rate = f.getframerate() length = frames / float(rate) ''' Use the defined audioplayer to play the file and close out the app after the files duration ''' try: subprocess.run([audioplayer,audiofilepath], timeout = length) except: pass
XLWINGS用于将超链接写入excel的代码是:
write_cell.value = '=HYPERLINK(play_audio("{}"),"OK")'.format(fullpathandfilename)
我也试过:
write_cell.add_hyperlink(address = '=play_audio("{}")'.format(fullpathandfilename),text_to_display ="OK",screen_tip=fullpathandfilename)
所写的excel超链接如下所示:
=HYPERLINK(play_audio("path\to\audio.wav"),"PLAY")
这工作,但我有一个不需要的行为:
- 每次xlwings将此公式写入单元格时,都会执行由HYPERLINK公式引用的play_audio()代码(意思是播放audio,瓶颈写入过程)。 我希望excel在用户单击超链接时评估公式,但似乎是由工作簿中的其他事件(如保存,closures或其他事件)触发的。
我回顾了这个特定的文章,并回顾了这个参考页面,但是我想避免必须在VBA中编写解决scheme,并尽可能保持所有代码在同一个py文件中一致。
有任何想法吗?
谢谢!