如何在新版本MATLAB中将绘图导出至对应Excel工作表?
MATLAB新版本导出绘图到对应Excel工作表实现方案
旧版MATLAB可通过xlswritefig函数直接将绘图写入Excel,该函数在R2019b及之后版本因底层Excel读写接口重构已失效,无需依赖第三方修改的旧版函数,通过MATLAB自带的ActiveX调用Excel原生接口即可实现功能,还能精准匹配绘图对应的数据源工作表。
具体实现流程
- 临时导出绘图为本地图片
优先使用exportgraphics函数导出临时图片,相比旧版saveas导出的图片清晰度更高,不会出现文字截断问题,示例代码:% fig为当前要导出的绘图句柄,生成系统临时目录下的临时图片路径 tempImgPath = fullfile(tempdir, 'matlab_temp_plot.png'); exportgraphics(fig, tempImgPath, 'Resolution', 300); - 绑定Excel进程打开目标工作簿
通过COM接口调用Excel进程,直接定位到存储绘图数据源的目标工作表,避免通用读写接口无法操作图片插入的问题,示例代码:% 启动Excel COM服务 excelApp = actxserver('Excel.Application'); excelApp.Visible = true; % 若需要后台静默操作可将值改为false % 打开目标工作簿,将路径替换为实际使用的Excel文件全路径 workbook = excelApp.Workbooks.Open('C:\你的文件路径\目标工作簿.xlsx'); % 定位到绘图对应的数据源工作表,将工作表名替换为实际表名 targetSheet = workbook.Sheets.Item('数据源表名'); - 指定位置插入图片并清理临时文件
选定工作表内的锚点单元格插入图片,可自定义图片尺寸,操作完成后保存文件、清理后台进程和临时图片,示例代码:% 设定图片插入的锚点位置,示例为从D2单元格开始放置图片 anchorRange = targetSheet.Range('D2'); % 插入图片,参数依次为图片路径、不链接到本地文件、随文件保存、左边距、上边距、宽度、高度 % 宽高填-1时默认保持图片原始比例 targetSheet.Shapes.AddPicture(tempImgPath, 0, 1, anchorRange.Left, anchorRange.Top, -1, -1); % 保存工作簿修改 workbook.Save(); % 释放COM对象,避免后台残留Excel进程 delete(excelApp); % 删除本地临时图片 delete(tempImgPath);
实用提示
- 批量导出多张图到不同工作表时,可循环匹配绘图句柄和对应工作表名,全程只需要启动一次Excel进程,能大幅提升运行效率。
- 不要跳过临时导出图片的步骤直接复制figure句柄粘贴,新版本MATLAB绘图对象的剪贴板格式和Excel COM接口兼容性极差,大概率会出现空白、内容错位问题。
- 为避免程序异常退出导致后台残留Excel进程,可将所有Excel操作逻辑放入
try-catch块,在异常捕获分支中也执行delete(excelApp)释放资源。
内容的提问来源于stack exchange,提问作者Sarmed Wahab
相关产品推荐
相关产品推荐

