在写作时调用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") 

这工作,但我有一个不需要的行为:

  1. 每次xlwings将此公式写入单元格时,都会执行由HYPERLINK公式引用的play_audio()代码(意思是播放audio,瓶颈写入过程)。 我希望excel在用户单击超链接时评估公式,但似乎是由工作簿中的其他事件(如保存,closures或其他事件)触发的。

我回顾了这个特定的文章,并回顾了这个参考页面,但是我想避免必须在VBA中编写解决scheme,并尽可能保持所有代码在同一个py文件中一致。

有任何想法吗?

谢谢!