matlab 环境 word 和 excel 文件操作

来源:互联网 发布:淘宝店铺添加到桌面 编辑:程序博客网 时间:2024/06/08 03:30

matlab 环境 excel 文件操作

在本文中只讨论通过 matlab 高级函数和外部组件操作 excel 文件。

excel 文件一般 读/写 方法

读取 excel 文件

  1. 利用剪贴板复制数据,然后在 matlab 中建立一个元胞,将数据复制到元胞即可。这种方式太愚蠢,还是算了吧。
  2. 通过 uiimport 函数导入。如果在命令行直接输入 uiimport 将会有 GUI 界面让你选择从文件还是剪贴板导入数据。而使用 uiimport -pastespecial 则不打开 GUI 直接从剪贴板导入数据。
  3. 直接利用 matlab 界面的 import Data,导入数据也是比较方便的。
  4. 利用 importdata 函数。该函数可以读取多个工作表,并且,也能从剪贴板读取数据,而且这种情况下也是能够对剪贴板的数据做一些处理。
  5. 这里的读取数据还是重点研究 xlsread 函数。
    这里特别提一点要用 xlsread 函数正常读取数据得保证 excel 服务能正常启动,否则只能以基本模式读取数据。我现在用的这太计算机就不能正常启动 excel 服务。
    这里写图片描述
    • 调用形式
    • [num,txt,raw] = xlsread(filename)
    • [num,txt,raw] = xlsread(filename,-1)
    • [num,txt,raw] = xlsread(fileaname,sheet)
    • [num,txt,raw] = xlsread(filename,range)
    • [num,txt,raw] = xlsread(filename,sheet,range)
    • [num,txt,raw] = xlsread(filename,sheet,range,’basic’)
    • [num,txt,raw] = xlsread(filename,sheet,range,”,functionHandle)
    • 参数解释
    • -1:在读取数据之前会弹出 GUI 界面让你选择读取的数据范围
    • sheet:指定读取的工作表名。
      • 这里可以使用函数 [status,sheets] = xlsfinfo(filename) 获取文件的所有工作表。
      • 此外在 windows 系统下,还可以用正整数代替工作表名称。
      • 如果没有指定,工作表则读取第一个。
    • range:在 windows 系统中,给出了读取数据的范围。对大小写不敏感。
    • ‘basic’:基本模式
      • 只支持 exlcel 对应的文件类型,不支持 html 文件等,具体看帮助文档。
      • 读取 xls 时不支持 range 参数,应在 range 上用空字符代替。
      • 不支持输入函数句柄。
      • 将日期导入为 excel 日期序列。excel 的日期参考基准和 matlab 是不一样的
    • functionHandle:excel 数据处理函数句柄
      • 这里在读取数据时,对数据备份会调用函数句柄进行处理。返回需要的结果。
      • 用户定义自定义函数时,会将 excel 的 range 接口传递给 functionHandle 代表的数据处理程序.用户自定义函数的输入和输出参数中必须包含 range 接口。在用户自定义函数中,调用 range 接口来获取和操作数据。
      • 例如:
        matlab
        trim = xlsread('myExample.xls','MyData','','',@findMaxMin)
        % return
        trim =3.4845
        -6.6493
        % findHandle
        function [Data] = findMaxMin(Data)
        DataTemp = Data.Value;
        Count=Data.Count;
        Data.Value = cell(1,2);
        Data.Value{1} = DataTemp{1}; %max value
        Data.Value{2} = DataTemp{1}; %min value
        for k=1:Count
        v = DataTemp{k};
        if v>Data.Value{1}
        Data.Value{1} = v;
        end
        if v<Data.Value{2}
        Data.Value{2} = v;
        end
        end %end of findMaxMin.m
      • 在上面的例子中 Data 就是 Range 接口,如果希望了解接口的细节可以在 findMaxMin 函数中设置断点。
      • 最后一个 custom 输出参数,是在调用 functionHandle 后返回的信息。
      • 自己去研究一下吧,我试了一下感觉除了 num 其他的返回结果也非常奇怪。

excel 文件的写入

excel 文件的写入一般都是采用 xlswrite 函数。接下来重点介绍这个函数的用法。
- 调用形式
- xlswrite(filename,a)
- xlswrite(filename,a,sheet)
- xlswrite(filename,a,range)
- xlswrite(filename,a,sheet,range)
- status = xlswrite(filename,a,sheet,range)
- [status,msg] = xlswrite(filename,a,sheet,range)
- 参数解释
- filename:在这里 filename 的拓展名必须是系统中 excel 软件所能识别的。如果没有指定拓展名,则为 xls。
- A:是待写入的数据,可以是数组或者字符串。对于元胞数组如果只包含一个元素或者字符串也是可以的。但是 A 的行数和列数将会收到 excel 版本的限制。
- range:指定范围。如果指定的 range 大于待写的 a 的范围,那么在 a 范围之外将会自动填充 #N/A。如果range 小于 a,则 range 范围之外的数据不会被写入。
- status:成功返回 1,失败返回 0;
- msg:返回所有的错误和警报信息,是一个结构体数组。
- 日期的读写问题:无论在 matlab 还是在 excel 日期都是一种相对特殊的数据格式。

不同操作系统和应用程序下的参考日期

应用程序 参考日期 matlab january,0,0000 excel(window) january,1,1900 excel(macintosh) january,2,1904

- 问题:写入 excel 文件同样需要启动 excel 服务,如果启动不了 excel 服务就会尝试以 csv 格式写入文件。

使用 COM 组件技术处理 excel

com(component Object Model) 组件是 微软提供的一组二进制软件复用标准。利用 com 组件可以方便的将不同语言编写的,软件模块集成到一个应用中。

com 对象和接口

com 对象是一组符合 com 规范的软件模块。com 规范要求 com 对象对软件功能封装,因此用户不能直接访问 com 对象的数据和方法,而是通过 com 对象提供的 com 接口进行访问。com 接口由属性、方法和事件组成。com 对象的功能由一个或多个 com 接口来体现。一般来说,软件供应商会提供其应用程序的 com 对象的接口及接口的属性、方法和事件的信息。在众多接口中有两个基本的 com 接口。

  • IUnknown,这是所有的 com 对象都提供的一个接口,并且所有其他 com 接口都是由该接口派生的。
  • IDispacth,这是为支持自动化服务的应用程序提供方法和属性的接口。
    com 技术遵循客户端和服务器端的工作模式。调用 com 对象的程序是客户端,而提供软件功能的 com 对象属于服务器端。
  • 进程内服务器端(In-Progress Server),在 matlab 客户端进程内,com 组件作为 DLL 或 Active 控件被调用。此时,客户端和服务器使用相同的地址空间,因此客户端和服务器端的通信效率比较高。
  • 进程外服务器端(Out-of-progress Server),又可分为本地进程外服务器端(Local Out-of-Progress Server) 和远程进程外服务器端(Remote Out-of-Progress Server)。其中本地进程外服务器在与 matlab 客户端相互独立的另外一个进程内调用以 exe 文件或外部应用程序的方式调用 com 组件时,客户端与服务器所在的计算机相同,而地址空间不同。远程进程外服务器端所在的计算机与 matlab 客户端所在的计算机不同。所以从通信的速度上看,本地进程外服务器端与客户端的通信慢于进程内服务器端与客户端的通信,但优于远程进程外远程进程外服务器端与客户端的通信。

com 操作的基本函数

当 matlab 作为客户端时,它提供的 com 组件的操作函数主要包括三类:com 对象的创建、com 对象的信息获取、com 组件的 progID 获取。

  • 创建 com 对象

    • actxcontrol 函数,在 matlab 图形窗口(利用 figure 命令创建) 中创建 ActiveX 控件,如 mscal.calendar(日历控件)。创建的 ActiveX 控件均未进程内服务器。
    • actxserver 函数,如果 com 组件以 dll 的方式存在,则创建进程内服务端。如果 com 组件以可执行程序的方式存在,则创建进程外服务器端。
      以上两个函数均返回创建 com 对象的默认接口的句柄
    e = actxserver('Excel.Application')
  • 获取 com 对象的信息
    matlab 提供了访问 com 对象接口的方法、属性和事件的方式:
    • handle.methods,访问接口的方法
    • handle.events,访问接口的事件
    • get(handle),访问接口的属性
      用户还可以使用 get(handle,’PropertyName’) 函数获得接口中属性的值。
  • 获取 com 组件的 progID
    com 规范采用一个 128 位长度的数字常量(GUID)来标识 com 组件。同样,为了唯一地标识组件的接口,com 规范也采用这种 128 位的 GUID 来作为接口的标识。

matlab 使用 actxcontrollist 函数罗列当前系统中所有已注册 ActiveX 控件的信息。在 Microsoft 的 windows 系统中,使用该函数只能返回 ActiveX 控件的信息,而不能返回所有 com 组件的信息。安装或卸载程序也可能会引起该值的改变。

actxcontrolselect 函数可以打开一个用于选择 ActivX 控件的 GUI 界面。

一个读取数据实例

%climateAnalysis.mexl = actxserver('excel.application');%创建一个excel服务器exlWkbk = exl.Workbooks;%将 exl 接口的 Workbooks 传递给 exlWkbkexlFile = exlWkbk.Open([pwd '\climate2007.xlsx']);exlSheet1 = exlFile.Sheets.Item('Sheet1');robj = exlSheet1.Columns.End(4);  % Find the end of the columnnumrows = robj.row;                  % And determine what row it isdat_range = ['A1:G' num2str(numrows)]; % Read to the last rowrngObj = exlSheet1.Range(dat_range);exlData = rngObj.Value;x = cell2mat(exlData(2:end,2)); % mean temperaturey = cell2mat(exlData(2:end,6)); % sunshine amountfigure; hold on;plot(x,y,'ko');xlabel('平均气温(℃)');ylabel('全年日照量(小时)');xdata = [ones(size(x, 1), 1), x]; b = regress(y, xdata);        % linear regressionyreg = xdata*b;plot(x,yreg,'k');exlWkbk.Close;exl.Quit;exl.delete;

利用 com 技术实现数据格式化输出至 excel 文件

function xlscolorwrite(file,data,range,fontcolor,bgcolor)file = fullfile(pwd, file);exl = actxserver('excel.application');exlWkbk =exl.WorkBooks.Add();ran = exl.Activesheet.get('Range',range);ran.value = data;if nargin>=4ran.font.Color=color2num(fontcolor);endif nargin==5ran.interior.Color=color2num(bgcolor);endexlWkbk.SaveAs(file);exlWkbk.Close;exl.Quit;exl.delete;end  % end of xlscolorwrite.m
function [out] = color2num(in)r = in(3);g = in(2);b = in(1);r = uint8(r*255);g = uint8(g*255);b = uint8(b*255);r = dec2hex(r,2);g = dec2hex(g,2);b = dec2hex(b,2);color = [r g b];disp(color);out = hex2dec(color);end % end of color2num.m

在 windows 操作系统中,通过 Spreadsheet Link EX 工具箱提供的插件可以将 excel 和 matlab 集成到同一个计算环境中。通过应用 Spreadsheet Link EX 插件,可以在 excel 文件中使用 matlab 强大的数据处理和图形显示功能。具体怎么配置自己查看帮助文档吧,还是不错的。

原创粉丝点击