2015-02-11 299 views
0

我嘗試使用octave中io程序包中的xlswrite(使用Windows 7 64位加載3.8.0,io 2.0.2)在Octave中將單元格數組寫入Excel電子表格中。在Octave中使用xlswrite時出錯

單元陣列看起來像這樣:

>> 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 

如果我按照錯誤線索,並轉到行62的\private\spsh_prstype.m,我有:

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

所以它顯然得到的東西做的是福請致電cellfun,但我不確定該從哪裏出發。在spsh_prstype.m中有cellfun的其他函數調用。

我已經在互聯網上查找到的最接近的是this question,但沒有提供解決方案。

歡迎任何幫助/建議。

+0

我已經編輯和刪除iOS的標籤,正在等待審覈 – 2015-02-11 15:15:08

+0

@GaryRiches謝謝,我錯把標籤的意思的I/O,而不是iOS版。 – am304 2015-02-11 15:15:58

回答

0

沒有收到任何答案,我會回答我的問題:-)

我還沒有制定出了什麼問題,以及如何解決這個問題的根本原因,但我已經找到了解決辦法。看來問題在於第四列中的元素是向量而不是標量。看來要寫入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');