2016-07-05 64 views
0

所以我基本上在MatLab中有一個小腳本,我正在使用一個更大的程序。該腳本實質上是將數據寫入Excel文件。如何修改我的MatLab腳本以正確寫入Excel?

腳本跨細胞水平寫入數據和如下:寫A-Z列之間數據時

function writevar(x,k,filename) 
    col = char(64+k); 
    N = size(x,1); 
    Rg = sprintf([col '1:' col '%i' ],N); 
    xlswrite(filename,x,Rg) 
end 

該腳本適用完美。但是,一旦它到達Z列,它就會崩潰。我如何修改腳本以便它能夠在Z列之外繼續寫入AA,AB等(它需要正確地向下到CR)。

謝謝。

+0

你的問題是線'字符(64 + K)'。一旦你達到'Z'的ASCII碼(90),你將得到'['(91)'的ASCII碼。 您需要處理這種情況,在左側添加第二個字符並將第一個字符重置爲64(ASCII代表'A')。這樣你就可以毫無問題地獲得ZZ。 –

+0

@BlackAdder啊我明白了,謝謝! – Cypher236

+0

[將Excel列號轉換爲Matlab中的列名]可能的重複(http://stackoverflow.com/questions/14261648/convert-excel-column-number-to-column-name-in-matlab) – excaza

回答

1

您正在處理範圍爲[1, 26]k的值。在你的輸入中,推測列AA應該是k = 27,所以你需要對此做一些特殊的數學運算。下面是應該轉換k到列名在一般情況下,一個片段:

k = k - 1; % Convert to zero-based for ease of processing 
col = ''; 
while k ~= 0 
    % Prepend higher digits 
    col = [char(mod(k, 26) + 65) col]; 
    k = floor(k/26); 
end 
+0

這是完美的非常感謝! – Cypher236

1

一個處理這種方式(看看黑爵士的評論)是

function writevar(x,k,filename) 
    if (k > 26) { 
    col = [char(64+ceil(k/26)) char(64+mod(k,26))]; 
    else 
    col = [char(64+k); 
    end 
    N = size(x,1); 
    Rg = sprintf([col '1:' col '%i' ],N); 
    xlswrite(filename,x,Rg) 
end 
+0

這個解決方案只能到'ZZ'列。否則,請參閱瘋狂物理學家的答案。 – Paamand

+0

謝謝你的回答!看看它如何完成它仍然很有幫助! – Cypher236

+1

我強烈懷疑你的代碼不起作用。上次我檢查過,花括號只用於MATLAB中的單元陣列。 –