data=load('路徑\文件.xls');
data=xlsread('路徑\文件.xls');
load是用來讀取文檔,類似於.log .txt等等
圖像直接讀取用imread('文件名')
但是如果圖像已經存在.mat文檔裏了
如存在矩陣a裏面
S = load(文件名, '-mat', a)
即可讀取已經存在.mat的圖像。
圖像具體讀到的地方是你的工作空間,workspace。可以打開這個工作空間窗口查看。
例如 a = imread('x.jpg')
讀好以後就存在變量a了。
MATLAB 讀寫excel數據
1、讀取當前路徑下的excel表格,存儲數據,文字字符
[number,txt,raw]=xlsread(‘file.xls’);
其中:file爲所要讀取的excel;
number中含有file.xls中的數據,不包含表頭,如果遇到有非數字的字符則爲NaN;
txt中含有file.xls中的所有非數字字符,包含表頭,遇見數字則爲空字符;
raw中存儲的是file.xls中的原始數據,不做任何處理,也包含表頭。
注1:輸入參數中.xls可以不寫;輸出參數可以缺省,只有一個參數只取數字,兩個含字符;
注2:文件名和表格中的內容均允許有漢字的存在。
例1:當前路徑下有名爲0520的excel表格。其中內容如下圖1:
在MATLAB中執行命令:[number,txt,raw]=xlsread('0520')
結果如下:
2、讀取指定路徑下的excel表格,存儲數據,文字字符
[number,txt,raw]=xlsread(‘address’);
其中:address爲所要讀取的excel表格的地址;
number中含有表格中的數據,不包含表頭,如果遇到有非數字的字符則爲NaN;
txt中含有表格中的所有非數字字符,包含表頭,遇見數字則爲空字符;
raw中存儲的是表格中的原始數據,不做任何處理,也包含表頭。
例2:[number,txt,raw]=xlsread('D:\My Documents\MATLAB\shudu\0520')
結果如上面圖2。
注1:本例中的表格將英文改成漢字,驗證效果是一樣的,MATLAB讀表允許漢字存在。
3、讀取指定表格指定區域的內容
[number,txt,raw]=xlsread('file.xls or address','Sheet','range')
其中:‘Sheet1’是指定頁數的表格,可以是自命名,如‘初級題40’;
‘a1:c3’是讀取的範圍,是從a1到c3的矩形區域;
其他輸入輸出參數與前面一致。
注1:裏面的‘Sheet1’和‘sheet1’,‘a1:c3’和‘A1:C3’效果等同,即不區分大小寫
例3:[number,txt,raw]=xlsread('0520','Sheet1','a1:c3')
4、讀取區域含有空白或者字符,需要用特定數值替代
對於所讀取的數據有時達不到自己的需求,比如,表格中有空白位置,讀出來就是“NaN”,例如本人所要做的數獨解題,題目中只有部分位置是非零數字,其餘爲空白待填,這時xlsread命令會直接將表格中的空白位置用“NaN”替代,如下圖4(1):
A= xlsread('數獨題目.xls','a121:i129')
由上面結果可知,“NaN”替代了所有空白位置。但這樣有時並不適合進行MATLAB運算,比如填數獨就是。這時需要將這些空白位置用特定的值替代,這裏我們可以用以下命令將空白位置全部賦成0
A(isnan(A))=0,
結果如下圖4(2):
圖4(2)
注1:isnan函數判斷是否爲nan,是返回1,否則返回0。
5、動態區域讀取
前面所讀取的excel區域是固定的,比如是‘Sheet1’的‘A1:C3’,但可能會碰到區域不是固定的,比如我要隨機選取數獨題,事先無法得知選哪個題,也就無法確定範圍,這時就碰到如何讀取動態區域的問題。方法其實和前面類似,關鍵是獲取動態的字符串即可。如果需要獲取動態區域的數值,需要用到字符串轉換將數字轉成字符串。
例5:數獨難度有“初級”、“高級”、“專家級”和“骨灰級”,放在excel表“數獨題目”中,每個級別有40個題目。先讓用戶選取難度即被,再隨機選取1到40題中的一題。
步驟如下:
Step1:選取難度,可以用menu命令製作選取菜單
lever = menu('select a lever','primary','senior','experts','hardcore');
switch lever
case 1
sheet='初級題40';
disp('you choose lever: primary!');
case 2
sheet='高級題40';
disp('you choose lever: senior! ');
case 3
sheet='專家題40';
disp('you choose lever: experts! ');
case 4
sheet='骨灰題40';
disp('you choose lever: hardcore! ');
end
Step2:隨機選題,確定題號和起始位置
n=randint(1,1,[1,40]); %%%%選取1到40中的隨機數一個
fprintf('question number is %d\n',n)
start=(n-1)*10+1; %%%%確定起始位置
Step3:獲取區域的動態字符串,使用字符串拼接,需要將數字轉成字符
cxd1='a';
cxd2=num2str(start); %%%%數字轉字符
cxd3=':';
cxd4='i';
cxd5=num2str(start+8);
cxd=[cxd1 cxd2 cxd3 cxd4 cxd5]; %%%%動態區域
Step4:讀取表格,並把空白位置置零
A = xlsread('D:\暫存\數獨大全\數獨題目.xls',sheet,cxd);
A(isnan(A))=0;
結果如下圖5(1)和5(2):先從菜單選取“primary”,抽中第37題。
6、數據寫入excel中
方法和讀取類似,不再說明,直接上例子
例6,將數獨求解結果寫入excel中,頁不變,行不變,列向右移6格的區域中
zxc1='o';
zxc2=num2str(start);
zxc3=':';
zxc4='w';
zxc5=num2str(start+8);
zxc=[zxc1 zxc2 zxc3 zxc4 zxc5];
success = xlswrite('D:\暫存\數獨大全\數獨題目.xls',A,sheet,zxc);
其中:xlswrite第一個參數爲表格名,或者地址
第二個參數“A”,爲要寫入的數據
第三個參數“sheet”爲表格頁,與前面讀取時同一個值
第四個參數“zxc”爲寫入區域,獲取方法同樣是字符串拼接。
數獨題求解後結果寫入excel中,如下圖6