我需要xlsx编写器制作到本地文件的相对路径超链接



目标:在xlsx中有一个超链接,可以通过相对路径打开本地pdf文件

我可以使用该模块通过os.getcwd((生成的绝对路径来完成这项工作……但我需要获取xlsx,将其移动到一个新目录(以及pdfs(,并且不要用write_url((破坏xlsx中编码的链接。我无法在目标目录中运行代码(这会使这个问题消失(,我必须在本地机器上运行它,以生成带有所有链接的xlsx,然后将其移动到新目录,以便其他用户可以看到和使用链接(指向所有将与xlsx一起移动的pdf(。

未知:
如何"网络";在文档工作的外部文件url部分提到。它实际上是在谈论另一个xlsx文件,而不是不同类型的文件,所以它可能根本不起作用。(文档链接:https://xlsxwriter.readthedocs.io/worksheet.html?highlight=write_url#worksheet-写入url(

摘录:

还支持到网络文件的链接。网络文件通常以两个斜杠开头,如>跟随\NETWORK\等。为了在单引号或双引号字符串中生成它,您将>必须转义反斜杠"\\NETWORK\etc"或使用原始字符串r"\NETWORK\etc"。或者,您可以通过使用正斜杠来避免大多数引用问题。这些是>内部转换为反斜杠:

worksheet.write_url('A14', "external:c:/temp/foo.xlsx")
worksheet.write_url('A15', 'external://NETWORK/share/foo.xlsx')
write_url(row, col, url[, cell_format[, string[, tip]]])

编写指向工作表单元格的超链接。

参数:row(int(–单元格行(零索引(。col(int(–单元格列(零索引(。url(字符串(–超链接url。单元格格式(Format(–可选的Format对象。默认为Excel超链接风格string(string(–超链接的可选显示字符串。tip(string(–一个可选的工具提示。

解决方案:write_url()中使用相对路径。

所以excel超链接可以是相对的,也可以是绝对的。您也可以提供它,它将自动处理裁决。如果是相对路径,则excel会在单击超链接时找到自身的路径,然后修改给定的相对路径,或者只使用给定的绝对路径。

示例

foo.xlsx位于C:Desktopfolder

bar.pdf位于C:Desktopfolderfolder2

write_url()中的超链接地址设置为打开bar.pdf:'folder2bar.pdf'

当你点击foo.xlsx中的超链接时,excel将确定foo.xlsx的路径(无论它在哪里,即使你在运行代码构建超链接后移动了它(,然后尝试找到提供的相对路径。

所以想象一下,在制作了foo.xlsx(以及使用write_url()的超链接(之后,将文件夹folder的内容放在桌面上,并删除文件夹folder

现在,foo.xlsx住在C:Desktop

bar.pdf住在C:Destkopfolder2

然后打开xlsx并单击超链接。

Excel将确定xlsx位于C:Desktop,并尝试在C:Desktopfolder2bar.pdf中查找bar.pdf

最新更新