在Octave中使用xlswrite时出错

时间:2015-02-11 15:14:22

标签: excel octave export-to-excel

我正在尝试使用Octave中的xlswrite包中的io将单元格数组写入Octave中的Excel电子表格(3.8.0,io 2.0.2加载,使用Windows 7 64位)。

单元格数组如下所示:

>> pump_backlash(1:3,:)
ans =
{
  [1,1] = Machine #
  [2,1] = Machine_01
  [3,1] = Machine_02
  [1,2] = Station #
  [2,2] = 1
  [3,2] = 1
  [1,3] = Pump channel #
  [2,3] = 1
  [3,3] = 2
  [1,4] = Backlash
  [2,4] = 

    57  65  62

  [3,4] =

    58  49  50

}

除了它有更多的行。第一行由“标题”(字符串)组成,然后第一列是与机器ID相关的字符串,第二列和第三列是整数(标量),单元格数组的第四列是1x3向量整数(尽管如果测试/测量因任何原因失败,第4列中的单元格有时会为空)。

我尝试使用以下命令写入Excel:

>> xlswrite('Pump_cal_results.xlsx',pump_backlash)

,我得到的错误信息如下:

Creating file Pump_cal_results.xlsx
error: cellfun: all values must be scalars when UniformOutput = true
error: called from:
error:   C:\Octave\Octave-3.8.0\share\octave\packages\io-2.0.2\private\spsh_prstype.m at line 62, column 6
error:   C:\Octave\Octave-3.8.0\share\octave\packages\io-2.0.2\private\__COM_oct2spsh__.m at line 108, column 10
error:   C:\Octave\Octave-3.8.0\share\octave\packages\io-2.0.2\oct2xls.m at line 189, column 18
error:   C:\Octave\Octave-3.8.0\share\octave\packages\io-2.0.2\xlswrite.m at line 178, column 20

如果我按照错误追踪并转到\private\spsh_prstype.m的第62行,我有:

ptr = cellfun ("isnan", obj);                         ## Find NaNs & set to BLANK

所以它显然与cellfun的函数调用有关,但我不知道从那里去哪里。 cellfun中有spsh_prstype.m的其他函数调用。

我在互联网上搜索到的最接近的是this question,但没有提供解决方案。

欢迎任何帮助/建议。

1 个答案:

答案 0 :(得分:0)

没有收到任何答案,我会回答我自己的问题: - )

我还没有找出问题的根本原因以及解决方法,但我找到了解决方法。似乎问题在于第4列中的元素是向量而不是标量。似乎要写入Excel,单元格数组中的所有元素必须是“统一的”,我认为这意味着你不能混合使用标量和向量。

所以我的解决方法是重新排列单元格数组,使它现在看起来像:

>> pump_backlash(1:3,:)
ans =
{
  [1,1] = Machine #
  [2,1] = Machine_01
  [3,1] = Machine_02
  [1,2] = Station #
  [2,2] = 1
  [3,2] = 1
  [1,3] = Pump channel #
  [2,3] = 1
  [3,3] = 2
  [1,4] = Backlash #1
  [2,4] = 57
  [3,4] = 58
  [1,5] = Backlash #2
  [2,5] = 65
  [3,5] = 49
  [1,6] = Backlash #3
  [2,6] = 62
  [3,6] = 50
}

即。单元格数组现在有6列而不是4列,并且没有更多的向量,只有标量。

然后调用xlswrite就可以了:

xlswrite('Pump_cal_results.xlsx',pump_backlash,'Backlash','','com');