用matlab画excel,如何用matlab在Excel中画画
本文介绍如何用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中画画相关推荐
- matlab绘图z=sin(x_「matlab画三维图」Matlab 应用之绘制三维图形(基础篇) - seo实验室...
matlab画三维图 在Matlab中,三维图形的绘制包括三维曲线,三维网线图和三维曲面图.闲话不多说,直接进入正题.首先介绍几个函数: 1.plot3(x,y,z,-) 其中,x,y,z为维数相同的 ...
- matlab 渲染效果,如何用Matlab快速画出带有3D渲染效果的复杂曲面
Matlab是一个很常用的理工科数学软件,我们平常会用它来画一些平面函数或者简单的曲线或者简单的3D平面图,但是通常很少用到它的稍微高级一点的画图功能.这里介绍一些高级渲染功能和画图技巧,先看结果. ...
- 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. ...
- matlab 无穷符号,如何用matlab进行级数或数列的符号求和?matlab符号求和指令分享...
如何进行级数或数列的求和,在高中<数学>课上的数列和大学<高等数学>中的级数都有有遇到过这种问题,这如果用人脑来计算的话非常耗时,难度较大.但是用matlab就可以轻松解决.下 ...
- matlab画不定积分图像实例,matlab怎么画函数图像,原来是这样的
函数想必大家都不陌生,有时候我们需要画出函数的图形,但是复杂的函数我们画出来花费时间太多,下面我来教大家用matlab画函数图像. 工具/材料 电脑 matlab软件 操作方法 01 先下载安装这个软 ...
- matlab小球水平抛出,如何用Matlab制作小球自由落体运动的动画
第一堂课布置了一个Mission Impossible作业,要求学生们用Matlab制作一个动画,模拟小球的自由落体运动. 以下将整个任务的问题解决的过程分享如下: 步骤一,这是一个动画的制作过程,以 ...
- matlab画伯德图开环程序,matlab伯德图开环闭环
Matlab 中 Bode 图的绘制技巧 学术收藏 2010-06-04 21:21:48 阅读 54 评论 0 字号:大中小 订阅 我们经常会遇到使用 Matlab 画伯德图的情况,可能我们我们都知 ...
- 怎么用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); ...
- matlab基带信号速率,如何用MATLAB产生25Gbaud的基带QPSK调制信号
如何用MATLAB产生25Gbaud的基带QPSK调制信号 包括生成随机符号序列,进行QPSK调制,过采样,脉冲成型滤波和降采样.有错误敬请指正. 参数设置:symbol rate=25Gbaud D ...
- matlab画hfss数据负值,matlab调用HFSS中的问题
最近在研究如何用matlab调用hfss,从网上下了那个HFSS-MATLAB-SCRIPTING-API的工具箱,发现有个问题. 在运行工具箱中的例子dipole_example.m时,发现在优化迭 ...
最新文章
- 细说JVM的数据类型、堆与栈
- python ioctl_ioctl()函数 Unix/Linux
- 左神算法:用栈来求解限制后的汉诺塔问题(Java版)
- AI产品经理必修课:机器学习算法
- mysql 工具 08s01_Mysql管理必备工具Maatkit详解之十四(mk-kill)
- Linux C文件编译
- 【OpenStack】OpenStack系列5之Cinder详解
- c#中空数组_C# 如何判断数组是否拥有空元素呢?
- oauth2 单点登录_六个高Star开源项目,让你更懂OAuth和单点登录
- 拆装智伴机器人_智伴机器人软件下载-智伴下载 v4.2.8-pc6智能硬件网
- android+化学输入法,化学输入法使用说明.pdf
- directadmin安装
- 如何查看win10系统的激活情况
- \USER\stm32f10x.h(298): error: #67: expected a “}”
- python提取发票信息发票识别_python 发票识别
- 计算机体系架构(1)计算机组成原理
- 转:对冲基金交易策略框架
- 【软件工程】第10组 团队展示
- php获取中文拼音(含生僻字,多音字,音标)支持首字母,全拼
- sql取上个月年月_SQL Server 取日期时只要年月或年月日