Exemplo n.º 1
0
        // hwp COM
        private void axHwpCtrl1_Enter(object sender, EventArgs e)
        {
            // 폴더를 가져오면 기존 hwp 지우기.
            axHwpCtrl1.Clear(1);

            int       rowsCnt = (ele_collection.Count + 1); // row = 항목+헤더
            const int colsCnt = 8;                          // column

            HWPCONTROLLib.DHwpAction       act  = (HWPCONTROLLib.DHwpAction)axHwpCtrl1.CreateAction("TableCreate");
            HWPCONTROLLib.DHwpParameterSet pset = (HWPCONTROLLib.DHwpParameterSet)act.CreateSet();
            act.GetDefault(pset);

            pset.SetItem("Rows", rowsCnt);
            pset.SetItem("Cols", colsCnt);

            HWPCONTROLLib.DHwpParameterArray rowsHeight = (HWPCONTROLLib.DHwpParameterArray)pset.CreateItemArray("RowHeight", rowsCnt);
            HWPCONTROLLib.DHwpParameterArray colsWidth  = (HWPCONTROLLib.DHwpParameterArray)pset.CreateItemArray("ColWidth", colsCnt);

            for (int row_i = 0; row_i < rowsCnt; ++row_i)
            {
                rowsHeight.SetItem(row_i, 2300);
            }
            for (int col_i = 0; col_i < colsCnt; ++col_i)
            {
                colsWidth.SetItem(col_i, 4200);
            }

            act.Execute(pset);

            // 한글 표 string 입력 script 함수
            void write_string(string s)
            {
                axHwpCtrl1.Run("ParagraphShapeAlignLeft"); //왼쪽 정렬
                var vStr00 = s;

                HWPCONTROLLib.DHwpAction       vAct00 = (HWPCONTROLLib.DHwpAction)axHwpCtrl1.CreateAction("InsertText");
                HWPCONTROLLib.DHwpParameterSet vSet00 = (HWPCONTROLLib.DHwpParameterSet)vAct00.CreateSet();
                vAct00.GetDefault(vSet00);
                vSet00.SetItem("Text", vStr00);
                vAct00.Execute(vSet00);
            }

            // 헤더 작성
            string[] headers = { "순번", "파일명", "버전", "크기 (Byte)", "첵섬", "생성일자", "라인수" /*, "기능 설명" */ };
            foreach (string i2 in headers)
            {
                write_string(i2);
                axHwpCtrl1.Run("MoveRight");
            }

            write_string("기능 설명");

            // 아래 줄 첫째 칸으로
            axHwpCtrl1.Run("MoveDown");
            for (int i2 = 0; i2 < 7; i2++)
            {
                axHwpCtrl1.Run("MoveLeft");
            }

            int i = 1;

            foreach (Element ele in ele_collection)
            {
                // 폴더일 경우
                if (ele.flagcheck())
                {
                    i = 1; //순번 작성

                    // mutex
                    mutex.WaitOne();

                    Console.WriteLine(ele.filename);
                    write_string("저장위치: " + ele.filename);

                    axHwpCtrl1.Run("TableCellBlockExtendAbs");
                    for (int j = 0; j < 7; j++)
                    {
                        axHwpCtrl1.Run("TableRightCell");
                    }
                    ;
                    axHwpCtrl1.Run("TableMergeCell");
                    axHwpCtrl1.Run("Cancel");

                    // 저장위치가 한 줄을 넘어가면 MoveDown은 같은 셀 다음 줄로 이동하므로 TableLowerCell을 해야 한다.
                    axHwpCtrl1.Run("TableLowerCell");
                    mutex.ReleaseMutex();
                }
                // 항목 작성
                else
                {
                    write_string("" + (i++));
                    axHwpCtrl1.Run("MoveRight");

                    write_string(ele.filename);
                    axHwpCtrl1.Run("MoveRight");

                    write_string(ele.version);
                    axHwpCtrl1.Run("MoveRight");

                    write_string(ele.size);
                    axHwpCtrl1.Run("MoveRight");

                    write_string(ele.checksum);
                    axHwpCtrl1.Run("MoveRight");

                    write_string(ele.birthday);
                    axHwpCtrl1.Run("MoveRight");

                    write_string(ele.lines);

                    // 아랫줄 첫째칸으로 이동
                    axHwpCtrl1.Run("MoveDown");
                    for (int k = 0; k < 6; k++)
                    {
                        axHwpCtrl1.Run("MoveLeft");
                    }
                }
            }

            axHwpCtrl1.MovePos(0, 0, 0); // 커서 이동 함수. 없으면 표 생성 오류.

            // 다음 파일에 쓰기 위해서 clear()
            ele_collection.Clear();
            //axHwpCtrl1.Enter -= new System.EventHandler(this.axHwpCtrl1_Enter);
        }
Exemplo n.º 2
0
        // hwp COM
        private void axHwpCtrl1_Enter(object sender, EventArgs e)
        {
            // 파일을 불러오면 기존 hwp 지우기.
            axHwpCtrl1.Clear(1);

            Console.WriteLine(" h w p t e s t  . . .");

            // uml 파일의 클래스 갯수만큼 표 생성 script
            for (int i = 0; i < title_collection.Count; i++)
            {
                // 클래스명 표기
                var vStr0 = title_collection[i];
                HWPCONTROLLib.DHwpAction       vAct0 = (HWPCONTROLLib.DHwpAction)axHwpCtrl1.CreateAction("InsertText");
                HWPCONTROLLib.DHwpParameterSet vSet0 = (HWPCONTROLLib.DHwpParameterSet)vAct0.CreateSet();
                vAct0.GetDefault(vSet0);
                vSet0.SetItem("Text", vStr0);
                vAct0.Execute(vSet0);

                // 표 1개 생성
                int       rowsCnt = ((list_collection[i].Count) / 2 + 1); // row = (형식+이름)/2 + 헤더
                const int colsCnt = 4;                                    // column

                HWPCONTROLLib.DHwpAction       act  = (HWPCONTROLLib.DHwpAction)axHwpCtrl1.CreateAction("TableCreate");
                HWPCONTROLLib.DHwpParameterSet pset = (HWPCONTROLLib.DHwpParameterSet)act.CreateSet();
                act.GetDefault(pset);

                pset.SetItem("Rows", rowsCnt);
                pset.SetItem("Cols", colsCnt);

                HWPCONTROLLib.DHwpParameterArray rowsHeight = (HWPCONTROLLib.DHwpParameterArray)pset.CreateItemArray("RowHeight", rowsCnt);
                HWPCONTROLLib.DHwpParameterArray colsWidth  = (HWPCONTROLLib.DHwpParameterArray)pset.CreateItemArray("ColWidth", colsCnt);

                for (int row_i = 0; row_i < rowsCnt; ++row_i)
                {
                    rowsHeight.SetItem(row_i, 2300);
                }
                { for (int col_i = 0; col_i < colsCnt; ++col_i)
                  {
                      colsWidth.SetItem(col_i, 7000);
                  }
                }

                act.Execute(pset);

                // 가운데 정렬 함수
                void allign_center()
                {
                    axHwpCtrl1.Run("ParagraphShapeAlignCenter");
                    axHwpCtrl1.Run("TableVAlignCenter");
                    axHwpCtrl1.Run("TableCellAlignCenterCenter");
                }

                allign_center();

                // 표 헤더 내용 작성 script
                var vStr = "구분";
                HWPCONTROLLib.DHwpAction       vAct = (HWPCONTROLLib.DHwpAction)axHwpCtrl1.CreateAction("InsertText");
                HWPCONTROLLib.DHwpParameterSet vSet = (HWPCONTROLLib.DHwpParameterSet)vAct.CreateSet();
                vAct.GetDefault(vSet);
                vSet.SetItem("Text", vStr);
                vAct.Execute(vSet);
                allign_center();

                axHwpCtrl1.Run("MoveRight");

                var vStr2 = "형식(반환 값)";
                HWPCONTROLLib.DHwpAction       vAct2 = (HWPCONTROLLib.DHwpAction)axHwpCtrl1.CreateAction("InsertText");
                HWPCONTROLLib.DHwpParameterSet vSet2 = (HWPCONTROLLib.DHwpParameterSet)vAct2.CreateSet();
                vAct2.GetDefault(vSet2);
                vSet2.SetItem("Text", vStr2);
                vAct2.Execute(vSet2);
                allign_center();

                axHwpCtrl1.Run("MoveRight");

                var vStr3 = "이름";
                HWPCONTROLLib.DHwpAction       vAct3 = (HWPCONTROLLib.DHwpAction)axHwpCtrl1.CreateAction("InsertText");
                HWPCONTROLLib.DHwpParameterSet vSet3 = (HWPCONTROLLib.DHwpParameterSet)vAct3.CreateSet();
                vAct3.GetDefault(vSet3);
                vSet3.SetItem("Text", vStr3);
                vAct3.Execute(vSet3);
                allign_center();

                axHwpCtrl1.Run("MoveRight");

                var vStr4 = "기능";
                HWPCONTROLLib.DHwpAction       vAct4 = (HWPCONTROLLib.DHwpAction)axHwpCtrl1.CreateAction("InsertText");
                HWPCONTROLLib.DHwpParameterSet vSet4 = (HWPCONTROLLib.DHwpParameterSet)vAct4.CreateSet();
                vAct4.GetDefault(vSet4);
                vSet4.SetItem("Text", vStr4);
                vAct4.Execute(vSet4);
                allign_center();

                // 아래 줄 첫째 칸으로
                axHwpCtrl1.Run("MoveDown");
                for (int i2 = 0; i2 < 3; i2++)
                {
                    axHwpCtrl1.Run("MoveLeft");
                }

                // 함수, 변수의 첫번째 항목을 표기하는 flags (셀 병합 때 갯수 세는 기능도 한다)
                int first_flag  = 0;
                int second_flag = 0;
                int third_flag  = 0;

                //표 멤버변수, 멤버함수 내용 작성
                for (int j = 0; j < list_collection[i].Count;)
                {
                    Console.WriteLine(list_collection[i][j] + " 값을 표에 입력");

                    string member_kind;

                    // 변수, 함수 구분
                    if (list_collection[i][j + 1].Contains("()"))
                    {
                        member_kind = "함수"; third_flag = first_flag++; Console.WriteLine("함수 플래그");
                    }
                    else
                    {
                        member_kind = "변수"; third_flag = second_flag++; Console.WriteLine("변수 플래그");
                    }

                    // 구분 column
                    if (first_flag == 1 || second_flag == 1) // 항목이 존재할 경우 진입
                    {
                        if (third_flag == 0)
                        {
                            var vStr5 = member_kind;
                            HWPCONTROLLib.DHwpAction       vAct5 = (HWPCONTROLLib.DHwpAction)axHwpCtrl1.CreateAction("InsertText");
                            HWPCONTROLLib.DHwpParameterSet vSet5 = (HWPCONTROLLib.DHwpParameterSet)vAct5.CreateSet();
                            vAct5.GetDefault(vSet5);
                            vSet5.SetItem("Text", vStr5);
                            vAct5.Execute(vSet5);
                            allign_center();

                            third_flag++; // 변수/함수 count가 1을 유지할 때 다른 변수나 함수가 계속 표기되지 않게 만든다.
                        }
                    }
                    axHwpCtrl1.Run("MoveRight");

                    // 형식(반환 값) column
                    var vStr6 = list_collection[i][j++];
                    HWPCONTROLLib.DHwpAction       vAct6 = (HWPCONTROLLib.DHwpAction)axHwpCtrl1.CreateAction("InsertText");
                    HWPCONTROLLib.DHwpParameterSet vSet6 = (HWPCONTROLLib.DHwpParameterSet)vAct6.CreateSet();
                    vAct6.GetDefault(vSet6);
                    vSet6.SetItem("Text", vStr6);
                    vAct6.Execute(vSet6);
                    allign_center();

                    axHwpCtrl1.Run("MoveRight");

                    // 이름 column
                    var vStr7 = list_collection[i][j++];
                    HWPCONTROLLib.DHwpAction       vAct7 = (HWPCONTROLLib.DHwpAction)axHwpCtrl1.CreateAction("InsertText");
                    HWPCONTROLLib.DHwpParameterSet vSet7 = (HWPCONTROLLib.DHwpParameterSet)vAct7.CreateSet();
                    vAct7.GetDefault(vSet7);
                    vSet7.SetItem("Text", vStr7);
                    vAct7.Execute(vSet7);
                    allign_center();

                    // 기능 column
                    axHwpCtrl1.Run("MoveRight");
                    allign_center();

                    // 아래 줄 첫째 칸으로
                    axHwpCtrl1.Run("MoveDown");
                    if (j < list_collection[i].Count)
                    {
                        for (int i2 = 0; i2 < 3; i2++)
                        {
                            axHwpCtrl1.Run("MoveLeft");
                        }
                    }
                }

                // 멤버변수/멤버함수가 2개 이상이라 merge가 필요한 경우 script
                if (first_flag > 1 || second_flag > 1)
                {
                    // 표 가장 아래row 첫째 column으로 이동
                    axHwpCtrl1.Run("MoveUp");
                    axHwpCtrl1.Run("TableLeftCell");
                    axHwpCtrl1.Run("TableLeftCell");
                    axHwpCtrl1.Run("TableLeftCell");

                    // first_flag = 함수 갯수, second_flag = 변수 갯수
                    // 아래에서부터 같은 영역을 블록 설정해서 위로 올라간다. 그러니 함수부터 merge를 시작한다.
                    // 함수,변수가 2개 이상인 경우, 1개인 경우, 0개인 경우 각각 merge 방식이 다르다.

                    if (first_flag > 1)
                    {
                        axHwpCtrl1.Run("TableCellBlockExtendAbs");
                        for (; first_flag > 1; --first_flag)
                        {
                            axHwpCtrl1.Run("TableUpperCell");
                        }
                        axHwpCtrl1.Run("TableMergeCell");
                        axHwpCtrl1.Run("Cancel");

                        axHwpCtrl1.Run("MoveUp");
                    }
                    else if (first_flag == 1)
                    {
                        axHwpCtrl1.Run("MoveUp");
                    }

                    if (second_flag > 1)
                    {
                        axHwpCtrl1.Run("TableCellBlockExtendAbs");
                        for (; second_flag > 1; --second_flag)
                        {
                            axHwpCtrl1.Run("TableUpperCell");
                        }
                        axHwpCtrl1.Run("TableMergeCell");
                        axHwpCtrl1.Run("Cancel");
                    }
                    else if (second_flag == 1)
                    {
                    }
                }

                axHwpCtrl1.MovePos(0, 0, 0); // 커서 이동 함수. 없으면 표 생성 오류.

                // 보기 편하게 공백 삽입 script
                var vStr00 = "\r";
                HWPCONTROLLib.DHwpAction       vAct00 = (HWPCONTROLLib.DHwpAction)axHwpCtrl1.CreateAction("InsertText");
                HWPCONTROLLib.DHwpParameterSet vSet00 = (HWPCONTROLLib.DHwpParameterSet)vAct00.CreateSet();
                vAct00.GetDefault(vSet00);
                vSet00.SetItem("Text", vStr00);
                vAct00.Execute(vSet00);
            }

            // 다음 파일에 쓰기 위해서 clear()
            list_collection.Clear();
            title_collection.Clear();
            axHwpCtrl1.Enter -= new System.EventHandler(this.axHwpCtrl1_Enter);
        }