MS 추가기능 및 앱 개발

[파워포인트 추가기능 배포] 표 행렬 전환하기

루아흐뉴마 2019. 8. 4. 01:18
반응형



추가기능 사용방법


  • 표의 행렬을 전환하는 기능이다.
  • 기존의 표를 전환하는 게 아니라 행렬 전환된 새로운 표를 생성한다.
  • 표의 스타일은 복사하지 못하기 때문에 값만 전환한다.
  • ※병합된 셀이 있는 경우에도 가능하다.

  • 설치 방법
  • 1) 첨부파일의 압축 파일을 압축 해제한다. (아무 곳이듯 상관 없음)
  • 2) setup.exe 파일을 (반드시)관리자 권한으로 실행한다. (마우스 오른쪽 클릭 -> 관리자 권한으로 실행)
  • 3) 다음, 설치를 클릭하면 설치가 완료된다.

  • 사용 방법
  • 1) 표 선택
  • 2) 루아흐뉴마 탭 클릭
  • 3) TableTranspose 클릭

  • 삭제하는 방법
  • 1) 시작 -> 제어판 -> 프로그램 및 기능
  • 2) 설치 날짜를 기준으로 내림차순 정렬
  • 3) 설치된 프로그램을 선택하여 제거


추가기능 실행 동영상




메인 코드(언어: C#)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Tools.Ribbon;
using pptApp = Microsoft.Office.Interop.PowerPoint;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace ppt_tbl_transpose {
  public partial class tbl_ctrol {
  private void tbl_ctrol_Load(object sender, RibbonUIEventArgs e) {}
private void button1_Click(object sender, RibbonControlEventArgs e) {
  try {
    pptApp.Presentation pptDoc = Globals.ThisAddIn.GetActivePresentation();
    pptApp.Slide curSld = Globals.ThisAddIn.Application.ActiveWindow.View.Slide; //현재 슬라이드
    pptApp.Shape curShp = Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange[1]; //Selection을 개체로 반환
    //정방형 표 만들기
      if (curShp.HasTable == Microsoft.Office.Core.MsoTriState.msoTrue) {
        pptApp.Table shpTbl = curShp.Table;
        int rows = shpTbl.Rows.Count;
        int cols = shpTbl.Columns.Count;
        int _max = max(rows, cols);
        pptApp.Table shpTbl_Mirror = curSld.Shapes.AddTable(_max, _max).Table; //같은 크기의 정방형 표 생성
          for (int i = 1; i < rows + 1; i++) {
            for (int j = 1; j < cols + 1; j++) {
              shpTbl_Mirror.Cell(i, j).Shape.TextFrame.TextRange.Text = shpTbl.Cell(i, j).Shape.TextFrame.TextRange.Text;
            }
          }

// 여기서부터 행렬 전환 시작
// 대각선(i = j)을 기준으로 표내용 Swap
          for (int i = 2; i < _max + 1; i++) {
            for (int j = 1; j < i; j++) {
              var temp = shpTbl_Mirror.Cell(i, j).Shape.TextFrame.TextRange.Text;
              shpTbl_Mirror.Cell(i, j).Shape.TextFrame.TextRange.Text = shpTbl_Mirror.Cell(j, i).Shape.TextFrame.TextRange.Text;
              shpTbl_Mirror.Cell(j, i).Shape.TextFrame.TextRange.Text = temp;
            }
          }

          if (rows > cols) { //행이 열보다 크면 새로생긴 표의 행을 삭제
            int rows2 = shpTbl_Mirror.Rows.Count;
              for (int i = cols + 1; i < rows2 + 1; i++) { shpTbl_Mirror.Rows[cols + 1].Delete(); }
          } else { //반대의 경우 새로생긴 표의 열을 삭제
            int cols2 = shpTbl_Mirror.Columns.Count;
            for (int i = rows + 1; i < cols2 + 1; i++) { shpTbl_Mirror.Columns[rows + 1].Delete(); }
          }
      }
    }

  catch (COMException ex) { // 아무것도 선택하지 않은 경우
    MessageBox.Show(text: "표를 선택해주세요.");
  }
  
  catch (Exception ex) {
    MessageBox.Show(ex.ToString());
  }
}

public int max(int a, int b) { //큰수 반환 함수
  if (a > b)  { 
    return a; 
  } else {
    return b;
  }
}
}
}


PPT_Table_Transpose.zip



 Copyright (2019) Ruahneuma. All Rights Reserved.


반응형