本文代码基于Matlab 2021b App Design。
读者可以从此篇文章解决哪些问题:
1、实现表格与Excel之间的相互连接
2、如何通过表格添加、删除数据并保存到Excel
3、自动读取Excel行数,自动添加列名称
4、解决删除表格数据自动填充问题
以下是App的展示:
1、如何实现Table与Excel之间的连接(自动读取Excel行数,自动添加列名称):
% 将Excel数据在Table上显示,并自动识别列数
app.Excel_Path = "Data.xlsx"
app.Excel_Data = readtable(app.Excel_Path);
% 获取Excel列数
app.RowNumber = size(app.Excel_Data,1);
app.Main_UITable.RowName = "Point_"+(0:app.RowNumber);
% 将数据显示在Table上
app.Main_UITable.Data = app.Excel_Data;
% 将Table上的数据保存至Excel
writetable(app.Main_UITable.Data,app.Excel_Path);
这样就实现了Table与Excel的互连。
2、如何添加数据到表格(同步添加数据到Excel):
app.NewData = {app.XEditField.Value, app.YEditField.Value, app.ZEditField.Value};
% 将新数据添加到原有数据后
app.Excel_Data = [app.Excel_Data; app.NewData];
writetable(app.Excel_Data,app.Excel_Path);
Display(app)
…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
function Display(app)
% 读取Excel文件数据
app.Excel_Data = readtable(app.Excel_Path);
% 获取Excel列数
app.RowNumber = size(app.Excel_Data,1);
app.CallingApp.Main_UITable.RowName = "Point_"+(0:app.RowNumber);
% 将数据显示在Table上
app.CallingApp.Main_UITable.Data = app.Excel_Data;
end
3、如何删除表格数据(同步删除Excel数据):
首先需要让matlab知道鼠标选中的是表格中的哪里,需要定义TableCellSelection回调:
% 鼠标选择行
app.mouse_ind = indices(1);
然后定义删除按钮:
% 删除行
app.Main_UITable.Data(app.mouse_ind,:) = [];
%删除Excel文件
delete(app.Excel_Path);
% 将表格数据写入Excel文件
writetable(app.Main_UITable.Data,app.Excel_Path);
Display(app)
…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
function Display(app)
% 读取Excel文件数据
app.Excel_Data = readtable(app.Excel_Path);
% 获取Excel列数
app.RowNumber = size(app.Excel_Data,1);
app.Main_UITable.RowName = "Point_"+(0:app.RowNumber);
% 将数据显示在Table上
app.Main_UITable.Data = app.Excel_Data;
end
这里有个问题,那就是为什么要加这样一行代码
delect(app.Excel_Path)
,来删除原来的Excel文件,在把数据重新保存到一个新的文件里,为什么不能用原来的文件?
这里我们先来看一下,如果去掉这一行代码会发生什么?
可以看到,点击删除按钮后,数据虽然被删除了,但会多补充一条数据,而自动补充的数据,就是倒数第2行数据。为什么呢?本人苦思冥想了一个晚上,终于悟到了。
答案:因为删除一行数据后,表格里的数据保存到了Excel 里,只是替换掉了除最后一行之外的其他数据,Excel 原来的最后一行的数据并没有改变。举个例子,原来Excel 里有编号1-10的数据,显示在Table 上也是编号1-10的数据,现在我们将Table里的编号1删除掉,表格里剩下编号2-10的数据,一共9行数据;然后保存到Excel 里,会替换掉Excel里编号1-9的数据,唯独编号10的数据保存下来了,这是Excel 里的数据是【2-10;10】,任然是10行;再显示到表格里时,就会出现如上问题。