2020-12-03 MATLAB App Designer—將table數(shù)據(jù)導(dǎo)出到Excel文件
背景
存在一個(gè)table類型的數(shù)據(jù),需要導(dǎo)入到excel文件中
編寫目的
(1)如果指定excel不存在,則新建并寫入數(shù)據(jù)
(2)如果excel存在,指定工作簿不存在,則指定工作簿寫入已存在的excel文件
(3)如果excel文字,指定工作簿也存在,則先刪除存在的指定工作簿然后在新建并寫入指定工作簿對(duì)應(yīng)的數(shù)據(jù)
編寫的函數(shù)
?function [ Message ] = ifun_exportTableData2Excel (Path , FileName ,SheetName, TableData ) % 將數(shù)據(jù)保存到EXCEL
? ? ? ? ? ? % Path? ? ? ? ?% 生成的 EXCEL 文件和路徑名? ? ? % char 形式
? ? ? ? ? ? % FileName? ? ?% 生成的 EXCEL 文件和路徑名? ? ? % char 形式
? ? ? ? ? ? % SheetName? ? % 工作簿 名稱? ? ? ? ? ? ? ? ? ?% char 形式
? ? ? ? ? ? % TableData? ? % table 數(shù)據(jù)
? ? ? ? ? ? % 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
該函數(shù)需要調(diào)用函數(shù)deleteSheet,從ilovematlab論壇找到(具體來(lái)源忘記了)
function deleteSheet(file,SheetName)
Excel = actxserver('Excel.Application');?% 打開Excel作為COM自動(dòng)化服務(wù)器
set(Excel, 'Visible',0);% 使應(yīng)用程序不可見
set(Excel,'DisplayAlerts',0);% 使Excel不顯示警報(bào)
Workbooks = Excel.Workbooks;% 掌握Excel的 handle
[~, sheet_names] = xlsfinfo(file);% # 只有一個(gè)工作簿
if length( sheet_names ) == 1% 工作簿只有一個(gè)的時(shí)候再新建一個(gè)
? ? Workbook=Workbooks.Open(file);% 打開Excel工作簿并激活它
? ??Excel.ActiveWorkBook.Sheets.Add([]);% 新增一個(gè)
? ? Workbook.Save;?% 現(xiàn)在保存工作簿
? ? Workbooks.Close;% 關(guān)閉工作簿
end
if length( sheet_names ) == 1;[~, sheet_names] = xlsfinfo(file);end% # 兩個(gè)以上刪除一個(gè)% 重新讀取工作簿名
Workbook=Workbooks.Open(file);% 打開Excel工作簿并激活它
Sheets = Excel.ActiveWorkBook.Sheets;% 獲取活動(dòng)工作簿中的工作表
Idx = ismember( sheet_names, SheetName );% 查找特定工作表 SheetName 并根據(jù)用戶輸入刪除它們
[ MaxValue , Id ] = max( Idx );
if MaxValue == 1
? ? current_sheet = get(Sheets, 'Item', Id );?invoke(current_sheet, 'Delete')? ? ? ?% 已刪除既有 SheetName
end
Workbook.Save;% 現(xiàn)在保存工作簿
Workbooks.Close;% 關(guān)閉工作簿
invoke(Excel, 'Quit');% # 退出服務(wù)器% 退出Excel
delete(Excel);% 刪除 ActiveX Object 的 handle
end
函數(shù)應(yīng)用說(shuō)明
調(diào)用的函數(shù)deleteSheet來(lái)源確實(shí)是忘記了