Error When Using Writetable Function

Hi All,
I have the following code:
f={tSampleName cMeasuredFo cMeasuredD56Fe cMeasuredD26Mg cFeUncertainty cMgUncertainty cFeInterp cMgInterp cMagmaMgNum cOlivineFo cTemperature cDtrsquared cDiffusionCoef cyears1mm cyears2mm cyears3mm cyears4mm cyears5mm};
ResultsTable=cell2table(f);
writetable(ResultsTable,'CodeResults.xlsx');
In which all the inputs to f are 9x1 cells. When I try and run this code, I receive the following error message:
Error using writetable
Unable to perform assignment because the size of the left side is 1-by-1 and the size of the right side is 1-by-9.
Could someone please tell me what I'm doing wrong here? I would like to create a table in excel that shows all of my information stored in ResultsTable.
Thanks,
Jonathan

1 Comment

For reference, here's what getReport() returns for the error you got, assuming I did get the same the error:
Unable to perform assignment because the size of the left side is 1-by-1 and the size of the right side is 1-by-9.
Error in tabular/writeXLSFile (line 132)
newVarj(:,cnt+(1:num)) = newVarjj;
Error in table/write (line 211)
writeXLSFile(t,fname,ext(2:end),otherArgs);
Error in writetable (line 155)
write(a,filename,varargin{:})
Error in [my file] (line 9)
writetable(ResultsTable,'CodeResults.xlsx');

Sign in to comment.

 Accepted Answer

Tommy
Tommy on 23 Jun 2020
Edited: Tommy on 23 Jun 2020
It seems like writetable() has trouble handling the case where a variable in your table contains a cell which itself contains an Nx1 cell array. Does it work if you concatenate your original cell arrays using square brackets?
f=[tSampleName cMeasuredFo cMeasuredD56Fe cMeasuredD26Mg cFeUncertainty cMgUncertainty cFeInterp cMgInterp cMagmaMgNum cOlivineFo cTemperature cDtrsquared cDiffusionCoef cyears1mm cyears2mm cyears3mm cyears4mm cyears5mm];
ResultsTable=cell2table(f);
writetable(ResultsTable,'CodeResults.xlsx');
(edit)
This results in the error:
T = table({num2cell(1:9)'});
writetable(T,'CodeResults.xlsx');
This doesn't:
T = table({num2cell(1:9)});
writetable(T,'CodeResults.xlsx');

4 Comments

Hi Tommy,
Thank you for your response. I modified my code to be as such:
f=[tSampleName cMeasuredFo cMeasuredD56Fe cMeasuredD26Mg cFeUncertainty cMgUncertainty cFeInterp cMgInterp cMagmaMgNum cOlivineFo cTemperature cDtrsquared cDiffusionCoef cyears1mm cyears2mm cyears3mm cyears4mm cyears5mm];
T = table({num2cell(1:9)});
writetable(T,'CodeResults.xlsx');
Yet upon doing so, I generate the attached excel file, which does not contain the information that I'm looking for. Did I not implement your advice correctly?
Apologies, I may have caused some unnecessary confusion. Try this:
f=[tSampleName cMeasuredFo cMeasuredD56Fe cMeasuredD26Mg cFeUncertainty cMgUncertainty cFeInterp cMgInterp cMagmaMgNum cOlivineFo cTemperature cDtrsquared cDiffusionCoef cyears1mm cyears2mm cyears3mm cyears4mm cyears5mm];
ResultsTable=cell2table(f);
writetable(ResultsTable,'CodeResults.xlsx');
Those two bits after the edit were to demonstrate that a cell in your table can contain a row cell array but not a column cell array.
This works perfectly, thanks again.
Awesome, happy to help!

Sign in to comment.

More Answers (0)

Categories

Asked:

on 22 Jun 2020

Commented:

on 23 Jun 2020

Community Treasure Hunt

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

Start Hunting!