本文介绍如何用matlab控制Excel画画。

对于matlab和Excel你的认识不能仅仅停留在xlsread和xlswrite这两个函数上,其实matlab对Excel的操作远远不止于此,详情请见matlab和Excel的交互。

所谓在Excel中画画,无非就是通过填充Excel单元格的背景色实现像素点的表达,都可以通过matlab中的Excel.Application实现。try   % 打开Excel

Excel=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~=3

error('输入参数错误,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;

else

error('输入维度不匹配');

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 ==1

if length(first)==2

second=first(2);

first=first(1);

end

elseif nargin>2

error('Cells输入错误,输入单元格坐标或区域的对角坐标');

end

if length(first)==length(second)&&length(first)==1

if first<=0||second<=0

error('坐标不能小于1')

end

if first<=26

charNum=1;

elseif first<=26*26+26

charNum=2;

else

error('图片像素过大,请剪辑');

end

switch charNum

case 1

if mod(first,26)==0

Column1='Z';

else

Column1=char('@'+mod(first,26));

end

Range=[Column1 num2str(second)];

case 2

first=first-26;

if mod(first,26*26)==0

Column1='Z';

else

Column1=char(floor(first/26)+'A');

end

if mod(first,26)==0

Column2='Z';

Column1=char(floor(first/26)+'@');

else

Column2=char('@'+mod(first,26));

end

Range=[Column1 Column2 num2str(second)];

end

elseif length(first)==length(second)&&length(first)==2

if first(1)

error('左上角坐标在右下角坐标前');

end

if sum(first>0)+sum(second>0)<4

error('坐标不能小于1')

end

if first(1)<=26

charNum1=1;

elseif first(1)<=26*26+26

charNum1=2;

else

error('图片像素过大,请剪辑');

end

switch charNum1

case 1

if mod(first(1),26)==0

Column11='Z';

else

Column11=char('@'+mod(first(1),26));

end

Range1=[Column11 num2str(first(2))];

case 2

first(1)=first(1)-26;

if mod(first(1),26*26)==0

Column11='Z';

else

Column11=char(floor(first(1)/26)+'A');

end

if mod(first(1),26)==0

Column12='Z';

Column11=char(floor(first(1)/26)+'@');

else

Column12=char('A'+mod(first(1),26));

end

Range1=[Column11 Column12 num2str(first(2))];

end

if second(1)<=26

charNum2=1;

elseif second(1)<=26*26+26

charNum2=2;

else

error('图片像素过大,请剪辑');

end

switch charNum2

case 1

if mod(second(1),26)==0

Column21='Z';

else

Column21=char('@'+mod(second(1),26));

end

Range2=[Column21 num2str(second(2))];

case 2

second(1)=second(1)-26;

if mod(second(1),26*26)

Column21='Z';

else

Column21=char(floor(second(1)/26)+'A');

end

if mod(second(1),26)==0

Column22='Z';

Column21=char(floor(second(1)/26)+'@');

else

Column22=char('A'+mod(second(1),26));

end

Range2=[Column21 Column22 num2str(second(2))];

end

Range=[Range1 ':' Range2];

else

error('Cells输入错误,输入单元格坐标或区域的对角坐标');

end

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

完整代码如下:try

Excel=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,如何用matlab在Excel中画画相关推荐

  1. matlab绘图z=sin(x_「matlab画三维图」Matlab 应用之绘制三维图形(基础篇) - seo实验室...

    matlab画三维图 在Matlab中,三维图形的绘制包括三维曲线,三维网线图和三维曲面图.闲话不多说,直接进入正题.首先介绍几个函数: 1.plot3(x,y,z,-) 其中,x,y,z为维数相同的 ...

  2. matlab 渲染效果,如何用Matlab快速画出带有3D渲染效果的复杂曲面

    Matlab是一个很常用的理工科数学软件,我们平常会用它来画一些平面函数或者简单的曲线或者简单的3D平面图,但是通常很少用到它的稍微高级一点的画图功能.这里介绍一些高级渲染功能和画图技巧,先看结果. ...

  3. matlab画y x 2,matlab怎么绘制z=sqrt(x^2 y^2)的图像

    Matlab怎么绘制x^2+y^2=1曲线 [1]zhaoyucai答非所问,涉嫌抄袭.[2]风飘水渺回答正确.[3]但还有更简单的方法:>>ezplot('x^2+y^2=1',[-1. ...

  4. matlab 无穷符号,如何用matlab进行级数或数列的符号求和?matlab符号求和指令分享...

    如何进行级数或数列的求和,在高中<数学>课上的数列和大学<高等数学>中的级数都有有遇到过这种问题,这如果用人脑来计算的话非常耗时,难度较大.但是用matlab就可以轻松解决.下 ...

  5. matlab画不定积分图像实例,matlab怎么画函数图像,原来是这样的

    函数想必大家都不陌生,有时候我们需要画出函数的图形,但是复杂的函数我们画出来花费时间太多,下面我来教大家用matlab画函数图像. 工具/材料 电脑 matlab软件 操作方法 01 先下载安装这个软 ...

  6. matlab小球水平抛出,如何用Matlab制作小球自由落体运动的动画

    第一堂课布置了一个Mission Impossible作业,要求学生们用Matlab制作一个动画,模拟小球的自由落体运动. 以下将整个任务的问题解决的过程分享如下: 步骤一,这是一个动画的制作过程,以 ...

  7. matlab画伯德图开环程序,matlab伯德图开环闭环

    Matlab 中 Bode 图的绘制技巧 学术收藏 2010-06-04 21:21:48 阅读 54 评论 0 字号:大中小 订阅 我们经常会遇到使用 Matlab 画伯德图的情况,可能我们我们都知 ...

  8. 怎么用matlab画双8曲线,MATLAB画双纵轴曲线。

    Matlab plotyy画双纵坐标图实例 x = 0:0.01:20; y1 = 200*exp(-0.05*x).*sin(x); y2 = 0.8*exp(-0.5*x).*sin(10*x); ...

  9. matlab基带信号速率,如何用MATLAB产生25Gbaud的基带QPSK调制信号

    如何用MATLAB产生25Gbaud的基带QPSK调制信号 包括生成随机符号序列,进行QPSK调制,过采样,脉冲成型滤波和降采样.有错误敬请指正. 参数设置:symbol rate=25Gbaud D ...

  10. matlab画hfss数据负值,matlab调用HFSS中的问题

    最近在研究如何用matlab调用hfss,从网上下了那个HFSS-MATLAB-SCRIPTING-API的工具箱,发现有个问题. 在运行工具箱中的例子dipole_example.m时,发现在优化迭 ...

最新文章

  1. 细说JVM的数据类型、堆与栈
  2. python ioctl_ioctl()函数 Unix/Linux
  3. 左神算法:用栈来求解限制后的汉诺塔问题(Java版)
  4. AI产品经理必修课:机器学习算法
  5. mysql 工具 08s01_Mysql管理必备工具Maatkit详解之十四(mk-kill)
  6. Linux C文件编译
  7. 【OpenStack】OpenStack系列5之Cinder详解
  8. c#中空数组_C# 如何判断数组是否拥有空元素呢?
  9. oauth2 单点登录_六个高Star开源项目,让你更懂OAuth和单点登录
  10. 拆装智伴机器人_智伴机器人软件下载-智伴下载 v4.2.8-pc6智能硬件网
  11. android+化学输入法,化学输入法使用说明.pdf
  12. directadmin安装
  13. 如何查看win10系统的激活情况
  14. \USER\stm32f10x.h(298): error: #67: expected a “}”
  15. python提取发票信息发票识别_python 发票识别
  16. 计算机体系架构(1)计算机组成原理
  17. 转:对冲基金交易策略框架
  18. 【软件工程】第10组 团队展示
  19. php获取中文拼音(含生僻字,多音字,音标)支持首字母,全拼
  20. sql取上个月年月_SQL Server 取日期时只要年月或年月日

热门文章

  1. java 获得文本框文本_Java获取和删除Word文本框中的表格
  2. 没有心的男人 2012-02-08 21:11:06
  3. 《麻省理工学院公开课:人工智能》笔记二
  4. ASP.NET Core中的TagHelper及其用法
  5. ADO与ADO.NET 的区别
  6. 仙人掌之歌——路转峰回(1)
  7. 基于CNN+tensorflow对搜狐新闻进行分类并对函数进行封装
  8. Adobe photoshop 用户名、组织或序列号丢失或无效的解决方法
  9. 减肥 低热量食物和运动卡路里
  10. 三、GTK-按钮(微调按钮、复选按钮、单选按钮)、快捷键、热键