MatLab函数xlsread、xlswrite、xlsfinfo

【注】详情请参阅 MatLab help 文档

1. xlsread 函数

1.1 作用

读取 XLS、XLSX、XLSM、XLTX 和 XLTM 电子表格文件。
【注】xlsread 仅读取 7 位 ASCII 字符,不支持非相邻范围。

1.2 语法

1
2
3
4
5
6
7
8
data = xlsread(filename)
data = xlsread(filename,sheet)
data = xlsread(filename,xlRange)
data = xlsread(filename,sheet,xlRange)
data = xlsread(filename,sheet,xlRange,'basic')
[data,text,raw] = xlsread(___)
___ = xlsread(filename,-1)
[data,text,raw,custom] = xlsread(filename,sheet,xlRange,'',processFcn)
  • data = xlsread(filename)
    读取电子表格文件的第一张工作表,并在矩阵中返回数值数据。

  • data = xlsread(filename,sheet)
    读取电子表格文件中指定的工作表,sheet 的可选值为 字符向量|字符串|正整数,即指定工作表的名称(不能包含 : 号,basic 模式的 XLS 文件区分大小写)或工作表索引的正整数。要确定电子表格中工作表的名称,请使用 xlsfinfo 函数(见下文)。

  • data = xlsread(filename,xlRange)
    从电子表格文件中的第一张工作表中指定范围内读取数据。xlRange 为矩阵范围,指定为字符向量或字符串(不区分大小写),使用 Excel 范围语法(使用 Excel A1 引用样式),用两个对角指定 xlRange,即要读取的区域,比如 'D2:H6'。(basic 模式的 XLS 文件不支持范围选择)

【注】Excel A1 引用样式为行号用整数标识、列号用字母标识,比如 C3 就表示为第 3 行第 C 列对应的单元格;Excel R1C1 引用样式为行号、列号均用整数表示,比如 R3C3 就表示为第 3 行第 3 列对应的单元格(R 即 row,C 即 column)。

  • data = xlsread(filename,sheet,xlRange)
    读取电子表格中指定的工作表内的范围。

  • data = xlsread(filename,sheet,xlRange,'basic')
    在 basic 导入模式下读取电子表格中的数据(basic 模式用于系统未安装 Excel 情况下使用),该模式支持 XLS、XLSX、XLSM、XLTX 和 XLTM 文件。若不指定所有参数,则未指定的参数用 '' 作为占位符。

  • [data,text,raw] = xlsread(___)
    使用上述格式读取电子表格,在数值矩阵 data 中返回数据,在元胞数组 text 中返回文本字段,在元胞数组 raw 中返回数值数据和文本数据。

  • ___ = xlsread(filename,-1)
    打开一个 Excel 窗口以便使用交互方式来选择数据:选择工作表,将鼠标拖放到所需范围上,然后点击确定(只用安装了 Excel 软件的 Windows 计算机支持改语法)

  • [data,text,raw,custom] = xlsread(filename,sheet,xlRange,'',processFcn)
    读取电子表格,对数据调用 processFcn(函数句柄),并在 data 中返回最终的数值结果,在元胞数组 text 中返回文本字段,在元胞数组 raw 中返回数值和文本数据,在数组 custom 中返回 processFcn 的第二个输出(只有安装了 Excel 软件的 Windows 计算机支持改语法)

1.3 举例

  • 将电子表格中第一个工作表中在范围 [0.2,0.8] 之外的值设置为 0.2 或 0.8,并返回更改后的元素的索引。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[data,text,raw,index] = xlsread('myexample.xlsx',1,'','',@setMinMax);

function [data,index] = setMinMax(data)
minval = -1;
maxval = 1;
index = [];

for i = 1:data.Count
v = data.Value{i};
if v > maxval
data.Value{i} = maxval;
index = [index i];
elseif v < minval
data.Value{i} = minval;
index = [index i];
end
end
end

2. xlswrite 函数

2.1 作用

将数据写入 XLS、XLSX、XLSB 或 XLSM 表格文件中。

【注】如果未安装 Excel,则 xlswrite 会将矩阵 A (必须为数值矩阵)写入逗号分隔值格式(CSV)的文件中,同时忽略掉 sheet 和 xlRange 参数。

2.2 语法

1
2
3
4
5
6
xlswrite(filename,A)
xlswrite(filename,A,sheet)
xlswrite(filename,A,xlRange)
xlswrite(filename,A,sheet,xlRange)
status = xlswrite(___)
[status,message] = xlswrite(___)
  • xlswrite(filename,A)
    将矩阵 A 中的数据写入 filename 指定的电子表格文件中的第一张工作表,从单元格 A1 开始写入。filename 为文件(相对/绝对)路径的字符向量或字符串。如果 filename 指定的文件不存在,xlswrite 将创建该文件。filename 支持扩展名 .xls、.xlsx、.xlsb、.xlsm,如果 filename 未指定扩展名,则 xlswrite 将使用默认扩展名 .xls 。

  • xlswrite(filename,A,sheet)
    将矩阵 A 中的数据写入 filename 指定的电子表格文件中指定的工作表。sheet 的可选值为 字符向量|字符串|正整数,即指定工作表的名称(不能包含 : 号)或工作表索引的正整数。如果 sheet 不存在,xlswrite 将在工作表集合末尾添加一张新的工作表。如果 sheet 为大于工作表张数的索引,则 xlswrite 将追加空工作表直至工作表数等于 sheet。

【注】当添加新工作表时,xlswrite 都会生成一条警告信息提示已添加新工作表。

  • xlswrite(filename,A,xlRange)
    将矩阵 A 中的数据写入 filename 指定的电子表格文件中的第一张工作表中由 xlRange 指定的矩形区域内。xlRange 为矩阵范围,指定为字符向量或字符串(不区分大小写),使用 Excel 范围语法(使用 Excel A1 引用样式),用两个对角指定 xlRange,即要读取的区域,比如 'D2:H6'(当指定了 sheet 后只能指定第一个单元格,如 'D2')。xlswrite 不能识别 Excel 文件中的命名范围
    如果 xlsRange 大于输入矩阵 A 的大小,则 Excel 软件将使用 #N/A 填充该区域的其余部分;如果 xlRange 小于 A 的大小,则 xlswrite 仅将适应 xlRange 的子集写入到 Excel 文件。

【注】Excel A1 引用样式为行号用整数标识、列号用字母标识,比如 C3 就表示为第 3 行第 C 列对应的单元格;Excel R1C1 引用样式为行号、列号均用整数表示,比如 R3C3 就表示为第 3 行第 3 列对应的单元格(R 即 row,C 即 column)。

  • xlswrite(filename,A,sheet,xlRange)
    将矩阵 A 中的数据写入 filename 指定的电子表格文件中指定的工作表中指定的区域内。由于已经指定工作表 sheet,xlRange 只能指定第一个单元(如 'D2'),xlwrite 将从该单元格开始写入输入矩阵 A 。

  • status = xlswrite(___)
    使用上述任何一个语法写入数据,当操作成功时,status 为 1;否则,status 为 0。

  • [status,message] = xlswrite(___)
    在 status = xlswrite(___) 基础上,将写入操作生成的任何警告或错误信息写入结构体 message 。

2.3 举例

1
2
3
filename = 'Data/myexample.xlsx';
A = randi(100,100,100);
xlswrite(filename,A,'A');

3. xlsfinfo 函数

3.1 作用

确认文件是否包含 Excel 电子表格。

【注】xlsfinfo 仅支持 7 位 ASCII 字符。

3.2 格式

1
2
3
status = xlsfinfo(filename)
[status,sheets] = xlsfinfo(filename)
[status,sheets,xlFormat] = xlsfinfo(filename)
  • status = xlsfinfo(filename)
    确认 filename 是否为 xlsread 函数可读的文件,staus 为字符向量。若 filename 是xlsread 可读的文件,则 status 为描述性文本;若 filename 不是 xlsread 可读的文件,则 status 为空(即 '');若 MatLab 找不到文件,则 xlsfinfo 返回错误。

  • [status,sheets] = xlsfinfo(filename)
    在 status = xlsfinfo(filename) 的基础上,返回 filename 文件中每个工作表的名称到 sheets 变量中。sheets 为 1×n{1 \times n} 字符向量元胞数组(每个元胞包含工作表的名称),其中 nn 是文件中工作表数量。如果 xlsread 无法读取特定的工作表,对应元胞包含错误;如果 xlsfinfo 找不到文件,则 sheets 包含错误信息。

  • [status,sheets,xlFormat] = xlsfinfo(filename)
    在 [status,sheets] = xlsfinfo(filename) 的基础上,返回 Excel 有关文件格式的说明到 xlFormat 变量中(在未安装 Excel 的系统上,xlFormat 是一个空字符向量 '')。xlFormat 为字符向量,在安装有 Excel 的系统上,xlFormat 为以下选项之一。

xlFormat 说明
'xlOpenXMLWorkbook' XLSX 格式的电子表格(Excel 2007 或更高版本)
'xlWorkbookNormal' 或 'xlExcel8' XLS 格式的电子表格(与 Excel 97-2003 兼容)
'xlCSV' 逗号分隔值格式(CSV)文件
'xlHtml' 或 'xlWebArchive' 导出为 HTML 格式的电子表格