2015-06-11 77 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)); 

有限制的,即当平均工作簿保存活动工作表必须是完成片,但它的功能现在。

相关问题