本文介绍如何用matlab控制Excel画画。
对于matlab和Excel你的认识不能仅仅停留在xlsread和xlswrite这两个函数上,其实matlab对Excel的操作远远不止于此,详情请见matlab和Excel的交互。
所谓在Excel中画画,无非就是通过填充Excel单元格的背景色实现像素点的表达,都可以通过matlab中的Excel.Application实现。

try   % 打开ExcelExcel=actxGetRunningServer('Excel.Application');
catch
Excel=actxserver('Excel.application');
end

% 设置Excel可见

Excel.visible=1;

添加工作簿和工作表

Workbook=Excel.Workbooks.Add;
Sheet1=Workbook.Sheets.Item(1);

下面实现图像的读取,这里用到了imread函数,可以读取图片的RGB值,用三维的数组存储,数据格式为uint8,但是Excel中是用24位的二进制表示颜色,前8位为B,中间8位为G,后8位为R,所以需要先用double强制转换数据类型。

A=imread('图片路径');
A=double(A);

然后就是分别得到R,G,B:

column=size(A,2);
row=size(A,1);
Red=A(:,:,1);
Green=A(:,:,2);
Blue=A(:,:,3);

为了使得颜色设置更加方便,这里我自己写了一个RGB函数,用于将RGB转换成Excel的格式:

function out=RGB(Red,Green,Blue)
if nargin~=3error('输入参数错误,RGB输入参数为3个,分别为RGB,0~255')
end
if length(Red)==length(Green)&length(Blue)==length(Green)
Red=Red;
Green=Green*2^8;
Blue=Blue*2^16;
out=Red+Green+Blue;
elseerror('输入维度不匹配');
end
end

得到的输出能够直接给Excel使用。
修改Excel单元格的背景色可以使用以下代码:

Sheet1.Range(范围).Interior.Color = RGB;
% 其中Sheet1为工作表,Range内为范围 格式为 'A1' 或‘A1:C3’

为了能够更方便得到范围的正确格式,我也自己写了一个格式转换的函数,将坐标值转换成字母组合:

function Range=Cells(first,second)
% ======================================================================
% 输入参数为单个坐标或者左上角以及右上角坐标,返回结果可用于Excel的Range输入
% Cells(first, second);
% first = n second = m; 或 first = [n1,m1],second = [n2 m2]
% ======================================================================
% 返回结果:
% Cells(1,2)---------------------------'A2'
% Cells([26*2 1],[26*27 1])------------ 'AZ1:ZZ1'
if nargin ==1if length(first)==2second=first(2);first=first(1);end
elseif nargin>2error('Cells输入错误,输入单元格坐标或区域的对角坐标');
end
if length(first)==length(second)&&length(first)==1if first<=0||second<=0error('坐标不能小于1')endif first<=26charNum=1;elseif first<=26*26+26charNum=2;elseerror('图片像素过大,请剪辑');endswitch charNumcase 1if mod(first,26)==0Column1='Z';elseColumn1=char('@'+mod(first,26));endRange=[Column1 num2str(second)];case 2first=first-26;if mod(first,26*26)==0Column1='Z';elseColumn1=char(floor(first/26)+'A');endif mod(first,26)==0Column2='Z';Column1=char(floor(first/26)+'@');elseColumn2=char('@'+mod(first,26));endRange=[Column1 Column2 num2str(second)];endelseif length(first)==length(second)&&length(first)==2if first(1)<second(1)error('左上角坐标在右下角坐标前');endif sum(first>0)+sum(second>0)<4error('坐标不能小于1')endif first(1)<=26charNum1=1;elseif first(1)<=26*26+26charNum1=2;elseerror('图片像素过大,请剪辑');endswitch charNum1case 1if mod(first(1),26)==0Column11='Z';elseColumn11=char('@'+mod(first(1),26));endRange1=[Column11 num2str(first(2))];case 2first(1)=first(1)-26;if mod(first(1),26*26)==0Column11='Z';elseColumn11=char(floor(first(1)/26)+'A');endif mod(first(1),26)==0Column12='Z';Column11=char(floor(first(1)/26)+'@');elseColumn12=char('A'+mod(first(1),26));endRange1=[Column11 Column12 num2str(first(2))];endif second(1)<=26charNum2=1;elseif second(1)<=26*26+26charNum2=2;elseerror('图片像素过大,请剪辑');endswitch charNum2case 1if mod(second(1),26)==0Column21='Z';elseColumn21=char('@'+mod(second(1),26));endRange2=[Column21 num2str(second(2))];case 2second(1)=second(1)-26;if mod(second(1),26*26)Column21='Z';elseColumn21=char(floor(second(1)/26)+'A');endif mod(second(1),26)==0Column22='Z';Column21=char(floor(second(1)/26)+'@');elseColumn22=char('A'+mod(second(1),26));endRange2=[Column21 Column22 num2str(second(2))];endRange=[Range1 ':' Range2];
elseerror('Cells输入错误,输入单元格坐标或区域的对角坐标');
end

最后通过一个二维的for循环即可实现自动填充,效果如下图:

完整代码如下:

tryExcel=actxGetRunningServer('Excel.Application');
catch
Excel=actxserver('Excel.application');
end
% 设置Excel可见
Excel.visible=1;
Workbook=Excel.Workbooks.Add;
Sheet1=Workbook.Sheets.Item(1);
A=imread('图片路径');
A=double(A);
column=size(A,2);
row=size(A,1);
Red=A(:,:,1);
Green=A(:,:,2);
Blue=A(:,:,3);
color=RGB(Red,Green,Blue);
tic
for a=1:size(color,2) % a为列数for b=1:size(color,1) % b为行数
Sheet1.Range(Cells(a,b)).Interior.Color =color(b,a);end
end
toc
Excel.Quit; % 关闭 Excel
Excel.delete; % 删除对象

如何用matlab在Excel中画画 附源代码相关推荐

  1. 如何用python在excel中画画(含GUI界面)

    一.引言 最近看B站视频,有大佬徒手用excel一个格子一个格子填充,撸出了钢铁侠的图片,惊奇的同时,我思考,用python是否可以更快速的完成呢? ps:由于最近重构了下代码,因此想看最新效果图以及 ...

  2. matlab引用数据,excel引用数据-如何用matlab处理excel文件中的数据?

    如何利用matlab根据excel表格里面的数据画图 将待导入的矩阵结数据Excel中,录入时注意行列原矩阵一一对应 录入完以后数据,为了后续步骤使用方便,命名时我们最好把它命名为我们接下来在MATL ...

  3. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...

     本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较    (三)SSIS的简介    (四)数据库中存储过程示例(SSIS应用需要) (五)Excel模板的制作(这步这么简单,稍微介 ...

  4. vb.net读取excel并写入dgv_如何用Python读取Excel中的图片?然后写入图片?

    大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进行分析. 那么你知道如何使用Python读 ...

  5. 如何用Python读取Excel中图片?又如何用Python往Excel中写入图片?

    大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进行分析. 那么你知道如何使用Python读 ...

  6. python 读取excel图片_如何用Python读取Excel中图片?

    公众号: 早起Python 作者:刘早起 大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进 ...

  7. 怎么用python读取excel图_如何用Python读取Excel中图片?

    公众号: 早起Python 作者:刘早起 大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进 ...

  8. matlab输出多个参数到表格固定列,matlab将excle的列提取出来?如何使用Matlab提取Excel中指定列的数据?...

    MATLAB 在txt文件中怎么提取数据,并将那三列数据转化为EXCLE格式? 在matlab中 file import data number of text header lines 改成6 下一 ...

  9. matlab提取数据的一部分,matlab处理excel数据【怎么用MATLAB从excel中提取部分数据】...

    已经把excel的一列导入到matlab的工作区,怎么计算这一列数的均值.标准差.最小值.最大值以及中位数? 把这个EXCEL放到matlab目录下的work里,假设名为1.xls,然后在matlab ...

最新文章

  1. Mybatis源码阅读之三
  2. Hybrid assembly with long and short reads improves discovery of gene family expansions
  3. 死猪脑”能复活吗?---评美国耶鲁大学医学院实验研究
  4. Python 面向对象-如何查看类的父类,外部如何获取类的名字
  5. ThinkPHP3.2 G函数代码及 使用方法
  6. 《C++覆辙录》——2.9:自反初始化
  7. openstack 管理三十五 - 利用 SQL 获取 tenant 当前资源情况
  8. 用户访一个APP或者网页流程示意图
  9. [导入]用事件和异常返回多种结果
  10. WEB前端-CSS精灵技术
  11. 2022年6月大学英语六级作文
  12. 体验汉印T260标签打印机,让分类管理更简单
  13. JavaSE第八章 IO流
  14. The repository 'http://ppa.launchpad.net/octave/stable/ubuntu bionic Release' does not have a Releas
  15. #PLC_梯形图简史(内含早期梯形图编程珍贵画面)
  16. 让你的程序陪你的好友打会牌吧(零)
  17. 华硕主板实现Wake on lan 网络唤醒的种种细节
  18. 我的中国“芯”——资深后端工程师成长分享——“胡”说IC工程师完美进阶
  19. C++深入浅出(八)—— 继承
  20. C#按汉字拼音首字母排序

热门文章

  1. antd提交表单_antd快速开发(Form篇)
  2. PHP开发之-微信网页授权获取用户基本信息
  3. java实现扫码微信登录_java实现简单扫码登录功能(模仿微信网页版扫码)
  4. laravel-pay支付接入流程
  5. 有多少个数既是 4 的整数倍,又是 6 的整数倍。
  6. ibus五笔造词、删词功能
  7. 【iOS】—— 懒加载
  8. 信号量(Semaphore)、闭锁(Latch)、栅栏(Barrier)
  9. 字节跳动校招面试题演练
  10. VS code更改背景图片和颜色