MATLAB 讀取和寫出Excel文件的方法-單個以及自動循環讀寫多個情況


 一.讀取數據

1.用xlsread函數讀取一個Excel文件

(1)num=xlsread(filename)
filename是單引號括起來的帶路徑的文件名,函數直接讀取filename所指文件的sheet1中的數據區域存儲到雙精度矩陣num中;其中,數據區域的選取規則是:對表格前幾個含有非數值的行(列)直接忽略,不算入數據區域;另外如果在數據區域中含有非數值的單元,將其處理為nan。


(2)num = xlsread(filename, -1)
輸入后matlab將會打開相應的exel文件,用鼠標選擇需要導入的數據區域,可以切換到想要的sheet。
(3)num = xlsread(filename, sheet)
其中sheet用來指定讀入excel文件的第幾個sheet,此時的sheet取值大於1的整數。


(4)num = xlsread(filename,sheet, 'range')
其中range指定一個矩形的區域,用單引號括起來;例如:'D2:H4'代表以D2和H4為對角定點的矩形域;
注意當excel中有合並單元格時,任何一個合並前的單元格的名字(比如D1)都會指代整個合並后的單元格,而將整個單元格讀入,所以為了避免麻煩,盡量避免在需要讀入的表格中合並單元格。

例如:將讀取D盤下的一個文件路徑為:D:/test/daxia.xls
num = xlsread('d:/test/daxia.xls',2,'D2:H4')讀取sheet2的D2:H4區域數據
如果要進行交互式的選擇用:num= xlsread('d:/test/daxia.xls',-1)

2.批量的文件要讀取


首先將多個文件進行批量重命名例如daxia1.xls,daxia2.xls,daxia3.xls,...
然后用循環的方式實現:
for i=1:100
    filename=['d:/test/daxia',num2str(i),'.xls'];
    num=xlsread(filename)
end

 

[NUM,TXT,RAW]=xlsread('filename')  讀出excel中所有的數據包括文字: NUM返回的是excel中的數據,TXT輸出的是文本內容,RAW輸出的是未處理數據,這里因為文本占用的矩陣一共是8行6列,所以就輸出了如上內容。一般情況下,我們讀取的都是excel中的數據,所以可以直接用[NUM]=xlsread('example'),只輸出數據矩陣便可。

Num中屬於精度double類型,只能讀取文檔中的數字,如果有一列不是數字,那么就會返回NaN,;txt屬於cell類型可以讀取文本,raw也為cell類型既可以讀取數字可以讀取文本並且每一列的值不需要是同一個類型的,但是在數組為空的時候,txt返回空值,raw返NaN。

 

例1:data.xlsx中的數據為:

 

 1.  a= xlsread('data.xlsx')  ,則返回值為:

 

 2.   a = xlsread('data.xlsx',sheet,'B2:C6') ,則返回值為:

 

 3.    [num,txt,raw,custom] = xlsread('data.xlsx')  ,則返回值為:

 

 

 

 

 

 例2:給出pailie3.xlsx部分數據

  

 

 1.fid = xlsread('pailie3.xlsx');

 

 第二列為字符串,讀出來顯示NaN (Not a Number,不是數字),且fid類型為double

2.[num,txt,raw] = xlsread('pailie3.xlsx');

 

 num 為double 類型

txt為cell類型,只有第二列和第11列被讀出來

raw為cell類型,能同時讀取字符或者數字。

總結:只需要操作數據時可以使用1中讀取方法或者使用num;當需要操作字符時,可以使用txt;raw是通用的。

 

轉自https://blog.csdn.net/qq_41325698/article/details/95251829

參考https://blog.csdn.net/qq_43392493/article/details/100528582

          https://blog.csdn.net/roytao2/article/details/54098053?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.channel_param

詳細參考matlab Help 文檔:

注意https://www.mathworks.com/help/matlab/ref/xlsread.html

xlsread只讀取7位ASCII字符。xlsread不支持非連續范圍。

二. 寫入數據

1.寫入單個文件

(1)xlswrite(filename,A)   將矩陣A寫入Microsoft®Excel®電子表格工作簿中的第一個工作表,文件名從單元格A1開始。

(2)xlswrite(filename,A,sheet)   寫入指定的工作表。sheet為正整數,

(3)xlswrite(filename,A,xlRange)   寫入到工作簿的第一個工作表中由xlRange指定的矩形區域。使用Excel范圍語法,如“A1:C3”。

(4)xlswrite(filename,A,sheet,xlRange)   寫入指定的工作表和范圍。

(5)status = xlswrite(___)          使用前面語法中的任何輸入參數返回寫操作的狀態。 當操作成功時,狀態為1。否則,狀態為0。

(6)[status,message] = xlswrite(___)    在結構消息中返回由寫操作生成的任何警告或錯誤消息。

filename是需要保存的文件路徑,只寫文件名,保存為當前路徑,在matlab界面左側的文件樹下即為當前路徑;如果filename中有路徑和文件名就會保存至指定路徑

A是要保存的變量,如x,x'為轉置,可以豎直輸出 ;  sheet是excel的頁數,輸入整數便可以指定對應sheet ; xlRange是保存的單元格位置,‘A3'為從A3單元格開始輸入‘A3:D8'為保存單元格區域

status為1讀取成功,0為讀取失敗; message為輸出的報錯信息

 

2. xlswrite函數輸出多個文件時,如何自動更改文件名?

核心思想:利用num2str將數值轉換成字符串寫入xlswrite函數里面。

用for循環可以實現
假設N是誤差矩陣的個數
for i=1:N
     xlswrite(['誤差' num2str(i) '.xlsx'],wucha,'sheet1','A1'); 
end

從sheet1中的A1開始寫,wucha--指自己要寫入的數據,方括號里面的指的是每一自動更改名稱的表達式

參考:https://zhidao.baidu.com/question/470310196.html

         https://www.mathworks.com/help/matlab/ref/xlswrite.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM