2020-12-03 MATLAB App Designer—将table数据导出到Excel文件
背景
存在一个table类型的数据,需要导入到excel文件中
编写目的
(1)如果指定excel不存在,则新建并写入数据
(2)如果excel存在,指定工作簿不存在,则指定工作簿写入已存在的excel文件
(3)如果excel文字,指定工作簿也存在,则先删除存在的指定工作簿然后在新建并写入指定工作簿对应的数据
编写的函数
function [ Message ] = ifun_exportTableData2Excel (Path , FileName ,SheetName, TableData ) % 将数据保存到EXCEL
% Path % 生成的 EXCEL 文件和路径名 % char 形式
% FileName % 生成的 EXCEL 文件和路径名 % char 形式
% SheetName % 工作簿 名称 % char 形式
% TableData % table 数据
% Design By 何҈其
try % # 保存路径
if exist( Path , 'dir' ) ~= 7;mkdir( Path ); end % 生成保存路径
AddressFile = fullfile( Path , FileName );
if ~exist( AddressFile ,'file') % # 如果excel文件不存在则生成空白excel
xlswrite(AddressFile,[' ']);
end
try deleteSheet( AddressFile,SheetName); catch;end % # 删除既有工作簿
writetable( TableData , AddressFile ,'Sheet', SheetName, 'WriteVariableNames', true); Message = 1; % # 生成新的工作簿表
catch;Message = 0;
end
end
该函数需要调用函数deleteSheet,从ilovematlab论坛找到(具体来源忘记了)
function deleteSheet(file,SheetName)
Excel = actxserver('Excel.Application'); % 打开Excel作为COM自动化服务器
set(Excel, 'Visible',0);% 使应用程序不可见
set(Excel,'DisplayAlerts',0);% 使Excel不显示警报
Workbooks = Excel.Workbooks;% 掌握Excel的 handle
[~, sheet_names] = xlsfinfo(file);% # 只有一个工作簿
if length( sheet_names ) == 1% 工作簿只有一个的时候再新建一个
Workbook=Workbooks.Open(file);% 打开Excel工作簿并激活它
Excel.ActiveWorkBook.Sheets.Add([]);% 新增一个
Workbook.Save; % 现在保存工作簿
Workbooks.Close;% 关闭工作簿
end
if length( sheet_names ) == 1;[~, sheet_names] = xlsfinfo(file);end% # 两个以上删除一个% 重新读取工作簿名
Workbook=Workbooks.Open(file);% 打开Excel工作簿并激活它
Sheets = Excel.ActiveWorkBook.Sheets;% 获取活动工作簿中的工作表
Idx = ismember( sheet_names, SheetName );% 查找特定工作表 SheetName 并根据用户输入删除它们
[ MaxValue , Id ] = max( Idx );
if MaxValue == 1
current_sheet = get(Sheets, 'Item', Id ); invoke(current_sheet, 'Delete') % 已删除既有 SheetName
end
Workbook.Save;% 现在保存工作簿
Workbooks.Close;% 关闭工作簿
invoke(Excel, 'Quit');% # 退出服务器% 退出Excel
delete(Excel);% 删除 ActiveX Object 的 handle
end
函数应用说明
调用的函数deleteSheet来源确实是忘记了