Visio Shape 內建三個字串屬性 Data1、Data2、Data3,各可容納 64KB 資料,無需在 ShapeSheet 額外定義自訂屬性。本文分享實戰場景:繪製統計圖框、比例尺說明等動態產生的輔助圖形,利用這三個屬性標記用途與攜帶業務資料。
電力圖紙常需在邊緣繪製「設備統計表」或「比例尺」,這些圖形非模具元件,而是根據圖紙內容動態生成。每次重新整理時,需先清除舊圖形再重繪,Data1~3 成為識別與攜帶資料的最佳載體。
if (VisioUtility.HasShapeInWindow(visApp.ActiveWindow)) {
visApp.ActiveWindow.SelectAll();
foreach (Visio.Shape shape in visApp.ActiveWindow.Selection) {
if (shape.Data1 == "tongji") { // 以 Data1 標記用途
shape.Delete();
}
}
visApp.ActiveWindow.DeselectAll();
}
// 繪製左側名稱欄
Visio.Shape shape = VisioUtility.DrawRectangeOnPage(visApp, leftTopX, leftTopY - j * cellHeight,
leftTopX + leftCellWidth, leftTopY - (j + 1) * cellHeight);
shape.NameU = "設備名稱";
shape.Text = "設備名稱";
shape.Data1 = "tongji"; // 標記為統計圖形
shape.Data2 = "模具組名稱"; // 攜帶關聯資訊
// 繪製右側數值欄
shape = VisioUtility.DrawRectangeOnPage(visApp, leftTopX + leftCellWidth, leftTopY - j * cellHeight,
leftTopX + leftCellWidth + rightCellWidth, leftTopY - (j + 1) * cellHeight);
shape.NameU = "設備名稱v";
shape.Data1 = "tongji";
shape.Data2 = "模具組名稱";
foreach (Visio.Shape shape in page.Shapes) {
if (shape.Data1.Equals("tongji", StringComparison.OrdinalIgnoreCase)
&& shape.NameU.Equals($"{deviceType}v")) {
// 更新 shape.Text 為最新統計值
}
}
靈活運用 Data1~3,能大幅簡化動態圖形生成邏輯,是 Visio 開發者的隱藏利器。