我有一個 300 列的 Excel 表,我只需要幾個范圍。在正常情況下,我使用“匯入資料”應用程式。但這一次是不可能的,因為有些字串是雙的。我只想讀取第一行并從中讀取幾列(所有字串)。舉個例子:我的第一行是這樣的字串:
x= ["'[23Na] '" , "'[24Mg] '" , "'[25Mg] '" , "'[26Mg] '" , "'[26Mg] '" , "'[27Al] '" , "'C2H3 '" , "'[28Si] '"]
現在我只想擁有 A1:B1 和 E1:F1。我如何在這里使用 xlsread 與多個范圍以這樣的字串結尾:
x= ["'[23Na] '" , "'[24Mg] '" , "'[26Mg] '" , "'[27Al] '"]
我很感激每一個提示。
uj5u.com熱心網友回復:
我希望我的回答不會因為試圖說服您以不同的方式解決問題而被否決。:-)
問題有兩個方面:
問題 1. xlsread()不支持不相交的范圍。這意味著讀取不相交范圍的唯一方法是呼叫xlsread()每個連續范圍,然后組合結果,例如:
FNAME = 'Book1.xlsx';
SHNAME = 'Sheet1';
RANGES = {'A1:B1', 'E1:F1'};
READFUN = @(rg) xlsread(FNAME, SHNAME, rg);
[~,~,raw] = cellfun(READFUN, RANGES, 'UniformOutput', 0);
x = [raw{:}]; % [!] depending on RANGES, this might fail
問題 2.每次呼叫時,xlsread() (a)為 Excel 實體化一個 COM 服務器,(b)打開檔案,(c)讀取資料,(d)關閉檔案,以及(e)清理 COM 服務器。步驟 (a)、(b)、(d) 和 (e) 增加了很多開銷,以便在步驟 (c) 中僅讀取一個小范圍。
方法。我建議您一次讀取所有原始資料:它會更快并且(有趣的是)更少的記憶體密集型。您將獲得一個包含作業表中所有資料的單元矩陣,但隨后您可以使用 MATLAB 更強大的索引功能(與 Excel 的范圍相比)處理資料:
[~,~,raw] = xlsread(FNAME, SHNAME); % all the data, numeric or text
x = raw(1, [1,2,5,6]);
... continue processing here
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454243.html
上一篇:用數字c#替換字串中的每個出現
