Convert cell array to excel - problem with nested cells

조회 수: 11(최근 30일)
Melissa Jones
Melissa Jones 2021년 10월 17일
댓글: dpb 2021년 10월 18일
I really need to write this data from a cell array into an excel file (you can find it attached or in the printscreen). I've used
xlswrite('data.xls', M2)
writecell(M2, 'data.xls')
and nothing works because I have nested cells and all with different sizes, some even empty. How can this work?
I need data to be separated like this in the excel:
line1 = M{1,1}
line 2 = M{2,1}
line 3 = M{3,1}
line 4 = M{1,2}
line 5 = M{2,2}
line 6 = M{3,2}
...and so on...
Please help!
  댓글 수: 2
Melissa Jones
Melissa Jones 2021년 10월 17일
Could you help out with those loops then, please?

댓글을 달려면 로그인하십시오.

채택된 답변

dpb 2021년 10월 17일
편집: dpb 2021년 10월 18일
Try something like
for i=1:size(M2,1)
for j=1:size(M2,2)
  댓글 수: 7
dpb 2021년 10월 18일
" the solution will be to build the composite cell array in memory first..."
Alternatively, and actually the one I implemented above is to use the FEX submission from Nick Oatley @
which will create a persistent COM object at the beginning of the sequence of writes you want to make and then let you close it when done.
This will make probably an order of magnitude difference in speed and is also not prone to the issues I outlined above if the size of M gets large.

댓글을 달려면 로그인하십시오.

추가 답변(1개)

Walter Roberson
Walter Roberson 2021년 10월 17일
You have several options:
  • write each cell entry as text, perhaps using M2s = cellfun(@mat2str, M2, 'uniform', 0) . If you do that, then Excel will not be able to interpret the results as numeric
  • Provided that you do not have any natural "nan" entries, convert each entry into a column and append a nan to it, and combine the entries. You might need to pad each column to the same length using nan. So the first column would contain 52 double, then a nan, then 34 double, then a nan, then 6 nan (longest column would be 92 entries)
  • find the widest column and pad each of them out to that size. Then rearrange the entries into continuous columns. Your widest is 74 columns, so you would pad each of the 1 x N out to be 1 x 72, using NaN as your padding; then you would rearrange to a cell containing a letter, then 72 cells with numeric values, then another 72 cells of numeric values, and each column would have that length.
  • expand the first column into 52 columns (of 3 rows), expand the second column into 74 columns, the third into 60 columns, and so on, with the number of new colums needed being equal to the widest row in that column. You might need to put in a new row that indicates which original column each entry belonged to.
  댓글 수: 1
Melissa Jones
Melissa Jones 2021년 10월 17일
The first way seemed the simplest.
But Isnt there a way to put each number in a separate cell in excel, disposed as I mention in the original question?

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by