MATLAB 讀寫excel數據

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:當前路徑下有名爲0520excel表格。其中內容如下圖1


1  0520.xls中的內容

   MATLAB中執行命令:[number,txt,raw]=xlsread('0520')

結果如下:

  
                 
1                                      2

 

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’是讀取的範圍,是從a1c3的矩形區域;

         其他輸入輸出參數與前面一致。

   1:裏面的Sheet1sheet1,a1:c3A1:C3效果等同,即不區分大小寫

  3[number,txt,raw]=xlsread('0520','Sheet1','a1:c3')

   
                 
3

 

4、讀取區域含有空白或者字符,需要用特定數值替代

   對於所讀取的數據有時達不到自己的需求,比如,表格中有空白位置,讀出來就是NaN,例如本人所要做的數獨解題,題目中只有部分位置是非零數字,其餘爲空白待填,這時xlsread命令會直接將表格中的空白位置用NaN替代,如下圖4(1)

    A= xlsread('數獨題目.xls','a121:i129')

  
                            
4(1)

   由上面結果可知,NaN替代了所有空白位置。但這樣有時並不適合進行MATLAB運算,比如填數獨就是。這時需要將這些空白位置用特定的值替代,這裏我們可以用以下命令將空白位置全部賦成0

    A(isnan(A))=0

   結果如下圖4(2)

   

                             4(2)

   1isnan函數判斷是否爲nan,是返回1,否則返回0

 

5、動態區域讀取

   前面所讀取的excel區域是固定的,比如是Sheet1A1:C3,但可能會碰到區域不是固定的,比如我要隨機選取數獨題,事先無法得知選哪個題,也就無法確定範圍,這時就碰到如何讀取動態區域的問題。方法其實和前面類似,關鍵是獲取動態的字符串即可。如果需要獲取動態區域的數值,需要用到字符串轉換將數字轉成字符串。

   5:數獨難度有初級高級專家級骨灰級,放在excel數獨題目中,每個級別有40個題目。先讓用戶選取難度即被,再隨機選取140題中的一題。

   步驟如下:

    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]);   %%%%選取140中的隨機數一個

    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題。

  
        
5(1)                                   5(2)

 

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

        
                               
6

 http://blog.sina.com.cn/s/blog_6aaea1760100r08x.html

發佈了24 篇原創文章 · 獲贊 11 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章