如何使用Matlab在excel中找到最后一列索引

时间:2015-08-06 15:47:40

标签: excel matlab matrix

我使用Matlab将数据作为矩阵写入excel文件。我的矩阵的维度各不相同,我不提前知道矩阵的维数。假设我有各种维度的矩阵A,B和C.我想要做的是首先将矩阵A写入excel,然后在A之后写入矩阵B,它们之间有1列间隙。我不知道Matlab是否能找到excel中的最后一列索引并在这两个矩阵之间创建一个间隙。

我的代码现在是这样的:

xlswrite('My file.xls',A,'My Sheet','B2');

%%
Here is what I don't know to fill in to find the starting range index for my next matrix. 
%%

xlswrite('My file.xls',B,'My Sheet','newindex');

2 个答案:

答案 0 :(得分:1)

要根据索引编号计算Excel列ID,我创建了以下函数:

function col = excel_column(n)

    %// find LSB
    xlsb = mod(n-1,26)+1 ;
    xmsb = fix((n-1)/26) ;

    %// find MSB (recursively if necessary)
    if xmsb >= 1
        col = [excel_column(xmsb) char(xlsb+64)] ;
    else
        col = char(xlsb+64) ;
    end

这适用于任何数字,但请注意Excel的最大列数(我的版本中最多2^14=16384列)。例如,要显示它处理字母增量,您可以运行简短测试:

>> x = [25:28 233:236 700:705 16383:16385] ;
for n=x
    fprintf('Index: %5d => Column: %s\n', n , excel_column(n) )
end

Index:    25 => Column: Y
Index:    26 => Column: Z
Index:    27 => Column: AA
Index:    28 => Column: AB
Index:   233 => Column: HY
Index:   234 => Column: HZ
Index:   235 => Column: IA
Index:   236 => Column: IB
Index:   700 => Column: ZX
Index:   701 => Column: ZY
Index:   702 => Column: ZZ
Index:   703 => Column: AAA
Index:   704 => Column: AAB
Index:   705 => Column: AAC
Index: 16383 => Column: XFC
Index: 16384 => Column: XFD %// Last real column
Index: 16385 => Column: XFE %// Careful. This column DOES NOT exist in Excel

因此,在您的情况下,您开始在列A处编写矩阵'B...',这是列索引2。 要知道从哪个字母B开始,只需计算A的大小并添加必要的差距即可。 我们假设你的矩阵A有573列。

startIdx_A   = 2 ;         %// Matrix "A" started at column index 2
ncA          = size(A,2) ; %// Number of column in A, should return 573
columnGap    = 1 ;         %// how much gap you want between "A" and "B"

startColumnMatrixB_index = startIdx + ncA + columnGap ; %// index of the first column for Matrix "B"
startColumnMatrixB_excel = excel_column(startColumnMatrixB_index) ; %// return 'VD' (assuming A had 573 columns)

如果您的矩阵非常大(列数),那么在您致电xlswrite

之前,一定要检查一下以确保您不会用完列。

答案 1 :(得分:0)

您可以尝试以下方式:

cellVector= ['A2';'B2';'C2';'D2';'E2']; %...etc as many as you need
cellstart = 'B2';
cellVectorLoc = find(cellVector == cellstart(1)); % Finds where B is located in cellVector  
xlswrite('My file.xls',A,'My Sheet',cellstart);
nextCellLoc = length(A) + cellVectorLoc + 1; % length of A plus location in index + 1 for blank column.  I can't remember if you should use length() or size().
newIndex= cellVector(nextCellLoc,:); % new index
xlswrite('My file.xls',B,'My Sheet',newindex);

请注意,这不会对Z列后的单元格起作用,因为例如cellVectorLoc = find(cellVector == cellstart(1));会在cellVector中找到两个位置,用于列' AA'。

另外,我不记得长度(A)或大小(A)中的哪个元素是指A中的列数。如果长度(A)不是,则使用另一个元素进行游戏给你正确数量的cols。