我正在编写一些软件来平均来自不同测量的许多数据点。我发现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.
任何帮助,非常感谢。
一切顺利,
布兰登