1,用函數:
[num,txt]=xlsread(filename)
num是數值部分,txt是文本部分。
2,用嚮導:
將excel檔案拷貝到Current Directory中開啟,就會出現Import Wizard:
data是數值部分,textdata是文本部分。
--
由於matlab中有str2num函數,將字元轉數值是很方便的,因此也許希望將excel中全部內容都當作文本讀進來,那麼可以修改原excel檔案,其中的數值列都轉成文本,方法如下:(來自http://www.mzwu.com/article.asp?id=1150
)
1.選中想轉為文本的列
2.選擇"資料"菜單下的"分列",開啟文本分列嚮導視窗
3.在步驟一中選擇"分隔字元號",點擊進入下一步
4.在步驟二中不選擇任何分隔號,點擊進入下一步
5.在步驟三中將列資料格式設定為"文本",點擊完成
這樣,再讀到matlab後此列就被當成文本了。
--
當然,由於textdata每個格用一個元胞,所以也完全可以將data和textdata讀進來後通過編程將data填充到textdata對應的元胞裡去,從而得到一個完整的表格。下面函數可以實現這個功能:
function sheet=joint(data,textdata,beginline) %beginline指明資料從哪一行開始填充,即等於表頭所佔行數+1 %從左向右對空列依次填充,因此須保證原表格中沒有空列才能正確填充 sheet=textdata; if size(data,2)==0 return; end emptycol=zeros(1,size(sheet,2));%記錄sheet各列是否為空白 %找sheet的所有空列 for j=1:size(sheet,2) %看sheet的第j列是否為空白 empty=true; for i=beginline:size(sheet,1) if ~isempty(sheet{i,j}) empty=false; end end%得到empty if empty==true emptycol(j)=1; end end%得到emptycol index=find(emptycol==1); %用data填充sheet中由index所指向的各列 pdatacol=1; for j=index if pdatacol>size(data,2) error('數值不足以填充所有空列!(可能是由於原表中存在空列)'); end %填充sheet的第j列 for i=beginline:size(sheet,1) sheet{i,j}=data(i-beginline+1,pdatacol); end pdatacol=pdatacol+1; end end |
註:
將數值與文本合在一起看似比較完美,但實際上往往並不好,尤其是需要對數值作批量處理的時候:如果放在矩陣裡,可以進行塊操作,但如果放在元胞裡,就必須用迴圈遍曆。由此看來,matlab將數值與文本分開匯入不無道理。