Как экспортировать данные из Matlab в Excel для цикла? - PullRequest
1 голос
/ 30 декабря 2011

У меня есть код "для цикла"

для i = 1: 4 заявление... у = сим (нетто, я); конец

теперь мне нужно экспортировать значение y в лист Excel. для этого я использовал ..

xlswrite ('output_data.xls', y, 'output_data', 'A1')

но моя проблема в том, что идентификатор excel, т. Е. "A1", должен меняться в зависимости от каждой итерации ... в моем случае для итерации 1-> A1, итерации-> A2 и т. Д.

кто-нибудь, пожалуйста, помогите мне .. заранее спасибо. за любую помощь .. или предложение ..

Ответы [ 3 ]

4 голосов
/ 30 декабря 2011

Вы можете сохранить sim выходов в векторе (y(ii)) и сохранить на листе с одной записью. Это также более эффективно, поскольку вы выполняете одну массовую запись вместо множества небольших записей.

Укажите первую ячейку, и начиная с нее будет написано y.

last = someNumber;
for i=1:last statement... y(i)=sim(net, I); end

xlswrite('output_data.xls', y', 'output_data', 'A1');

Если вы предпочитаете указывать диапазон, пишите ['A1:A',num2str(last)] вместо A1.

Если вы действительно хотите писать в цикле, попробуйте:

for ii=1:last
    ...
    y=sim(net, I);
    xlswrite('output_data.xls', y, 'output_data', sprintf('A%d',ii));
end
2 голосов
/ 30 декабря 2011

Вы также можете сделать для себя то, что xlswrite делает внутри, то есть взаимодействует с помощью COM. Я предпочитаю делать это, когда у меня есть часто используемый шаблон Excel или файл данных, потому что он обеспечивает больший контроль (хотя и с большим количеством строк кода).

Excel    = actxserver('Excel.Application');
Workbook = Excel.Workbooks.Open('myExcelFile.xlsx');
MySheet  = Excel.ActiveWorkBook.Sheets.Item(1);

set( get(MySheet,'Range','A1:A10'), 'Value', yourValues);
...
invoke(Workbook, 'Save');
invoke(Excel, 'Quit');
delete(Excel);

Это позволит вам сохранять новые данные в новых диапазонах без повторного открытия Excel каждый раз.

Еще лучше было бы определить функцию oncleanup (как это делает xlswrite), чтобы предотвратить потерю блокировок файлов (особенно когда вы делаете такие вещи, как выход из режима отладки):

...
myWorkbook = Excel.Workbooks.Open(filename,0,true);
cleanUp = onCleanup(@()xlsCleanup(Excel, filename));

function xlsCleanup(Excel,filepath)
    try
        Excel.DisplayAlerts = 0; %// Turn off dialog boxes
        [~,n,e] = fileparts(filepath); %// Excel API expects just the filename
        fileName = [n,e];
        Excel.Workbooks.Item(fileName).Close(false);
    end
    Excel.Quit;
 end
0 голосов
/ 30 декабря 2011

Вы можете поставить xlswrite после цикла for. Вы просто хотите сохранить результат в матрице. Эта функция может записать матрицу.Кроме того, вы можете использовать [], чтобы объединить строку для изменения диапазона.

>> for i=1:4
Range=['A' num2str(i)]
end
Range =
A1
Range =
A2
Range =
A3
Range =
A4

Но это плохой способ. Вам следует каждый раз открывать и писать файл Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...