Matlab:使用Matlab复制Excel工作表并删除定义的EXCEL名称

时间:2018-08-16 11:02:04

标签: excel matlab activex worksheet

我目前正在努力解决一个棘手的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

1 个答案:

答案 0 :(得分:0)

是否可以使用Matlab函数xlsreadxlswrite?我不确定您是否要复制公式,但是我认为这是可能的。

由于您要将其放置在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

希望这就是您想要的,如果我误解了,请告诉我