我目前正在努力解决一个棘手的Matlab问题:
我想将a.xlsx
中的第一张工作表复制到b.xlsm
中,并将其放在b.xlsm
中已经存在的所有工作表的前面。
另外,我想删除到a.xlsx
的所有链接,这些链接由于复制过程而在文档b.xlsm
中自动创建。
我首先尝试了BreakLink
(请参见下文),但是它没有用,因为EXCEL工作表中还定义了一些命名范围,仍然引用了文档a.xlsx
。这似乎阻止了breaklink方法删除链接。
所以现在我正在寻找是否有任何简单的方法可以通过使用Matlab代码删除EXCEL文档b.xlsm中所有已定义的命名范围?
非常感谢。
我当前的代码:
X = actxserver('Excel.Application');
xls_PathName = 'C:\temp\';
XW0 = X.Workbooks.Open([xls_PathName,'a.xlsx']);
XW2 = X.Workbooks.Open([xls_PathName,'b.xlsm']);
XW0.Worksheets.Item(1).Name = 'Sheet';
XW0.Worksheets.Item(1).Copy(XW2.WorkSheets.Item(1),[]);
%**************************************************************
% Place some code to delete EXCEL named ranges in b.xlsm here %
%**************************************************************
astrLinks = XW2.LinkSources(1)
XW2.BreakLink(astrLinks{1},1)
XW0.Close(false)
XW2.Save
XW2.Close(false)
X.Quit
答案 0 :(得分:0)
是否可以使用Matlab函数xlsread
和xlswrite
?我不确定您是否要复制公式,但是我认为这是可能的。
由于您要将其放置在b.xlsm
的开头,因此您将需要使用actxserver
(请参阅Inserting sheets with matlab),或者稍后使用{ {1}}以获取页数。
首先,在xlsinfo
中创建一个空白的第一张纸(代码未经测试,但来自上面的链接)
b.xlsm
您可能希望e = actxserver('Excel.Application');
xls_PathName = 'C:\temp\';
b = e.Workbooks.Open([xls_PathName,'b.xlsm']);
eSheets = b.ActiveWorkbook.Sheets;
eSheet1 = Item(eSheets,1);
eNewSheet = Add(eSheets,eSheet1);
b.Save
b.Close(false)
e.Quit
的三种输出格式将原始数据作为单元格数组获取(以避免拆分文本和数字数据)。现在,将工作表从xlsread
复制到a.xlsx
b.xlsm
希望这就是您想要的,如果我误解了,请告诉我