表格Data可以为下列数据类型:数值矩阵、逻辑矩阵、数值单元数组、逻辑单元数组、字符串单元数组,以及由数值、逻辑值和字符串组成的混合单元数组。
%% 创建一个数据如下的表格: % 1 2 3 4 5 % 2 3 4 5 6 % 3 4 5 6 7 %当选中第4行前5列时,对各列数据进行求和运算,结果放在当前单元格;当选中第6列前3行时, %对各行数据进行求和运算,结果放在当前单元格; %当选中数据项时,检查对应行或列是否已经求和,若已经求和,更新求和结果 function mydatasum() %调用方法:命令行输入datasum然后回车 data = [1:5;2:6;3:7]; data2 = cell(size(data)+1); data2(1:end-1,1:end-1) = num2cell(data); figure uitable('units','normalized','Position',[0.1 0.2 0.85 0.6],'Data',... data2,'ColumnEditable',true,'FontSize',10,'CellSelectionCallback',... @cellsel_callback,'CellEditCallback',@celledit_callback); end %% CellSelectionCallback回调函数 function cellsel_callback(hTab , event) if ~isempty(event.Indices) data = get(hTab,'Data'); iLine = event.Indices(1); iColumn = event.Indices(2); if(iLine == size(data,1) && iColumn <size(data,2)) data{end,iColumn} = sum(cell2mat(data(1:end-1,iColumn))); elseif(iColumn == size(data,2) && iLine < size(data,1)) data{iLine,end} = sum(cell2mat(data(iLine,1:end-1))) end set(hTab,'Data',data); end end %% CellEditCallback 回调函数 function celledit_callback(hTab,event) if isempty(event.Error) data = get(hTab,'Data'); iLine = event.Indices(1); iColumn = event.Indices(2); if(iLine < size(data,1) && iColumn < size(data,2)) if ~isempty(data{iLine,end}) data{iLine,end} = sum(cell2mat(data(iLine,1:end-1))); end if ~isempty(data{end,iColumn}) data{end,iColumn} = sum(cell2mat(data(1:end-1,iColumn))); end set(hTab,'Data',data); end end end