我在 julia 中将 xf 定义为 XLSX 文件
xf=XLSX.readxlsx(file)
现在我想打印xf的文件名 就像
xf.name
我该怎么办?
我使用了 xf.name 但它不起作用。 请记住,xf 是 Excel 文件,而不是工作表。 我知道对于工作表,我们可以使用sheet.name来获取名称,但是对于文件,我如何获取名称?
xf 应包含文件名信息,如您所见
xf=XLSX.readxlsx("12as.xlsx")
print(xf)
它正确显示文件名“12as.xlsx”。我怎样才能得到这些信息?
XLSXFile("12as.xlsx") 包含 30 个工作表
图纸名称尺寸范围
测试 034 472x7 A1:G472
测试031 472x7 A1:G472
已解决:
xf.source
最佳答案
您加载到 Julia 中的 XLSX 文件是数据的抽象表示,这些数据可能存在于文件系统中,也可能不存在,因此 XLSX 数据本身没有与之关联的“文件名”概念。但是,如果您读取带有 xf = XLSX.readxlsx(file)
的 XLSX 文件,然后是对对象 file
的引用存储为xf.source
。因此,如果您通过传递 readxlsx
来读取 XLSX 文件字符串参数 file
,文件名可以打印如下:
using XLSX
xf = XLSX.readxlsx("location/of/file.xlsx")
println(xf.source) # prints "location/of/file.xlsx"
但是,您应该知道xf.source
is defined as type Union{AbstractString,IO}
in the source code ,这反射(reflect)出 XLSX.readxlsx
可以使用继承自IO
的对象来调用,像这样:
using XLSX
open("location/of/file.xlsx") do f
xf = XLSX.readxlsx(f) # Works just fine to open the file this way.
println(xf.source) # ERROR: ArgumentError: write failed, IOStream is not writeable
end
此代码抛出异常,因为 xf.source
是对 IOStream
的引用用open(file)
打开的对象,和println(io::IO)
将尝试将换行符写入 io
,在本例中不可写,因为 open(file)
默认为只读模式。
“文件名”的概念是文件系统知道的东西,但不是 XLSX 文件必须知道或关心的东西。如果您需要知道您打开的文件的名称,您可以使用此 xf.source
hack,但它 (a) 可能会更改的包的未记录的内部功能,并且 (b) 仅当您通过传递 XLSX.readxlsx
打开文件时才有效。一个字符串。因为你必须知道要使用的文件名xf.source
无论如何,最好将其存储在其他变量中并在必要时引用:
using XLSX
file = "location/of/file.xlsx"
xf = XLSX.readxlsx(file)
println(file) # prints "location/of/file.xlsx"
关于julia - 如何从 Julia 中的 XLSX 获取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76255460/