1. 读取Excel文件
(a) 命令方式xlsread:
读取命令:[data,text] = xlsread(FileName, SheetName, Range);
data保存的是数据单元格的值, text保存的是字符串单元格的内容。
2. 将MATLAB数据写入到Excel
写入命令:xlswrite(FileName, Output, SheetName, Range)
其中Output为要写入的数据,可以是矩阵也可以是cell类型
使用例子1:
%% 导入数据 [~, ~, raw] = xlsread('1.xlsx','Shee'); raw(cellfun(@(x) ~isempty(x) && isnumeric(x) && isnan(x),raw)) = {''}; %% 将非数值元胞替换为 NaN R = cellfun(@(x) ~isnumeric(x) && ~islogical(x),raw); % 查找非数值元胞 raw(R) = {NaN}; % 替换非数值元胞 %% 创建输出变量 data = reshape([raw{:}],size(raw)); %% 将导入的数组分配给列变量名称 VarName1 = data(:,1); VarName2 = data(:,2); VarName3 = data(:,3); VarName4 = data(:,4); VarName5 = data(:,5); VarName6 = data(:,6); VarName7 = data(:,7); VarName8 = data(:,8); VarName9 = data(:,9); VarName10 = data(:,10); VarName11 = data(:,11); %% 清除临时变量 clearvars data raw R;
这个代码如何生成呢?
在命令窗输出uiimport,然后选择要导入的文件
然后就可以看到生成matlab代码,就可以安装自己要求编写需要导入的内容了。
使用例子2:
excelPath='excel'; excelStr = dir(fullfile([excelPath,'*.xlsx'])); excelName = excelStr.name; savePath=''; P = '..\'; D = dir([P '*.png']); A=[]; [~,TXT1] = xlsread([excelPath,excelName],'SheetName','C1:L1'); [~,~,TXT2] = xlsread([excelPath,excelName],'sheetname','A2:B251'); for k = 1 : length(D) x=imread([P D(k).name]); s=strcat(savePath,D(k).name); imwrite(x,s); end<span style="font-family:Microsoft YaHei;font-size:18px;"> </span>
使用例子3:
(1) xlswrite('filename.xls', data)将data导入到filename.xls表中,从头开始写入data数据。
如xlswrite('matrix.xls', data),data=[1 2 3; 4 5 6],则matrix.xls表的最开始两行将被写入data这两行数据。
(2) xlswrite('filename.xls', data, ‘range’)。range表示将data导出道excel表的区域,有区域的对角值表示区域。
如xlswrite(‘matrix.xls', data, ‘A12:J29’)则matrix.xls表中的A12:J29’区域将被填写data的数据。
(3) xlswrite('filename.xls', data, ‘sheet‘, ’range‘)。sheet表示将data数据写在excel的哪个表格里面。剩余的单元被赋予控制没看起来像乱码的样子。
如xlswrite(‘matrix.xls', data,’sheet2‘ , ‘A12:J29’)则matrix.xls的sheet2单元的A12:J29单元将被充满数据。
大家觉得每次是不是excel很烦需要通过代码编写,为什么不写一个脚本来实现读和写的功能呢?
my_excel.m关于matlab和excel的数据导入导出
function [A, d] = loda_down_data(sheet, range, number) C=xlsread('test.xlsx',sheet, range); C=C'; r=length(C); for i=1:1:r for j=1:1:r A(i, j) = C(1, i) / C(1, j); end end xlswrite('result1.xlsx', A, number, 'E2:O12'); %Compute vector and roots %v is vector,d is roots [v, d] = eig(A); [x,y]=find(d==max(d(:))); xlswrite('result.xlsx', d(x, y),number, 'B13'); B=v; [R, W]=size(B); xlswrite('result.xlsx', A/sum(A), number, 'B14:B24'); end