欢迎光临散文网 会员登陆 & 注册

2020-12-03 MATLAB App Designer—将table数据导出到Excel文件

2020-12-07 02:42 作者:-何其-  | 我要投稿

背景

存在一个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来源确实是忘记了


2020-12-03 MATLAB App Designer—将table数据导出到Excel文件的评论 (共 条)

分享到微博请遵守国家法律