2016-07-05 59 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中的单元阵列。 –