【问题标题】:xlsopen doesn't work in windows 10 Octave 4.0.3xlsopen 在 Windows 10 Octave 4.0.3 中不起作用
【发布时间】:2016-10-20 22:18:35
【问题描述】:

我正在尝试只运行简单的代码

f = xlsopen('Libro1.xlsx');

我在 Windows 10 中使用 octave 4.0.3,java 版本 8 更新 111 1.8.0_111-b14

从我目前发现的情况来看:
已经卸载了,重新安装,
确保路径中没有非 ASCII 字符,
安装了最新的 java 版本(没关系?据说 octave windows 安装程序会为您安装一个版本)
加载了 windows 和 io pkgs
io 版本 2.4.3 和 windows 版本 1.2.4
并且仍然收到此错误:

警告:fopen: 'C:/Users/tommy/Documents/Octave\Libro1.xlsx' 通过搜索加载路径找到 警告:调用自 xlsopen 在第 241 行第 7 列 xlsread 在第 197 行第 11 列 prueba4 在第 2 行第 3 列 检测到的 XLS 接口:COM*;警告:找不到 Java 支持(没有 Java JRE?没有安装和加载 Java pkg?)

警告:尝试打开或创建文件 C:\Users\tommy\Libro1.xlsx 时出现 ActiveX 错误 警告:COM_spsh_open:返回值列表中的某些元素未定义 文件 Libro1.xlsx 无法解压。它是正确的文件格式吗? 警告:OCT_spsh_open:返回值列表中的某些元素未定义 没有任何。 警告:xlsopen.m:没有可用接口的“.xlsx”电子表格 I/O 支持。 警告:xlsread:返回值列表中的某些元素未定义 d =

已经看到各种线程,甚至一个具有完全相同的消息但安装 java 解决了它,或者找到了另一种解决方案但未在线程上报告。

【问题讨论】:

    标签: windows octave


    【解决方案1】:

    首先:我只在你的帖子中看到了探测几个接口的警告(没有错误),我猜 xlsopen 自动使用了 OCT 接口,f 之后是有效的。使用 io 包读取 xlsx 有几个接口。见here。我建议使用没有依赖关系的 OCT 接口。如果你真的想要一个基于 Java 的界面,你必须安装 JRE 或 JDK,安装一个支持 Java 的 Octave。

    编辑:现在我看到您的文件 Libro1.xlsx 不在您的工作目录中,看起来您已经使用 addpath 添加了您的 Libro1.xlsx 所在的文件夹,因此“警告:fopen : 'C:/Users/tommy/Documents/Octave\Libro1.xlsx' 通过搜索加载路径找到”。

    但“addpath”不被认为是为 fopen 添加目录。 cd 到您的 Libro1.xlsx 所在的目录(以便在执行 ls 时看到它列出)或使用 fullfile 创建完整文件名并在 xlsopen 中使用它

    【讨论】:

    • 我尝试强制使用 OCT 界面,但仍然收到相同的消息
    • ans = 1 检查请求的接口:OCT*; (* = 默认界面) 警告:fopen: 'C:/Octave/Federico/Analisis_Sectorial\Libro1.xlsx' 通过搜索加载路径警告:从第 241 行第 7 列的 xlsopen 调用 xlsread 第 197 行第 11 列 prueba3 第 2 行2 文件 Libro1.xlsx 无法解压。它是正确的文件格式吗?警告:OCT_spsh_open:返回值列表中的某些元素未定义
    • 警告:xlsopen.m:OCT 不支持的文件类型警告:xlsread:返回值列表中的某些元素未定义
    • 如果我使用代码 \n f= xlsread('Libro1.xlsx','Hoja1','A1:A2','OCT'); 会得到完全相同的消息据我了解,f 应该等于单元格 A1 中的值,但我只得到一个空数组。
    • @TomasGaviño:如果您看到“无法解压缩 Libro1.xlsx”,请确保它没有被其他应用程序锁定(由 excel 打开)并且它是有效的 xlsx。也许您可以上传它并在此处提供链接
    【解决方案2】:

    编辑:仅适用于 Octave 版本

    我会将此作为评论,但我没有足够的声誉

    Octave java 启用

    检查(来自 Octave 控制台)的输出以确定您是否安装了支持 Java 的 Octave

    octave_config_info ("features").JAVA
    

    它应该返回ans = 1

    检查JAVA_HOME

    并检查您的 JAVA_HOME 环境变量

    getenv('JAVA_HOME')
    

    这应该是您的 JRE 的路径(例如 ans = C:\Program Files\Java\jre1.8.0_91

    兼容架构

    Octave 是为与 JRE 相同的架构构建的吗?

    从命令行运行

    java -version
    

    如果在任何地方显示“64 位”,则为 64 位,否则为 32 位。

    从 Octave 终端

    octave_config_info('CC')
    ans = x86_64-w64-mingw32-gcc
    

    表示 Octave 它是为 64 位编译的。

    一个新的 Octave 会话还将显示 Octave was configured for "x86_64-w64-mingw32" 上找到的 64 位版本的信息 unofficial file list我没有安装 32 位,所以我无法确认消息是什么如果它是 32 位的)。

    【讨论】:

    • 我认为这在 Octave 4.0+(或者可能是 3.8+)中没有必要?
    • 你是对的,octave-forge java 包被包含在 Octave 3.8.0 的核心中
    • @Stephen Wade 如果路径是到 jdk 怎么办? ans = C:\Program Files\Java\jdk1.8.0_102 ?尽管如此,使用 COM 和 OCT 接口尝试了 jdk、jre 甚至相应的 bin 文件夹,仍然是相同的消息。我应该尝试 POI 界面吗?认为这仅适用于 linux o mac?
    • JDK 作为路径应该没问题。您的 Octave 是为与 JRE/JDK 相同的架构构建的吗?即 32 位还是 64 位?
    • 我认为最好将文件上传到某个地方,以便其他人可以测试它是否是文件特定的问题。
    猜你喜欢
    • 2016-03-08
    • 2018-12-04
    • 2015-12-12
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2018-02-03
    相关资源
    最近更新 更多