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."

37 次查看(过去 30 天)
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 个评论
John Doe
John Doe 2019-10-7
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 2019-10-7
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);

请先登录,再进行评论。

采纳的回答

John Doe
John Doe 2019-10-7
编辑:John Doe 2019-10-8
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 个评论

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Get Started with MATLAB 的更多信息

产品


版本

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by