在 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');
我正在尝试使用 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');