《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 4653|回复: 20
收起左侧

[教程] [原创]以actxcontrollist函数输出为例,用MATLAB控制Excel字体,字号,以及Excel的列

  [复制链接]
发表于 2012-6-8 08:58:55 | 显示全部楼层 |阅读模式
本帖最后由 付先武 于 2012-6-12 08:25 编辑

最近使用了actxcontrollist函数查看MATLAB支持的ActiveX 控件,发现输出到命令窗口后很不容易查看,要是使用的actxcontrolselect函数的话,多点击几个,整个MATLAB都会崩溃,不知道是我的版本的问题还是怎么回事儿,反正要查ProgID不是那么容易,所以就想使用actxcontrollist函数后直接把结果写入到Excel中.这个很好实现,xlswrite函数即可搞定.但打开Excel后就会有一个问题,列宽不能自适应,还得手动调.当时就想可不可以直接使用命令就把所有的格式调好.所以就研究了一个下午.终于研究出来了,不曾独享,拿出来与大家共同来体会MATLAB的强大!!!

{:soso_e100:} 实现字体设置 && 添加超链接 && 自动调整列宽 && 添加与删除工作簿{:soso_e100:}

使用方法三种:
  1. actx; % 自动命名Excel文件,文件存储于temp中;
  2. actx('fu_test_excel.xlsx'); % 以要求的Excel文件名称存储在当前文件夹中;
  3. actx('C:\Users\Administrator\Documents\MATLAB\fu_test_excel.xlsx'); % 给出存储的绝对路径;
复制代码
以下是生成的Excel截图
捕获.PNG

系统平台:Windows7 旗舰版 64-bit ;
软件平台:MATLAB R2012a + Excel 2010(2003使用的话直接修改扩展名就可以了,加一个if判断语句就行了.)

最后有直接的代码,附件的m文件内容与这个是一样的,只是由于要网页粘贴,所以去掉了注释,大家查看附件就可以了.
  1. function actx(filename)
  2. %ACTX display actxcontrol that matlab supported in Excel;
  3. % What I have managed to do was how to autofit the column width in the Excel file, and I did it;
  4. %
  5. % Syntax:
  6. %    filename - excel file's name or the path to the file;
  7. %
  8. % Example:
  9. %    actx;
  10. %    actx('fu_test_excel.xlsx');
  11. %    actx('C:\Users\Administrator\Documents\MATLAB\fu_test_excel.xlsx');
  12. %
  13. % Change log:
  14. %    2012-06-04 Add header to the Excel file;
  15. %    2012-06-06 In Excel file, auto fit the column width;
  16. %    2012-06-06 Set font size, color and alignment;
  17. %    2012-06-06 Add hyperlink to file path;
  18. %
  19. %    by fuxianwu & MSN:bluefuxianwu@hotmail.com 2012-06-05-16-27-39
  20. %

  21. narginchk(0,1);

  22. list = actxcontrollist;
  23. num = size(list,1);

  24. nametmp = ['_TIME_',datestr(now,'yyyy_mm_dd'),'_SIZE_',num2str(num)];

  25. if nargin < 1
  26.     excelfile = [tempname,nametmp,'.xlsx'];
  27. elseif nargin == 1
  28.     [pathstr, name, ext] = fileparts(filename);
  29.     if isempty(ext)
  30.         ext = '.xlsx';
  31.     end
  32.     if isempty(pathstr)
  33.         pathstr = pwd;
  34.     end
  35.     excelfile = [pathstr,filesep,name,nametmp,ext];
  36. end
  37. xlswrite(excelfile,{'GENERATE MATLAB SUPPORTED ACTXCONTROL LIST By FUXIANWU'},'actxcontrol','A1:A1');
  38. loc = ['A2:C',num2str(num+1)];
  39. xlswrite(excelfile,[{'名称(Name)','标识(ProgID)','路径(Path)'};list],...
  40.     'actxcontrol',loc);

  41. % AutoFit the columnwidth;
  42. Excel = actxserver('Excel.Application');%
  43. ExcelWorkbook=Excel.Workbooks.Open(excelfile);% Open the file;

  44. WorkSheets = Excel.sheets;wsn = WorkSheets.Count;% Number of Sheet;
  45. for i = 1:wsn-1
  46.     Delete(WorkSheets.Item(1));
  47. end
  48. Activate(WorkSheets.Item(1));

  49. % Title:Add hyperlink;
  50. range = Range(Excel,'A1:A1');
  51. range.Hyperlinks.Add(range,'http://www.matlabsky.com',[],range.Value2);
  52. % Content: Hyperlink;
  53. for i = 3:num+1
  54.     range = Range(Excel,['C',num2str(i),':C',num2str(i)]);
  55.     [pathstr, name, ext] = fileparts(range.Value);
  56.     range.Hyperlinks.Add(range,['file://',pathstr],[],['Ctrl+Click open folder "', pathstr,'" contains "',name,ext,'".']);
  57. end
  58. % Title:Set font;
  59. titlerange = Range(Excel,'A1:C1');
  60. Select(titlerange);
  61. Excel.Selection.MergeCells = 1; %
  62. Excel.Selection.Font.Bold = 1; % bold;
  63. Excel.Selection.Font.Size = 18; % fontsize;
  64. Excel.Selection.HorizontalAlignment = 3; % center;

  65. % Content:Set font;
  66. contentrange = Range(Excel,loc);
  67. Select(contentrange);
  68. Excel.Selection.Font.Name = '楷体'; %
  69. Excel.Selection.Font.Bold = 1; %
  70. Excel.Selection.Font.Size = 12; %
  71. Excel.Selection.HorizontalAlignment = 2; % left;

  72. % Header:Set font size and color;
  73. Select(Range(Excel,'A2:C2'));
  74. Excel.Selection.Font.Size = 14; %
  75. Excel.Selection.Font.Color = '&hFF'; % Red color;

  76. % Content:Autofit the column width;
  77. Excel.ActiveSheet.UsedRange.EntireColumn.AutoFit;% autofit;
  78. Excel.ActiveSheet.UsedRange.EntireRow.AutoFit;

  79. % Save file and exit the actxserver;
  80. ExcelWorkbook.Save;Excel.Quit;

  81. % Open file;
  82. winopen(excelfile);
复制代码

附件: actx.rar (2.45 KB, 下载次数: 32)
发表于 2016-3-29 13:07:11 | 显示全部楼层
谢谢,找了好久了
回复 支持 反对

使用道具 举报

发表于 2012-6-14 01:15:03 | 显示全部楼层
不错,不错。。
发表于 2012-6-15 21:31:05 | 显示全部楼层
呵呵呵,看看你的帖子
发表于 2012-7-4 19:40:24 | 显示全部楼层
楼主牛人,下载了学习
发表于 2012-7-21 06:11:10 | 显示全部楼层
发表于 2012-8-1 22:07:47 | 显示全部楼层
呵呵,看看 lu路过
发表于 2012-8-28 14:10:25 | 显示全部楼层
发表于 2012-10-8 20:22:10 | 显示全部楼层
好好学习,天天向上
发表于 2013-11-23 13:14:33 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2013-11-29 15:50:36 | 显示全部楼层
LZ好人 一生平安
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2020-12-1 10:04 , Processed in 0.060024 second(s), 15 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表