在写入时调用Excel函数作为HYPERLINK公式中的“Link_Location”

时间:2017-06-15 22:12:54

标签: python excel excel-vba udf xlwings vba

我正在使用XLWINGS向Excel添加一些功能。我希望能够使用具有特定编解码器的特定音频播放器在单击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()代码(意味着播放音频并且瓶子处于书写过程中)。我希望excel在用户单击超链接时评估公式,但似乎是由其他事件触发,例如保存,关闭或工作簿中的其他事件。
  2. 我查看了this特定帖子并审核了this参考页面,但我希望尽可能避免在VBA中编写解决方案,并将所有代码保持在同一个py文件中。< / p>

    有什么想法吗?

    谢谢!

0 个答案:

没有答案