MS사의 Excel이나 Word는 사용들을 많이해서 검색을하면 C#으로 Control하는 많은 방법들이 검색되는데,
Visio의 경우에는 검색해도 잘 나오질 않음.
그래도 다른 MS 제품과 비슷한 방법을 이용될것이라고 생각되며, 실제 사용한걸 정리해봄.
Microsoft.Office.Interop.Visio를 참조추가해두고 수행.
Using Visio = Microsoft.Office.Interop.Visio;
...
Visio.Application app = (Application을 받아온다.)
//Visio랑 연계되는 프로그램에서 메소드를 통해 Application을 받아왔지만, 새로 생성은 검색하면 있을듯.)
Visio.Document diagramDoc = app.ActiveDocument; // 활성화 된 Diagram 도면 객체를 받아옴.
Visio.Page visioPage = app.ActivePage; //현재 활성화된 Page를 읽어옴. Excel에서 WorkBook, Sheet객체를 받아오는것과 같은 작업.
(or Visio.Page visioPage = diagramDoc.Pages[페이지 번호] //Diagram의 특정 도면을 열 수 있음. 페이지 번호는 1페이지부터 시작됨)
- Page에 도형 넣기.
Visio.Shape anyShape = visioPage.DrawRectangle(double x1, double y1, double y1, double y2)
// X1, Y1와 X2, Y2가 이루는 네모난 Shape을 화면에 그려준다.
// 메소드 명을 보면 알겠지만 DrawCircle, DrawLine 등등 여러가지 메소드가 준비되어있음.) - Shape에 Text 넣기.
anyShape.Text = "내용"; //Shape의 Text 속성값을 이용해서 내용을 넣을 수 있음. - Shape 속성 Control
VisioOption > 고급 탭에서 개발자 모드로 실행을 설정하고, 재실행하면 심볼 우클릭 시 Show ShapeSheet라는
버튼이 나타난다. 해당 속성값으로 Visio Shape을 Control 할 수 있다.
(http://movingpackets.net/2011/05/08/visio-shapesheets-my-misunderstood-friend-part-3/) - Shape의 속성값 Control방법(https://msdn.microsoft.com/en-us/library/office/ff767394.aspx)
- Shape.get_CellsSRC(Short Section, Short Row, Short Column) 메소드를 통해 속성값을 var형식으로 받아서 값을 입력.
ex) Shape의 Font Size 변경 (SRC는 Section, Row, Cell을 의미하는 듯)
var fontSize = anyShape.get_CellSRC((short)Visio.VisSectionIndices.visSectionCharacter
, (short)Visio.VisRowIndices.visRowCharacter
, (short)Visio.VisCellIndices.visCharacterSize);
fontSize.Formula = "15pt"; //형식에 맞추어 넣겠다는 뜻인듯. pt없이 숫자만 넣으면 단위가 pt가 아닌 다른 단위를 이용하는듯.
VisSectionIndices 참조 : https://msdn.microsoft.com/en-us/library/office/ff765983.aspx
VisRowIndices 참조 : https://msdn.microsoft.com/en-us/library/office/ff765539.aspx
VisCellIndices 참조 : https://msdn.microsoft.com/en-us/library/office/ff767991.aspx
** 빨간색 속성이 아닌 경우에는 get_CellSRC를 이용해 Section, Row, Cell Indices를 지정해서 값을 입력해야 함 - Shape의 위치 이동 (http://stackoverflow.com/questions/9885382/in-c-sharp-change-visio-shape-position)
Size&Position Window에서 X,Y값을 바꿔서 이동시키는 방법을 프로그램으로 수행(Shape의 Center점이 기준)
shape.CellsU["PinX"].Formula = "2";
shape.CellsU["PinY"].Formula = "2";
CellsU 메소드는 ShapeSheet Cell의 값을 return해주는 함수라고 하는데, Read Only라고 설명이 되어있지만,
위와 같은 방법으로 데이터를 입력하면 적용이 된다.
** SHAPE SHEET에서 빨간색 글씨로 되어있는 속성값들은 CellsU["속성이름"].Formula를 통해 값을 입력하면 적용됨.
ex) shape.CellsU["FillPattern"].Formula = "0"; - Stencil 불러오기 & Stencil의 Item 이름 불러오기
작업하고 있는 프로그램 특성상 프로그램 내부에서 Stencil Revision관리를 하고 있음. 따라서 프로그램 API를 통해
최신 Stencil파일의 Path가져와서 Stencil을 불러옴
Visio.Document stencil = app.Documents.OpenEx(filePath, (short)Visio.VisOpenSaveArgs.visOpenDocked);
(https://msdn.microsoft.com/en-us/library/office/ff767229.aspx)
Array itemNameList; // Item 이름을 받을 Array 형태의 객체
stencil.Masters.GetNames(out itemNameList); // 해당 Stencil에 포함되어있는 Item의 이름을 가져옴
(https://msdn.microsoft.com/en-us/library/office/ff768131.aspx)
'Programing > C#' 카테고리의 다른 글
[Dock 속성] Dock 속성 우선순위 (1) | 2018.05.31 |
---|---|
[DevExpress] 도구상자 추가하기 (0) | 2017.08.21 |
DataSource로 바인딩한 DataGridView에 Row 생성 (0) | 2017.02.21 |
C#에서 Excel형식 File 다루기 (0) | 2017.02.07 |
[MERGE INTO]데이터가 없으면 INSERT, 있으면 UPDATE (0) | 2017.02.06 |