Работа с XLSWRITE в MATLAB: Как удалить пустые ячейки? - PullRequest
1 голос
/ 12 марта 2010

Я генерирую файл Excel через MATLAB, и у меня есть пустые ячейки в середине. Вот код, который я использую для инициализации пустой матрицы:

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 Ответ

1 голос
/ 12 марта 2010

Если я правильно понял первую часть вашего вопроса, вы хотите удалить все строки в массиве ячеек newfile, которые содержат только пустые ячейки. Это можно сделать с помощью функции CELLFUN для поиска пустых ячеек, с помощью функции ALL для поиска строк, содержащих все пустые ячейки, а затем с помощью логического индексирования чтобы удалить эти строки:

>> 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));
...