2015-06-11 101 views
0

我正在編寫一些軟件來平均來自不同測量的許多數據點。我發現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. 

任何幫助,非常感謝。

一切順利,

布蘭登

回答

0

更新:調試和找到解決方案,新的工作循環如下。

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('Workbook_%d.ActiveSheet.Copy(AVGWB_finish);',LensNum)); 

有限制的,即當平均工作簿保存活動工作表必須是完成片,但它的功能現在。

相關問題