0

前言:我的 Applescript 获取一个 Excel 文件,并将其数据复制到一个新的纯文本文件中。

我无法在与现有 Excel 文件相同的位置写入新文本文件,但没有原始文件的文件名。

例如:我的 Excel 文件是“FilenameA.xls”,当我保存新的文本文件时,它会保存为“FilenameA.xlsFilenameB.txt”

如何将这个新文件保存到相同的位置,但使用我自己的文件名?

注意:它在我使用时有效,(path to desktop as text)但我不会总是将这些保存到我的桌面。

set myFile to open for access (path to desktop as text) & blahBlah & ".txt" with write permission

当我尝试下面的脚本时,它给了我原始文件名加上我的新文件名。

set myFile to open for access (fileName) & blahBlah & ".txt" with write permission

注意:fileName指的是原始 Excel 文件的路径。

本质上,我想要与原始文件相同的结果, (path to desktop as text)但可以灵活地将文件保存到访问原始文件的任何文件夹中。

4

2 回答 2

1

感谢您澄清您的要求。基本上,您需要在代码中添加一个“容器”行,并在新的文件路径名中使用它。如果您发布了更多代码,我可以适当地调整其语法,但这应该足以让您弄清楚。下面是一些示例代码,允许您选择一个 excel 文件,收集该文件的容器,提示您输入新文件名,然后允许您编写新的 txt 文件:

set excelFile to (choose file with prompt "Choose Excel file :" of type {"xls", "xlsx"} without invisibles)

tell application "Finder"
    set containerPath to (container of excelFile) as string
    set oldFilename to name of excelFile
end tell

set newFilename to text returned of (display dialog "Enter name of the resulting text file" default answer oldFilename)

set myFile to open for access (containerPath & newFilename & ".txt") with write permission
try
    -- add content to myFile
    write "Here's some groovy content added to the file." to myFile
    close access myFile
on error
    close access myFile
end try
于 2014-02-26T07:16:43.270 回答
0

我有一些改进上述解决方案的建议。

如果您使用 Excel 文件的“显示名称”,它将不包括文件扩展名:

set oldFilename to displayed name of excelFile

这样,您最终会在同一文件夹中看到“Spreadsheet.xlsx”和“Spreadsheet.txt”,而不是“Spreadsheet.xlsx.txt”。</p>

而且您不必像这样使用 open for access 编写自己的文本文件,因为 TextEdit 可以为您编写文本文件:

tell application "TextEdit"
    make new document with properties {text:"The text file contents."}
    close document 1 saving in file (containerPath & newFilename & ".txt")
end tell

这样,您就可以利用 TextEdit 对文本文件的复杂性。您创建了一个 UTF-8 文本文件,并且不存在打开文件以进行写访问或任何其他低级磁盘错误的风险。

您还可以使用 TextEdit 打开现有文件并将文本添加到文件末尾并再次保存:

tell application "TextEdit"
    open file (containerPath & newFilename & ".txt")
    set the text of document 1 to the text of document 1 & return & "Some more text."
    close document 1 saving yes
end tell
于 2014-08-06T22:29:07.223 回答