How can I avoid an "internal exception" xlswrite error?
1 view (last 30 days)
Show older comments
I am currently attempting to write data from a loop into an excel file that already contains data. However, I receive an internal exception error when I attempt to do this (even if I just use a different sheet). When I try to write the data into an empty excel file, I don't have this issue. Any idea how to avoid this error?
%Data Input
filename = 'RocketData.xlsx';
num = xlsread(filename);
%Data Definitions
deltat = num(1,1);
printing = num(2,1);
Vbottle = .002;
f = num(4,1);
Dn = num(5,1)*.0254;
Anozzle = num(6,1)*.00064516;
Aprojected = num(7,1)*.00064516;
mpayload = num(8,1)*.001;
mrocket = num(9,1)*.001;
Pairini = num(10,1)*6894.752728;
Cd = num(11,1);
C = num(12,1);
Li = num(13,1)*.0254;
g = 9.81;
c = 343;
Mair = .029;
gamma = num(17,1);
Patm = num(18,1)*101.325;
rhowater = 1000;
Tamb = num(20,1) + 273.15;
R = 8.314;
%Phase 1 Initial Calculated Values
T = Tamb;
rhoatm = (Mair*Pairini)/(R*T);
rhoair = (Mair*Pairini)/(R*T);
Vairini = (1-f)*Vbottle;
mairini = Pairini*Vairini;
mwaterini = f*Vbottle*rhowater;
mtotal = mrocket + mpayload + mwaterini + Mair;
t = 0;
x = 0;
vrocket = 0;
Vini = (1-f)*Vbottle;
Tini = Tamb;
%Phase 1 Data Initial Calculations
mwater = mwaterini;
counter = 25;
kk = 0;
while mwater > 0
kk = kk + 1
Vair = Vbottle - (mwater/rhowater);
Pair = (mairini * R * T)/(Mair * Vair);
mdotwater = .01;
mwater = mwater - (mdotwater * deltat);
mtotal = mrocket + mwater + mairini;
vwater = C*(2*(Pair-Patm)/(rhowater))^(.5);
Fthrust = mdotwater * vwater;
Fgravity = (mtotal * 9.81);
Fdrag = .01
Fnet = Fthrust - Fgravity - Fdrag;
arocket = (Fnet)/(mtotal);
deltat = 1e-4*kk
if (mod(deltat,.01)==0)
counter = counter + 1;
xlswrite('RocketPrac.xlsx',Vair,1,['B',num2str(counter)]);
xlswrite('RocketPrac.xlsx',Pair,1,['C',num2str(counter)]);
xlswrite('RocketPrac.xlsx',mwater,1,['D',num2str(counter)]);
xlswrite('RocketPrac.xlsx',mtotal,1,['E',num2str(counter)]);
xlswrite('RocketPrac.xlsx',vwater,1,['F',num2str(counter)]);
xlswrite('RocketPrac.xlsx',Fthrust,1,['G',num2str(counter)]);
xlswrite('RocketPrac.xlsx',Fgravity,1,['H',num2str(counter)]);
xlswrite('RocketPrac.xlsx',Fdrag,1,['I',num2str(counter)]);
xlswrite('RocketPrac.xlsx',Fnet,1,['J',num2str(counter)]);
xlswrite('RocketPrac.xlsx',arocket,1,['K',num2str(counter)]);
xlswrite('RocketPrac.xlsx',deltat,1,['A',num2str(counter)]);
end
end
Here is the code I used. Make sure you also use the excel file that is attached (the program reads the data from the excel file).
3 Comments
Answers (1)
Image Analyst
on 20 Apr 2014
You certainly certainly don't want to call xlswrite() that many times! Do you know it has to launch Excel, write out that one number, and shutdown Excel each time. It will take forever. You'd be better off using ActiveX to do it. Just open once using ActiveX, toss all your data in (virtually instantly), then close it once. It will be much, much, MUCH faster. I'm talking seconds instead of minutes or hours. See attached demo.
Or even better, try creating a table and use writetable() to write out your xlsx file. See table in the help (requires R2013b or later).
0 Comments
See Also
Categories
Find more on Spreadsheets in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!