我正在編寫一些軟件來平均來自不同測量的許多數據點。我發現excel更適合處理偶爾的數據點(用戶可以輕鬆查看和刪除它)。Matlab/ActiveX Excel - 將特定工作表複製到一個工作簿中
接收測量結果的腳本會生成一個.xlsx文件,並將序列號中的格式化數據轉儲爲名稱,因此很容易明確引用該表格。輸出看起來是這樣的:
http://i.stack.imgur.com/wHgKN.png(抱歉,不能張貼圖片還)
有跡象表明,在這個格式將被複製表的工作簿5-50之間。目標工作簿具有空白工作表「開始」和空白工作表「完成」,然後是工作表「summary1」,通過=AVERAGE(start:finish!B53)
和許多類似命令的平均值開始和結束平均值。
我使用MATLAB代碼
Excel = actxserver('excel.application');
Excel.Visible = 1;
[ AVGWBFilename, AVGWBPath ] = uigetfile('path\*.xlsx','Locate Average Spreadsheet','MultiSelect','off');
AVGWBLoc = strcat(AVGWBPath,AVGWBFilename);
AVGWB = Excel.Workbooks.Open(AVGWBLoc); % get filename and path of average workbook, then open
LensDirectories = regexp(genpath(AVGWBPath),['[^;]*'],'match');
有一個用戶選擇的工作簿複製到。 LensDirectories
單元格數組由目錄填充到包含我想從中複製的xlsx文件的子文件夾。然後他們通過循環:
for i = 2 : length(LensDirectories);
tempdir = dir(LensDirectories{i});
tempfile = tempdir(7,1).name;
temppath = fullfile(LensDirectories{i},tempfile);
LensNum = str2num(sprintf('%s',LensDirectories{i}(end-5:end)));
eval(sprintf('Workbook_%d = Excel.Workbook.Open(temppath);',LensNum));
eval(sprintf('LensSheet_%.0f = Workbook_%d.Sheets("%d");',i,LensNum,LensNum));
但是,這裏是我卡住的地方。最終的嵌套sprintf
產生一個工作字符串,但eval拋出一個錯誤「輸入字符在MATLAB語句或表達式中無效」。 - 我認爲這是由於字符串中的引號引起的?
一旦工作簿打開,我應該能夠做一個變量來引用工作表,但我也堅持在代碼之間成功複製工作簿。目標工作簿和源工作簿將爲操作打開 - 我認爲代碼類似'Workbook_222045("222045").Copy Before:=AVGWB("finish")'
或Workbook_222045("222045").Copy(AVGWB("finish")
,但我不知道visualbasic,這是我第一次必須使用ActiveX控件與matlab,所以我不確定如何進行。
我也發現這個片段看起來更好,但索引取決於圖紙編號,它會隨着平均xlsx工作簿的填充而改變。
WS = Excel.ActiveWorkbook.Sheets;
WS.Item(1).Copy([],WS.Item(1)); %to copy after first sheet.
WS.Item(1).Copy([],WS.Item(WS.count)); % to keep duplicating, new sheet will be after all existing sheets.
任何幫助,非常感謝。
一切順利,
布蘭登