Как удалить всю строку со значениями, отсутствующими только в некоторых столбцах? - PullRequest
2 голосов
/ 23 февраля 2012

Мне нужно удалить все строки с пустыми столбцами в файле Excel с помощью программирования Matlab. У меня есть несколько листов в одном файле 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, но мне нужно удалить строку, содержащую пустые значения. Любая помощь приветствуется.

Ответы [ 3 ]

2 голосов
/ 23 февраля 2012

Если вы используете XLSREAD для чтения ваших данных, он автоматически заполнит пустые ячейки значениями NaN. Поэтому вы можете использовать функции ANY и ISNAN , чтобы удалить строки, содержащие значения NaN, и сохранить новые данные в файл, используя XLSWRITE , например так:

data = xlsread('oldfile.xls');
xlswrite('newfile.xls', data(~any(isnan(data), 2), :));
1 голос
/ 24 февраля 2012

Вот как вы можете обнаруживать и удалять строки с пустыми ячейками, используя 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

Он сохраняет тот же измененный файл, поэтому убедитесь, что у вас есть резервная копия во время тестирования !!!

1 голос
/ 23 февраля 2012

Поскольку ваша матрица данных будет иметь размерность (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...