如何在draw.io中自动生成容器专属占位符与独立引用?
在Draw.io中批量生成带独立占位符的容器
方法1:原生查找替换+批量复制
- 先将模板容器的占位符改成带编号的唯一命名,比如把
unique_id改为id_1,name改为name_1,文本引用同步调整为Container %id_1% - %name_1% is of gender %gender_1% and is %age_1% years old. - 复制模板容器到需要的数量,然后逐个选中容器,用「编辑 > 查找替换」功能,将当前容器内的
_1批量替换为对应编号(比如第2个容器替换为_2,第3个替换为_3),注意勾选「仅在选中元素中替换」 - 该方法适合中小批量需求,操作成本远低于手动逐个修改
方法2:XML导出修改后导入
- 将模板文件导出为XML格式(文件 > 导出为 > XML)
- 用文本编辑器(如VS Code)打开XML,定位到模板容器的代码块,其中包含占位符定义和文本引用
- 利用编辑器的多行编辑或正则替换功能,批量生成N份容器代码,并自动给占位符添加唯一后缀:
- 例如用正则把
id="unique_id"替换为id="unique_id_$num",把%unique_id%替换为%unique_id_$num%,其中$num依次取1到目标数量
- 例如用正则把
- 修改完成后将XML文件导入Draw.io,即可得到所有带独立占位符的容器
方法3:控制台脚本批量生成(适合技术用户)
- 选中画布上的模板容器,按F12打开开发者工具并切换到控制台
- 运行以下JavaScript脚本(可根据需求调整生成数量和偏移距离):
var template = selectedCell; var count = 100; // 要生成的容器数量 for(var i=1; i<=count; i++){ var clone = template.clone(); // 重命名占位符ID var cells = clone.getElementsByTagName('mxCell'); for(var j=0; j<cells.length; j++){ var id = cells[j].getAttribute('id'); if(['unique_id', 'name', 'gender', 'age'].some(key => id.includes(key))){ cells[j].setAttribute('id', `${id}_${i}`); } } // 更新文本中的占位符引用 var text = clone.getAttribute('value'); if(text){ text = text.replace(/%unique_id%/g, `%unique_id_${i}%`) .replace(/%name%/g, `%name_${i}%`) .replace(/%gender%/g, `%gender_${i}%`) .replace(/%age%/g, `%age_${i}%`); clone.setAttribute('value', text); } // 添加到画布并偏移位置避免重叠 graph.addCell(clone); clone.geometry.x += i*25; clone.geometry.y += i*25; }
- 执行后画布会自动生成指定数量的独立容器,每个容器的占位符均为唯一可编辑状态
内容的提问来源于stack exchange,提问作者faulehenne
相关产品推荐
相关产品推荐

