C# Office 자동 채점 방법 요약 - Word 편

C#Office 작업 방법 요약-Word 편(지속적인 업데이트)

  • 1. 실례화word 대상
  • 2. 워드 대상 방출
  • 3. Range 객체 소개
  • 3.1 소개
  • 3.2 Range 섹션 가져오기
  • 3.3 특정 섹션의 Range 확보
  • 4. 채점 방법 대전
  • 4.1 표지판단
  • 4.2 글씨체 판단
  • 4.3 단락 형식 판단(첫 줄 축소와 줄 간격 등)
  • 4.4 베젤 판단
  • 4.5 바탕 무늬 판단
  • 4.6 하이퍼링크 판단
  • 4.7 주석 판단
  • 4.8 수인판단
  • 5. 미완성 대기
  • 1. 워드 대상을 실례화

  • 먼저 라이브러리 종속 추가
  • using MSWord = Microsoft.Office.Interop.Word;//word 
    using System.Reflection;// Missing.Value 
    
  • Application 객체 인스턴스화
  • MSWord.Application wordApp = new MSWord.Application();
    // ApplicationClass(), , Microsoft.Office.Interop.Word False
    
  • 인스턴스화된 Documents 객체
  • MSWord.Document wordDoc = wordApp.Documents.Open(fileName, Missing.Value, true);
    // wordApp.Documents.Add(...) , 
    // , VS 
    // fileName word , true, readOnly=ture, , 
    

    2. 워드 객체 풀기

  • Documents 객체 닫기
  • wordDoc.Close(false); // false 。
    
  • Application 객체 종료
  • wordApp.Quit(false); // false 
    

    3. 레인지 대상 소개


    3.1 소개

  • Range 대상은 선택한 내용 부분에 해당한다. 우리는 오피스에서 글자 번호, 글씨체, 단락, 테두리 등 속성의 수정은 우선 이 부분의 내용을 선택해야 한다는 것을 알고 있기 때문에 Range 대상의 획득은 C#조종 오피스에서 매우 중요하다. 우리는 Range와 관련된 속성을 바꾸어 텍스트 형식에 대한 변경을 실현할 수 있다.또한 Range의 관련 속성을 가져와 텍스트 형식을 읽을 수도 있습니다.
  • Range 객체를 선언하는 방법은 다음과 같습니다.
  • MSWord.Range range = null;
    

    3.2 Range 섹션 가져오기


    MSWord를 통해Ducument 객체의 Paragraphs 속성을 가져오면 Paragraph의 배열이 반환되고 Paragraphs 객체의 Count 속성은 배열의 길이가 반환됩니다.
    MSWord.Paragraphs paras = wordDoc.Paragraphs;
    MSWord.Paragraph []para = new MSWord.Paragraph[100];
    for (i = 1; i <= paras.Count; i++) para[i-1] = para[i];
    

    주의: 여기서word 라이브러리에 봉인된 대상과 속성은 수조 아래 표시는 일반적으로 1에서 시작하는데 0을 취하면 오류가 발생하고para[i]를 통과합니다.Range에서 어떤 부분의 Range를 얻을 수 있으며, 디버깅할 때para[i]를 볼 수 있습니다.Range.Text의 컨텐트는 현재 세그먼트를 판단합니다.그러나 한 단락의 랑만 얻는 것은 턱없이 부족한 경우가 많다. 우리는 몇 글자의 랑을 더 정확하게 선택해야 한다. 똑같은 방법으로 얻을 수 있으니 계속 보십시오.

    3.3 특정 섹션의 Range 가져오기


    우리는 오피스에서 모두 Ctrl + F를 통해 검색 기능을 실현할 수 있다는 것을 알고 있으며, 일단 찾으면 자동으로 이 찾은 부분을 선택하기 때문에 C#를 통해 검색 기능을 호출하여 Range에 대한 정확한 위치를 정할 수 있다.
    MSWord.Range objRange = null;
    MSWord.Find findObj = null;
    objRange = wordDoc.Range();// , , para[i].Range 
    findObj = objRange.Find;// 
    findObj.Text = " ";
    bool finded = findObj.Execute();// , bool , True
    if( finded )// 
    {
    	......
    }
    

    Execute () 방법을 실행하면 objRange는 자동으로 찾은 부분으로 설정됩니다. objRange를 통해 찾을 수 있습니다.Text가 올바르게 찾았는지 확인합니다. (찾은 첫 번째 일치 결과를 되돌려줍니다.)

    4. 채점 방법 대전


    4.1 표지 판단


    여기에 정확한 표지가 삽입되었는지 판단하는 좋은 방법을 찾지 못했지만 표지가 삽입된 것은 표지 내용이 있는 페이지가 삽입된 것이다. 표지의 양식이 다르고 내용도 다르기 때문에 표지 부분의 문자열을 직접 꺼내 정확한 표지가 추가되었는지 판단할 수 있다.예:
    string wordText = wordDoc.Content.Text;
    string cover = wordText.Substring(0, wordText.IndexOf(" "));
    if (cover.Equals(" ")) grade += 1.0f;// , 
    

    4.2 글씨체 판단


    MSWord를 통해Range 객체의 Font 객체는 글꼴에 대한 속성을 가져옵니다.
    MSWord를 통해Range.Font.×××얻다
    속성 이름
    반환 유형
    속뜻
    Name
    string
    '송체', '해서체' 등 글꼴 이름 가져오기
    Size
    float
    글꼴 크기 가져오기
    Bold
    int
    글꼴의 굵기를 가져올지 여부입니다. 굵기를 가져오면 값이 -1입니다.
    Italic
    int
    글꼴의 기울기 여부를 가져옵니다. 기울어지면 값이 -1입니다.
    Color
    MSWord.WdColor
    글꼴 색상 가져오기
    Underline
    MSWord.WdUnderline
    글꼴 밑줄 유형 가져오기
    예:
    if (range.Font.Color == MSWord.WdColor.wdColorRed &&
        range.Font.Bold == -1 && objRange.Font.Italic == -1 && 
        range.Font.Underline == MSWord.WdUnderline.wdUnderlineSingle && 
        range.Font.Name == " ") grade += 1.0f;
    

    4.3 단락 형식 판단(첫 줄 들여쓰기와 줄 간격 등)


    MSWord를 통해단락 형식에 대한 속성은 Range 객체의 ParagraphFormat 객체에서 가져옵니다.
    MSWord를 통해Range.ParagraphFormat.×××얻다
    속성 이름
    반환 유형
    속뜻
    CharacterUnitFirstLineIndent
    float
    첫 줄 들여쓰기 문자 수 가져오기
    LineSpacing
    float
    행 간격 가져오기
    Alignment
    MSWord.WdParagraphAlignment
    단락 정렬 가져오기
    예:
    if (range.ParagraphFormat.CharacterUnitFirstLineIndent == 2) grade += 0.5f;
    if (range.ParagraphFormat.LineSpacing == 37.2f) grade += 0.5f;
    if (range.ParagraphFormat.Alignment == MSWord.WdParagraphAlignment.wdAlignParagraphCenter) 
    	grade += 0.5f;
    

    4.4 경계 판단


    MSWord를 통해Range 객체의 Borders 객체는 경계 상자의 관련 속성을 가져옵니다.
    MSWord를 통해Range.Borders.×××얻다
    속성 이름
    반환 유형
    속뜻
    InsideColor
    MSWord.WdColor
    안쪽 테두리 색상 가져오기
    OutsideColor
    MSWord.WdColor
    외곽선 색상 가져오기
    InsideLineStyle
    MSWord.WdLineStyle
    안쪽 테두리의 선 종류 가져오기
    OutsideLineStyle
    MSWord.WdLineStyle
    외곽선의 선 유형 가져오기
    InsideLineWidth
    MSWord.WdLineWidth
    안쪽 테두리의 선가중치 가져오기
    OutsideLineWidth
    MSWord.WdLineWidth
    외부 테두리의 선가중치 가져오기
    예:
    if (range.Borders.OutsideLineStyle == MSWord.WdLineStyle.wdLineStyleDouble && 
         range.Borders.OutsideLineWidth == MSWord.WdLineWidth.wdLineWidth150pt ) 
         grade += 0.5f;
    if (range.Borders.OutsideColor == MSWord.WdColor.wdColorRed) grade += 0.5f;
    

    4.5 바탕 무늬 판단


    MSWord를 통해Range 객체의 Shading 객체는 경계 상자의 관련 속성을 가져옵니다.
    MSWord를 통해Range.Shading.×××얻다
    속성 이름
    반환 유형
    속뜻
    Texture
    MSWord.WdTextureIndex
    음영의 색상 깊이 가져오기
    ForegroundPatternColor
    MSWord.WdColor
    음영의 전경 색상 가져오기
    BackgroundPatternColor
    MSWord.WdColor
    음영의 후경 색상 가져오기
    예:
    if (range.Shading.Texture == MSWord.WdTextureIndex.wdTexture10Percent &&
       range.Shading.ForegroundPatternColor == MSWord.WdColor.wdColorGreen && 
       range.Shading.BackgroundPatternColor == MSWord.WdColor.wdColorGreen) 
       grade += 1.0f;
    

    4.6 하이퍼링크 판단


    MSWord를 통해Range 객체의 Hyperlinks[i] 객체는 하이퍼링크와 관련된 속성을 가져옵니다. i는 i조 하이퍼링크를 나타냅니다. 하이퍼링크가 하나만 있으면 i=1입니다.또한 Hyperlinks 객체의 Count 속성을 통해 Range에서 하이퍼링크의 총 개수를 가져올 수 있습니다.
    MSWord를 통해Range.Hyperlinks[i].×××얻다
    속성 이름
    반환 유형
    속뜻
    Address
    string
    하이퍼링크 가져오기 주소 문자열
    TextToDisplay
    string
    링크된 텍스트 가져오기
    예:
    if (range.Hyperlinks.Count > 0)
    {
    	if (range.Hyperlinks[1].Address.Contains("www.×××.×××.cn") 
    	&& range.Hyperlinks[1].TextToDisplay.Equals("××××")) grade += 1.0f;
    }
    

    4.7 주석 판단


    MSWord를 통해Range 대상의 Comments[i] 대상은 경계선의 관련 속성을 얻습니다. i는 제i조 주석을 나타냅니다. 주석이 하나만 있으면 i=1은 Comments 대상의 Count 속성을 통해 Range에서 주석의 총 조항을 얻을 수 있습니다.
    MSWord를 통해Range.Comments[i].×××얻다
    속성 이름
    반환 유형
    속뜻
    Scope.Text
    string
    주석이 달린 텍스트 내용 가져오기
    Range.Text
    string
    주석 내용 가져오기
    예:
    if (range.Comments.Count > 1)
    {
        MSWord.Comment comment = range.Comments[1];
        if (comment.Scope.Text == " " && comment.Range.Text == " ") 
        grade += 1.0f;
    }
    

    4.8 워터마크 판단


    MSWord를 통해Document.Sections[1].Headers[MSWord.WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes[1] 워터마크 관련 속성 가져오기
    MSWord를 통해Document.Sections[1].Headers[MSWord.WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes[1]].×××얻다
    속성 이름
    반환 유형
    속뜻
    TextEffect.Text
    string
    워터마크 내용
    TextEffect.FontName
    string
    워터마크 글꼴 이름
    TextEffect.FontSize
    float
    워터마크 글꼴 크기
    Fill.Transparency
    float
    워터마크 투명도, 0.5는 반투명
    Fill.ForeColor.Name
    string
    워터마크 글꼴의 전경 색상
    Fill.BackColor.Name
    string
    워터마크 글꼴의 배경색
    Fill.ForeColor.RGB
    int
    워터마크 글꼴의 전경 색상 rgb값, rgb = B×2552+G×2551+R×2550
    Fill.BackColor.RGB
    int
    워터마크 글꼴의 배경색 rgb 값, rgb = B×2552+G×2551+R×2550
    Rotation
    float
    회전 각도, 비스듬히 설정하면 315.0f
    예:
    if(wordDoc.Sections[1].Headers[MSWord.WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes.Count > 0)
    {            
        grade += 0.5f;
        MSWord.Shape shape = wordDoc.Sections[1].Headers[MSWord.WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes[1];
        if (shape.TextEffect.Text.Equals(" ")) grade += 0.5f;
        if (shape.TextEffect.FontName == " ") grade += 0.5f;
        if (shape.TextEffect.FontSize == 44.0f) grade += 0.5f;
        if (shape.Fill.Transparency == 0.5 && shape.Fill.ForeColor.RGB == 255) grade += 0.5f;
        if (shape.Rotation == 315) grade += 0.5f;
    }
    

    5. 미완성

    좋은 웹페이지 즐겨찾기