【发布时间】:2021-04-26 22:12:37
【问题描述】:
我正在使用批处理文件:
@echo off
C:\Octave\Octave-4.4.1\octave.vbs --force-gui --eval batchTest("'%~dp0'")
cmd /c
运行 Octave 脚本
function [] = batchTest(fPath)
disp(fPath);
cd(fPath);
optionNumber = input('Choose option 1 or 2: ');
if optionNumber == 1
fName = input('Input file description: ',"s");
filename = [fName ".xlsx"];
xls = xlsopen(filename,1); % <-- THIS DOES NOT WORK, PRODUCES "FILE POINTER PRESERVED MESSAGE"
xls = oct2xls({"OutputData"},xls,1,"A1");
xlsclose(xls);
end
if optionNumber == 2
filename = "TestFile.xlsx";
xls = xlsopen(filename,1); % <-- THIS WORKS AS EXPECTED
xls = oct2xls({"OutputData"},xls,1,"A1");
xlsclose(xls);
end
在批处理文件的目录中创建一个 Excel 文件。
选项编号 1 会产生“文件指针保留”警告,并且不会创建 Excel 文件。似乎我不能使用由 Octave 的“输入”函数全部或部分创建的任何字符串。使用“.xlsx”输入完整文件名并将该变量传递给“xlsopen”函数没有帮助。选项 2 工作正常,但我需要生成多个文件,因此“fName”描述符很重要。我尝试将 SETLOCAL ENABLEDELAYEDEXPANSION 添加到批处理文件中。我还尝试了使用选项 2 的解决方法,然后添加了
rename("TestFile.xlsx",[fName ".xlsx"])
到 Octave 脚本,但这会在“重命名”函数中产生“无效输入”错误,因此它也不喜欢“输入”创建的字符串。问题仅在于“xlsopen”和“重命名”函数; “输入”功能可以很好地选择选项编号。
当从 Octave 命令行直接执行“batchTest(pwd)”时,任何一个选项都有效。该问题仅在从批处理文件执行时出现。任何建议将不胜感激。
【问题讨论】:
-
“这行不通”:当然不行。您用
oct2xls对象覆盖xls文件句柄。它不再是同一个文件句柄。我更惊讶的是第二个“作品”。如果您向我们展示您的输出而不是仅仅说“它不起作用”,那将真的很有帮助。您的 .bat 文件是否正确传递了预期的路径?作为字符串?使用正确的文件分隔符?你在传递一个unix文件路径吗?视窗?使用有效驱动器?只是文件名?生成的filename是否指向预期的失败并带有有效的路径字符串? (第一个)xls 对象是否正常打开? -
如果我不得不猜测,我猜你的文件名不是你想象的那样,并且那个八度将路径中的反斜杠解释为转义序列。您不应该像那样手动输入路径,而是要使用
fullfile。 -
@Tasos Papastylianou,我很欣赏
fullfile的提示,虽然我只是使用路径名来更改当前工作目录,因此它不会出现在xlsopen函数中,只有文件名。我的问题似乎在 excel 文件问题出现之前就出现了,因为当我执行f1 = "String1"; f2 = input('Input file description: ',"s"); (::type String2::) fExt = ".xlsx"; filename = [f1 f2 fExt]; disp(filename) strncmp(filename,f1,length(f1))时出现:.xlsxg1String2。但是,strncmp 输出为 1,所以它只是看起来显示不正确,实际上并不是 be 那种形式。 -
@smcmi 对,这证实了我的怀疑。当您通过输入收集 f2 时,您不小心将
\r字符附加到您的输入,该字符对应于“回车”字符。您的字符串不包含您认为的内容。输入double(f2)以查看最后是否有一个额外的字符(大概是十进制数 13,\r字符的 ascii 数)。如果您在连接字符串之前在字符串上使用strtrim,它应该可以工作(假设没有其他愚蠢的事情发生)。 -
@TasosPapastylianou,您在上一条评论中所做的每一点都完全正确。
strtrim函数删除了回车,现在一切正常。我最诚挚的感谢!我可以将您的评论标记为已接受的答案吗?
标签: batch-file octave export-to-excel