2012-02-23 65 views
2

我需要使用matlab編程刪除excel文件中空列的所有行。我有一個單一的excel文件內的多個表和數據是在一個格式如下:如何使用僅在某些列中缺失的值來刪除整行?

1 2 3 4 5 
2 3 4 5 
5 6 7 8 9 
12 13 14 15 16 
6 2 8 4 
1 2 3 5 7 
9 8 34 3 
3 2 7 8 4 

在上面的例子中,我有以行2中,5空單元,及圖7(第5列中的所有空單元)。我需要找到這些空值和刪除包含這些值的行,即我需要刪除只行2,5和7的最終輸出應該象下面這樣一個Excel文件

1 2 3 4 5 
5 6 7 8 9 
12 13 14 15 16 
1 2 3 5 7 
3 2 7 8 4 

我看了一些解決方案,全零的行被刪除,但在這種情況下,我只在第5列有空單元格,但我需要刪除包含空值的行。任何幫助表示讚賞。

回答

1

既然你的數據矩陣將是一個維度(8,5)中的所有空單元格將是0,所以,你可以做

min_data=min(data,[],2); %find the minimum of the rows 
data(find(min_data==0),:)=[]; %find the rows of zeros and delete them 
+0

似乎是一種處理問題的簡單方法。但如何照顧excel文件中的多張紙並寫入一個新文件? – Sham 2012-03-02 19:02:06

2

如果您使用XLSREAD在數據讀取,它會用NaN值自動填充空單元格。因此,您可以使用的功能ANYISNAN刪除包含NaN值的行並保存新的數據使用XLSWRITE文件,像這樣:

data = xlsread('oldfile.xls'); 
xlswrite('newfile.xls', data(~any(isnan(data), 2), :)); 
+0

似乎是一種處理問題的簡單方法。但如何照顧excel文件中的多張紙並寫入一個新文件? – Sham 2012-03-02 19:02:26

+0

@Sham:如果您有多個工作表,您必須通過指定附加的['sheet'參數](http://www.mathworks.com/help/techdoc/ref/xlsread。)來執行上述操作。 html#inputarg_sheet)用於XLSREAD和XLSWRITE進行操作。 – gnovice 2012-03-02 19:20:23

1

這裏是你如何檢測和刪除使用空單元格的行直接的ActiveX:

e = actxserver ('Excel.Application'); %# open Activex server 
ewb = e.Workbooks.Open('c:\test\test.xlsx'); %# open file (enter full path) 
eur = ewb.ActiveSheet.UsedRange; %# lets simplify using active sheet 
data = cell2mat(eur.Value); %# get numeric data 
idx = find(any(isnan(data),2))'; %# find rows with empty (or text) cells 
for k=idx(end:-1:1) 
    eur.Rows.Item(k).Delete; %# delete entire row from the last one 
end 
ewb.Save %# save to the same file 
ewb.Close(false) 
e.Quit 

它保存相同的修改文件,所以確保你有一個備份,而測試!

+0

謝謝你的男人。它似乎會解決我的問題,但仍需要時間來檢查我的數據。我很感激。 – Sham 2012-03-02 18:59:16