2014-02-04 1 views
1

Я застреваю, пытаясь экспортировать данные на основе Matlab, чтобы преуспеть. Я много пробовал, и решить эту проблему было невозможно. После многих дней я пробовал использовать код ниже, используя окна, и он отлично работает, однако использование этого же для Macintosh больше не работает. Выход заключается в следующем:Экспорт подходящих данных в excel с использованием matlab для macintosh

«Ошибка при помощи dlmwrite (строка 118) Массив ввода ячейки не может быть преобразован в матрицу»

Ищет для получения дополнительной информации, я нашел ответ здесь, (Using "xlswrite" MATLABs for cell arrays containing strings of different size), который Безразлично» t работает идеально. Наконец, я нашел этот метод, который применяется только для Matlab, используя окна (http://www.mathworks.es/matlabcentral/answers/20819-export-uitable-s-data-to-a-spreadsheet-excel).

Надеюсь, вы сможете помочь мне с этой проблемой.

Заранее спасибо

Hector

function Save_File 

hf = figure; 

hExportButton = uicontrol('Parent',hf,'Units',... 
'normalized','Position',[0 0.81 0.22 0.18],'Style','Pushbutton',.... 
'String',' Export Data!','FontSize',20,'Callback',@ExportButton_Callback); 

dat = rand(5,5); 

t=uitable('Data',dat,'ColumnName',{'First','Second','Third','Fourth','Fifth'},... 
'Position',[7 10 500 300]); 

Data=get(t,'Data'); 
ColumnName=get(t,'ColumnName'); 
set(t,'ColumnWidth',{93.5}) 


function ExportButton_Callback(~,~) 

NewData= num2cell(Data,ones(size(Data,1),1),ones(size(Data,2),1)); 
CombData=[ColumnName';NewData]; 
FileName = uiputfile('*.xls','Save as'); 
xlswrite(FileName,CombData); 
end 

end 
+0

Вопрос, вероятно, что у вас есть массив, содержащий как строки и числа, они не могут быть помещены вместе в одну матрицу, я рекомендовал бы просто написать свой файл построчно как CSV. Файл csv можно открыть Excel – MZimmerman6

+0

Это не работает даже в R2013b. Не беспокойтесь о 'xlswrite'. Вы проверили MathWorks FileExchange? Кажется, что есть [несколько вариантов] (http://www.mathworks.com/matlabcentral/fileexchange/index?utf8=kg&term=xlswrite), которые даже не требуют Excel. – horchler

ответ

2

Вы должны быть в состоянии преобразовать массив ячеек в массив чисел с командой cell2mat, а затем использовать csvwrite или dlmwrite.

Если комбинация чисел и строк является проблемой, как указано в моем комментарии выше, вы можете использовать несколько простых циклов, чтобы сделать все это для вас. Я разместил несколько примеров кода ниже.

% Creating some temporary data for proof of concept 
mat = randi([1,5],10,2); 
header = {'Col1','Col2'}; 
cellVals = [header;num2cell(mat)]; 

% the real code that does the writing 
fh = fopen('temp.csv','w'); % open a file with write privileges, will overwrite old versions 
for ii = 1:size(cellVals,1) 
    first = 1; 
    for jj = 1:size(cellVals,2) 
     if first 
      fwrite(fh,num2str(cellVals{ii,jj},'%f')); 
      first = 0; 
     else 
      fwrite(fh,[',',num2str(cellVals{ii,jj},'%f')]); 
     end 
    end 
    fwrite(fh,sprintf('\r\n')); % print line break 
end 
fclose(fh); % close file out when done writing 
+0

Не используйте 'num2str' без второго аргумента для входов с плавающей запятой. 'sprintf ('%. 17g', cellVals {ii, jj})) будет намного лучше. – horchler

+0

Уважаемый @ MZimmerman6, Благодарим вас за помощь и предложения. Ваш образец кода отлично работает. Большое спасибо за вашу любезную помощь !!!! – Hector

+0

@horchler хороший улов. Обратите внимание, что все флаги формата видны [здесь] (http://www.mathworks.com/help/matlab/ref/num2str.html#btf97wk) – MZimmerman6