在 Octave 中使用 xlswrite 时出错

Error when using xlswrite in Octave

我正在尝试使用 Octave 中 io 包中的 xlswrite 将元胞数组写入 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

}

除了它有更多的行。第一行由 "headings"(字符串)组成,然后第一列是与机器 ID 相关的字符串,第二和第三列是整数(标量),元胞数组的第四列是1x3 整数向量(尽管如果 test/measurement 由于某种原因失败,第 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 的函数调用有关,但我不确定从那里去哪里。在 spsh_prstype.m.

中还有很多其他函数调用 cellfun

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

任何 help/suggestions 欢迎。

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

我还没有弄清楚问题的根本原因是什么以及如何解决它,但我找到了解决方法。问题似乎在于第 4 列中的元素是向量而不是标量。似乎要写入 Excel,元胞数组中的所有元素都必须是 "uniform",我认为这意味着您不能混合使用标量和向量。

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

>> 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');