I keep getting the error, "Unable to write to file 'xxxx.xlsx'. You may not have write permissions or the file may be open by another application."

40 views (last 30 days)
I keep receiving this error when attempting to write tables to Excel from MATLAB.
%% Velocity Tables
T1 = table(vx1,'VariableNames',{'CummulativeVelocity'});
T2 = table(vy1,'VariableNames',{'CummulativeVelocity'});
T3 = table(vz1,'VariableNames',{'CummulativeVelocity'});
T4 = table(vx2,'VariableNames',{'CummulativeVelocity'});
T5 = table(vy2,'VariableNames',{'CummulativeVelocity'});
T6 = table(vz2,'VariableNames',{'CummulativeVelocity'});
T7 = table(vx3,'VariableNames',{'CummulativeVelocity'});
T8 = table(vy3,'VariableNames',{'CummulativeVelocity'});
T9 = table(vz3,'VariableNames',{'CummulativeVelocity'});
T10 = table(vx4,'VariableNames',{'CummulativeVelocity'});
T11 = table(vy4,'VariableNames',{'CummulativeVelocity'});
T12 = table(vz4,'VariableNames',{'CummulativeVelocity'});
filename = 'Velocity2.xlsx';
writetable(T1,filename,'Sheet',1,'Range','A1');
writetable(T2,filename,'Sheet',1,'Range','C1');
writetable(T3,filename,'Sheet',1,'Range','E1');
writetable(T4,filename,'Sheet',2,'Range','A1');
writetable(T5,filename,'Sheet',2,'Range','C1');
writetable(T6,filename,'Sheet',2,'Range','E1');
writetable(T7,filename,'Sheet',3,'Range','A1');
writetable(T8,filename,'Sheet',3,'Range','C1');
writetable(T9,filename,'Sheet',3,'Range','E1');
writetable(T10,filename,'Sheet',4,'Range','A1');
writetable(T11,filename,'Sheet',4,'Range','C1');
writetable(T12,filename,'Sheet',4,'Range','E1');
Here is the code I am using. The code works fine for the first instance of writetable, but the error will come up when attempting to run any other instance. I have found that I can manually end the Excel process in Task Manager, but this has to be done every time, while also creating a second copy of the worksheet. This second worksheet is the one that has the new table written in it. So, in order to continue the process I have to rename the copy and delete the previous version.
There must be a way to either better write this code (I am still pretty green), or to add something to fix this error. I don't kow what either of these solutions would be. Also, Excel is closed for each run of writetable.
  2 Comments
John Doe
John Doe on 7 Oct 2019
A few things...
  1. Don't dynamically name variables in workspace
  2. You don't want to be calling writetable repeatedly, it should all be done in one operation.
  3. Where ever you have multiple repeated lines like that, there is an easier way
Can you show the code you used to create vx1, vy1 vz1 etc. Lets get that in to better format then deal with creating the xlsx.
Jesse Finnell
Jesse Finnell on 7 Oct 2019
Here is the code used to create all velocity vectors. They come from raw data from an accelerometer.
%% Integration to Velocity
% 480 CFH
vx1 = cumtrapz(ax1);
vy1 = cumtrapz(ay1);
vz1 = cumtrapz(az1);
% 960 CFH
vx2 = cumtrapz(ax2);
vy2 = cumtrapz(ay2);
vz2 = cumtrapz(az2);
% 2580 CFH
vx3 = cumtrapz(ax3);
vy3 = cumtrapz(ay3);
vz3 = cumtrapz(az3);
% 3600 CFH
vx4 = cumtrapz(ax4);
vy4 = cumtrapz(ay4);
vz4 = cumtrapz(az4);

Sign in to comment.

Accepted Answer

John Doe
John Doe on 7 Oct 2019
Edited: John Doe on 8 Oct 2019
I've updated the answer to resolve your specific issue. Though I would suggest doing all processing in MATLAB not excel since that is what its for. With this solution all the data is stored in a cell array idt. Each cell idt{1} for example contains 1 set of test data from the accel.
idt{1} = [ax1 ay1 az1]; % quick fix - but try import your data in to one variable, rather than directly in to workspace.
idt{2} = [ax2 ay2 az2];
idt{3} = [ax3 ay3 az3];
idt{4} = [ax4 ay4 az4];
for k = 1:4
res{k} = cumtrapz(idt{k}(:,:))
res{k} = array2table(res{k}) % Convert data to table
res{k}.Properties.VariableNames = {'a1_X', 'a1_Y' 'a1_Z'} % Assign variable names for columns
writetable((res{k}),'results.xlsx','sheet',k) % Writetable to excel sheet
end
Without exporting to excel all you require is:
idt{1} = [ax1 ay1 az1]; % quick fix - but try import your data in to one variable, rather than directly in to workspace.
idt{2} = [ax2 ay2 az2];
idt{3} = [ax3 ay3 az3];
idt{4} = [ax4 ay4 az4];
for k = 1:4
res{k} = cumtrapz(idt{k}(:,:))
end
Ask a question regarding calculating velocity here and we can have a look.
  5 Comments
John Doe
John Doe on 8 Oct 2019
Updated answer, please accept.
Ask a new question on completing the rest of your analysis in MATLAB.

Sign in to comment.

More Answers (0)

Products


Release

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!