在MATLAB中使用XLSWRITE:如何删除空单元格?

时间:2010-03-11 21:15:55

标签: excel matlab cell

我正在通过MATLAB生成一个Excel文件,我的中间有空单元格。这是我用来初始化空矩阵的代码:

newfile = cell(5,5);
[newfile{:}] = deal('');
[newfile{:}] = deal(' ');

然后我做了一些处理并使用XLSWRITE将数据写入文件。电子表格最终会有一些空单元格和一些数据。是否有一个命令可以删除空行,而不会影响其中包含数据的行?

另一个问题:

有没有办法追加到这个Excel文件?我每天都运行这个文件,并希望自动添加数据,而不是每天手动复制和粘贴。

+++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++ 除上述问题外:

如果我的输出文件看起来像

  

1.8 3 -4.7

     

1.87 3.9 -5.8

     

1.84 2.8 -4.3

     

2 3.2 -4.7

     

2 3.7 -6
  2 3.6 -5.2
  3 4.3 -6.5

     

13 4.2 13.1

     

12 3.5 -6.3

     

1.65 1.9 -4.4

那么当它不在单元格中时,如何删除空行,因为cellfun不适用于此

1 个答案:

答案 0 :(得分:1)

如果我理解你问题的第一部分,你想删除newfile单元格数组中只包含空单元格的行。您可以使用函数CELLFUN来查找空单元格,使用函数ALL查找包含所有空单元格的行,然后使用logical indexing删除这些行:

>> newfile = cell(5,5);  %# Empty cell array
>> newfile(:) = {''};    %# A different way to assign values without DEAL
>> newfile([1 2 4 5]) = {'a'}  %# Make some non-empty cells

newfile = 

    'a'     ''     ''     ''     ''
    'a'     ''     ''     ''     ''
     ''     ''     ''     ''     ''
    'a'     ''     ''     ''     ''
    'a'     ''     ''     ''     ''

>> emptyIndex = cellfun('isempty',newfile)  %# Logical index of empty cells

emptyIndex =

     0     1     1     1     1
     0     1     1     1     1
     1     1     1     1     1
     0     1     1     1     1
     0     1     1     1     1

>> newfile = newfile(~all(emptyIndex,2),:)  %# Removes 3rd row

newfile = 

    'a'     ''     ''     ''     ''
    'a'     ''     ''     ''     ''
    'a'     ''     ''     ''     ''
    'a'     ''     ''     ''     ''

编辑:如果使用空格(newfile)而不是空字符串' '初始化单元格数组'',则必须更改在上面的代码中计算emptyIndex的方式。 CELLFUN参数'isempty'应更改为@(x) strcmp(x,' ')以获得相同的结果。



关于第二个问题,您可以在调用XLSWRITE时指定要添加数据的文件中的工作表和行/列范围。如果您每天添加一次文件,最简单的解决方案可能是添加一个以日期作为名称的新工作表。以下内容将M中的数据写入文件fileName,添加一个以当前日期和时间命名的新工作表:

xlswrite(fileName,M,datestr(now));