Function works well in Matlab but does not work properly as a Matlab Executable. Why does it not work?

3 views (last 30 days)
I am running 2014b. My code reads an excel file, runs an excel macro, and then reads the data to find matches. It charts each match on a graph. Works great in Matlab but not so great as an executable!
function FindLinearityCCValues()
%Day = 'Day1'
failures = []
filename = uigetdir
cd(filename)
fileinfo = dir('*.dat')
Day = fileinfo(1).date
Day = num2str(Day(1:end-9))
h = waitbar(0,'Please wait...');
% prompt = {'Enter Date of Testing'};
% dlg_title = 'Input Date';
% num_lines = 1;
% defaultans = {'mmddyy'};
% Day = inputdlg(prompt,dlg_title,num_lines,defaultans);
files = dir( fullfile(pwd,'*.txt') )
S = files.name
S = S(1:end-4)
% Day = 'Day1';
ExcelApp = actxserver('Excel.Application');
ExcelApp.Visible = 1;
ExcelApp.Workbooks.Open(fullfile(pwd,'\test.xlsm'));
ExcelApp.Run('runmacro', S)
% hold on
%
% ExcelApp.Run('openDATfile')
ExcelApp.ActiveWorkbook.Save;
fprintf('continued')
% opendatafiles()
[status, sheets] = xlsfinfo('Test.xlsm');
Table = xlsread('Test.xlsm', 'Table');
SensorIDs = Table(:, 1);
ModuleIDs = Table(:, 14);
ModuleIDs(isnan(ModuleIDs)) = [];
for y = 1:size(ModuleIDs)
ModuleDatas{y} = xlsread('test.xlsm', num2str(ModuleIDs(y)));
end
ModuleDatas
totalvalues = size(SensorIDs,1)
%wintol = datenum([0 0 0 0 0 ]);
wintol = .0001;
t = table([], [], [], [], [], 'VariableNames', {'SensorID', 'FinalSensorData', 'p', 'r2', 'oxygen'});
for x = 2:size(SensorIDs)
try
StepTimes = Table(x+1,:)
Module = StepTimes(11);
% ModuleData = xlsread('Test.xlsm', num2str(Module));
SensorID = SensorIDs(x);
strSensorIDs = num2str(SensorIDs(x));
if strSensorIDs(length(strSensorIDs)) == '1'
strSensorIDs(length(strSensorIDs)) = 'A'
ind = find(ModuleIDs == Module)
ModuleData = ModuleDatas{ind};
CCTimes = ModuleData(:,1);
CCTimesSensor = ModuleData(:,2);
elseif strSensorIDs(length(strSensorIDs)) == '2'
strSensorIDs(length(strSensorIDs)) = 'B'
CCTimesSensor = ModuleData(:,5);
elseif strSensorIDs(length(strSensorIDs)) == '3'
strSensorIDs(length(strSensorIDs)) = 'C'
CCTimesSensor = ModuleData(:,8);
elseif strSensorIDs(length(strSensorIDs)) == '4'
strSensorIDs(length(strSensorIDs)) = 'D'
CCTimesSensor = ModuleData(:,11);
elseif strSensorIDs(length(strSensorIDs)) == '5'
strSensorIDs(length(strSensorIDs)) = 'E'
CCTimesSensor = ModuleData(:,14);
elseif strSensorIDs(length(strSensorIDs)) == '6'
strSensorIDs(length(strSensorIDs)) = 'F'
CCTimesSensor = ModuleData(:,17);
elseif strSensorIDs(length(strSensorIDs)) == '7'
strSensorIDs(length(strSensorIDs)) = 'G'
CCTimesSensor = ModuleData(:,20);
elseif strSensorIDs(length(strSensorIDs)) == '8'
strSensorIDs(length(strSensorIDs)) = 'H'
CCTimesSensor = ModuleData(:,23);
end
%BreakInIndex = find(CCTimes <= StepTimes(2) + wintol & CCTimes >= StepTimes(2)-wintol, 1)
Step1Index = find(CCTimes <= StepTimes(3) + wintol & CCTimes >= StepTimes(3)-wintol, 1)
Step2Index = find(CCTimes <= StepTimes(4) + wintol & CCTimes >= StepTimes(4)-wintol, 1)
Step3Index = find(CCTimes <= StepTimes(5) + wintol & CCTimes >= StepTimes(5)-wintol, 1)
Step4Index = find(CCTimes <= StepTimes(6) + wintol & CCTimes >= StepTimes(6)-wintol, 1)
Step5Index = find(CCTimes <= StepTimes(7) + wintol & CCTimes >= StepTimes(7)-wintol, 1)
Step6Index = find(CCTimes <= StepTimes(8) + wintol & CCTimes >= StepTimes(8)-wintol, 1)
Step7Index = find(CCTimes <= StepTimes(9) + wintol & CCTimes >= StepTimes(9)-wintol, 1)
Step8Index = find(CCTimes <= StepTimes(10) + wintol & CCTimes >= StepTimes(10)-wintol, 1)
FinalSensorData = [CCTimesSensor(Step2Index), CCTimesSensor(Step3Index), CCTimesSensor(Step4Index),CCTimesSensor(Step5Index),CCTimesSensor(Step6Index),CCTimesSensor(Step7Index), CCTimesSensor(Step8Index)];
Times = [CCTimes(Step2Index),CCTimes(Step3Index),CCTimes(Step4Index),CCTimes(Step5Index),CCTimes(Step6Index),CCTimes(Step7Index), CCTimes(Step8Index)]
Concentrations = [50, 100, 150, 200, 250, 300, 350];
Oxygen = 100 * (CCTimesSensor(Step8Index) - CCTimesSensor(Step7Index))/CCTimesSensor(Step7Index)
figure1 = figure;
%axes1 = axes('Parent',figure1)
%hold(axes1,'all');
%scatter(CCTimes(1:length(CCTimes)),CCTimesSensor(1:length(CCTimes)), 'red', 'd')
scatter(CCTimes(Step1Index:Step8Index),CCTimesSensor(Step1Index:Step8Index), 'red', 'd')
hold on
scatter(Times, FinalSensorData, 'blue', 'd');
StepTimes(4:10)
scatter(StepTimes(4:10), FinalSensorData, 'yellow', 'd');
FinalSensorData = 10000*(FinalSensorData-1.3);
p = polyfit(Concentrations,FinalSensorData,1);
coefs = num2str(p(1));
f = polyval(p,Concentrations);
[r2 rmse] = rsquare(FinalSensorData,f);
title(strSensorIDs)
xlabel('Date and Time')
ylabel('Volts')
%ylim([0,5])
annotation('textbox', [0.4,0.8,0.1,0.1],...
'String', strcat('Slope = ', coefs, ' Linearity = ', num2str(r2)));
cd(filename)
cd ../
try
saveas(figure1,strcat(pwd, '\Sensors\', strSensorIDs,'\', Day, '.jpg'));
fprintf('saved')
catch
mkdir(strcat(pwd, '\Sensors\', strSensorIDs))
saveas(figure1,strcat(pwd, '\Sensors\', strSensorIDs,'\', Day, '.jpg'))
fprintf('error caught')
end
close
hold off
if x == 2
t = table(SensorID, FinalSensorData, p, r2, Oxygen)
else
t = [t; table(SensorID, FinalSensorData, p, r2, Oxygen)]
end
catch
failures{length(failures)+1} = strSensorIDs
close
end
waitbar(x / totalvalues)
end
close(h)
failures
try
docs = xlsread('SlopesandLinearity.xlsm')
lastvalue = num2str(length(docs)+2)
spot = strcat('A', lastvalue)
writetable(t, 'SlopesandLinearity.xlsm', 'Sheet', 1, 'Range', spot)
catch
writetable(t, 'SlopesandLinearity.xlsm')
end
cd(filename)
end
  3 Comments

Sign in to comment.

Answers (0)

Categories

Find more on Startup and Shutdown in Help Center and File Exchange

Tags

Products

Community Treasure Hunt

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

Start Hunting!