软件版本是MatlabR2018a,版本不同,操作有所差异。本节主要讲解在Matlab App Designer中表格的操作,通过按钮来实现增加、删除、保存、导入、编辑。

2022-03-01:之前的下载链接失效,现在已更新。
2022-03-26:由于gitee图床现已失效,现在重新更新文章中的图片。

整体布局

因为是演示,界面设计的比较简洁,可以是一个大软件的一部分。

整体界面示意

编辑

表格的可编辑状态

编辑倒是没有什么好说的,直接在这个地方勾选一下“可编辑”就行了。

增加和删除

效果演示

演示操作

代码实现

首先需要弄几个全局变量,选择私有属性即可。

私有属性

增加数据功能

定义两个变量,分别为t和newData(这两个是目前需要的)

全局变量

删除涉及到鼠标事件,需要先定义两个私有属性,若上图所示,分别代表行和列。

全局变量

“增加”按钮回调函数:

            app.t =  app.UITable.Data;
            nr = {[],[]};
            app.UITable.Data=[app.t;nr];   %能反复新增,即增加多行
            app.t =  app.UITable.Data;
            newData1 = app.t;
            set(app.UITable,'Data',newData1);

代码比较好理解,当点击“增加”按钮后:

  • 首先将表格里的数据存到t变量中;
  • nr = {[],[]} 即 是一个2X1的空白数据,两列一行
  • app.UITable.Data=[app.t;nr] 就是将数据迭代,就是在原先的基础上增加了一行空白;
  • 将数据t复制到变量newData1
  • 然后将数据显示到表中,用set函数

结合前面的“可编辑”属性,在新增加的表格中就可以输入数据了。

但是这里输入的数据只是浮于水面,当刷新一下,就没了,如何解决?

需要用到表格的变动触发回调函数(UITableCellEdit回调):

UITableCellEdit回调

根据这个名字也很容易知道是什么意思,Edit就是编辑,当表格被编辑的时候,就会触发。在该回调函数中写入以下代码:

function UITableCellEdit(app, event)
     app.newData = event.NewData;
     app.UITable.Data(app.mouse_ind,app.mouse_ind2)=cellstr(num2str(app.newData)); 
     app.t=app.UITable.Data;
end

代码的意思就是event.NewData(发生了一个新数据时间),将这个新数给鼠标点的那个位置。

那么问题来了,如何让matlab知道鼠标点了表格哪里呢?于是用到了表格的Selection回调函数:

Selection回调函数

在这个回调函数中写入以下代码:

function UITableCellSelection(app, event)
      indices = event.Indices;
      app.mouse_ind = indices(1);  %鼠标选择行
      app.mouse_ind2 = indices(2);  %鼠标选择列
end

保存

将表格中的数据写入需要用到xlswrite函数。

在“保存”按钮中添加回调函数,写入下面代码(地址可以更换)即可将文件写入指定的地方:

            tempTTxlsx = 'C:\Users\Administrator\Desktop\tempTT.xlsx';
            xlswrite(tempTTxlsx,app.UITable.Data); %数据写入文件

删除

删除这里是设定的点中某一个单元格,删除它所在的这一行。

根据上面已经知道了鼠标选择事件,直接在“删除”写入回调函数:

function Button_3Pushed(app, event)
    app.UITable.Data(app.mouse_ind,:) =[];
    app.t=app.UITable.Data;
end

那么问题来了,现在输出的是不是只是删除了表面呢?

答案是否定的,因为那个表格编辑触发的回调函数是在表格发生变化的时候触发,删除必然导致表格发生了变化,所以肯定会触发保存事件。

导入文件

导入一个excel表格需要用到uigetfile函数,字面意思就是获得文件函数。

此函数的具体用法:
[FileName,PathName,FilterIndex] = uigetfile(FilterSpec,DialogTitle,DefaultName)
FileName:返回的文件名
PathName:返回的文件的路径名
FilterIndex:选择的文件类型
FilterSpec:文件类型设置
DialogTitle:打开对话框的标题
DefaultName:默认指向的文件名

在“导入”按钮中添加回调函数:

[excelfile, excelpath] = uigetfile({'*.xlsx';'*.xls';'*.mat';'*.*'},'导入数据');
excelfull = strcat(excelpath,excelfile);
new2 = xlsread(excelfull);
[m, n] = size(new2);
for i = 1:1:m
     for j=1:1:n
        app.UITable.Data{i,j}= num2str(new2(i,j));
     end
end
app.t = app.UITable.Data;

excelpath得到文件夹位置:"C:\Users\Administrator\Desktop\ "

excelfile获得的是文件名: T1.xlsx

excelfull变量的意思就是获得完整的路径,例如"C:\Users\Administrator\Desktop\T1.xlsx"


测试用到的demo下载:

https://www.jianguoyun.com/p/DbxIfNgQg6-WChjPnq0E

我用的版本是MatlabR2018a,低版本可能打不开



博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2021/matlab_table.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 06 月 12 日
如果觉得我的文章对你有用,请随意赞赏