How to export data from Matlab to excel for a loop?

后端 未结 3 937
旧时难觅i
旧时难觅i 2021-01-03 15:26

I have a code for \"for loop\"

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

now

相关标签:
3条回答
  • 2021-01-03 16:08

    You can also do for yourself what xlswrite does internally, which is interact using COM. I prefer to do this when I have a frequently used excel template or data file, because it allows for more control (albeit with more lines of code).

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

    This would allow you to save new data to new ranges without re-opening excel each time.

    Even better would be to define an oncleanup function (as does xlswrite) to prevent lost file locks (especially when you're doing things like exiting out of debug mode):

    ...
    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 讨论(0)
  • 2021-01-03 16:12

    You can store sim outputs in a vector (y(ii)) and save in the sheet with a single write. This is also more efficient since you perform a single bulk-write instead of many small writes.

    Specify the first cell and y will be written starting from there.

    last = someNumber;
    for i=1:last statement... y(i)=sim(net, I); end
    
    xlswrite('output_data.xls', y', 'output_data', 'A1');
    

    If you prefer specify the range write ['A1:A',num2str(last)] instead of A1.

    If you really want to write within the loop try:

    for ii=1:last
        ...
        y=sim(net, I);
        xlswrite('output_data.xls', y, 'output_data', sprintf('A%d',ii));
    end
    
    0 讨论(0)
  • 2021-01-03 16:18

    You can put xlswrite after for loop.You just want to do is save you result in a matrix.This function can write a matrix. also,you can use [] to combine string to change the range.

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

    But,this is a bad way.You should open and write Excel file every time.

    0 讨论(0)
提交回复
热议问题