2016-07-05 1 views
0

私は基本的に、はるかに大きなプログラムで使っているMatLabの小さなスクリプトを持っています。このスクリプトは基本的にデータをExcelファイルに書き出します。Excelに正しく書き込むようにMatLabスクリプトを変更するにはどうすればよいですか?

スクリプトは、セルを横切って水平にデータを書き込み、以下の通りである:カラム-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

あなたの問題は、ライン '文字で次のようになります。ここでは一般的なケースでは、列名にkを変換する必要がありスニペットです(64 + k)となる。 'Z'(90)のASCIIコードに達すると、' ['(91)のASCIIコードが得られます。 この場合、左に2番目の文字を追加し、最初の文字を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

kの値を正しく処理しています。範囲は[1, 26]です。おそらくカラムAAはあなたの入力にk = 27となるでしょうから、その上で特別な数学をする必要があります。これを処理(およびブラックアダーのコメントを参照)する

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'にのみ移動します。そうでなければ、Mad Physicistの答えを見てください。 – Paamand

+0

ありがとうございました!どのようにそれがそれを感謝しているか見ることはまだ役立ちます! – Cypher236

+1

あなたのコードがうまくいかないと強く思っています。前回チェックしたとき、中括弧はMATLABのセル配列でのみ使用されていました。 –

関連する問題