excel - Matlab:使用 Matlab 复制 Excel 表并删除定义的 EXCEL 名称
问题描述
我目前正在努力解决一个棘手的 Matlab 问题:
我想将第一张纸复制a.xlsx
到b.xlsm
并将其放在所有已存在的纸的前面b.xlsm
。此外,我想删除由于复制过程而a.xlsx
在文档中自动创建的所有链接。b.xlsm
我第一次尝试BreakLink
(见下文)但没有奏效,因为 EXCEL 表中还定义了一些命名范围,仍然指的是 document 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
解决方案
是否可以使用 Matlab 函数xlsread
和xlswrite
?我不确定您是否要复制公式,但我认为这是可能的。
由于您想将它放在开头,b.xlsm
您将需要使用actxserver
(请参阅使用 matlab 插入工作表)或稍后手动复制每张工作表,使用来自的输出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
[num,txt,raw] = xlsread([xls_PathName,'a.xlsx'],1);
xlswrite([xls_PathName,'b.xlsm'],raw,1);
希望这是您想要的,如果我误解了,请告诉我
推荐阅读
- python - 如何在 python 中使用 opencv 防止分段错误
- sqlite - 尽管受到互斥锁保护,SQLite 更新失败并显示“数据库已锁定”
- css - 图标的范围很奇怪(CSS 范围 Vue.js 3)
- javascript - 通过切片使用异步迭代器进行集合的顺序映射
- java - 为转换提供资源提示时,Dataflow Prime 作业失败
- javascript - 事件“OnKeyDown”在反应应用程序中工作不正确
- javascript - Inquirer.js javascript 输入中的选项
- reactjs - React 组件不刷新
- reactjs - React Router V6 路由
- javascript - 从 CSV 中的十六进制代码创建位图图像