PROGRAMMING WORKSHOP

VB.Net |
System.Data.DataSet... To Word

저장하는 것을 했으니 다 한 셈이다
삭제를 하고 저장을 하던, 추가를 하고 저장을 하던..
그냥 XML화일을 새로 바꿔주면 된다
데이타베이스와 달리 가벼운 텍스트화일이니까 그냥 덮어씌워버리면 된다
이제 버튼을 하나 추가하고 크릭하면
현재 편집된 상태의 내용을 워드문서로 보내보도록 하자
워드에 보내 보고..
파워포인트에 보내 보고..
얼마전 앞페이지에서 엑셀을 실행시키는 것은 해보았을것이니
이번에는 워드문서에 보내 보도록 하자



엑셀의 VBA에서든 VB.Net에서든 외부라이브러리 참조하는 것에
재미가 들려야 확장된 기능을 많이 사용할 수 있는 것이다
워드에 보내는 이유는 쓸데없이 외부라이브러리 참조연습을 하는 것이
아니라..워드의 이미 만들어져있는 기능을 놓아두고
다른 것을 만들어서 사용할 일이 하나도 없기 때문인 것이다
그러려면 워드에서 어떤 기능들이 있는지 평소에
사용하였었다면 훨씬 도움이 될 것이고, 엑셀도 많이 사용해본
경험이 있으면 더더욱 쉽게 확장이 되는 것이다

참조(Reference)탭에서 추가(Add)버튼을 눌러서
참조대화상자에서 [.Net]탭을 선택하고 ([Com]탭이 아니고..)
Microsoft.Office.Interop.Word 라이브러리를 참조시킨다
그리고 윈도우폼의 모듈시트의 선언부에

Imports WD = Microsoft.Office.Interop.Word

라고 선언하면 WD가 word라이브러리에 접근하는 키워드가 되니까..
편리하다

마치 VBA에서 워드개체다루듯이 다루어 지는 것이니..
VBA에 내공이 쌓인 분은 그냥 거저 먹는 부분들이다
VBA를 모르는 분들이라면 ..윈도우폼에서 보고서 하나 만들라치면
엄청 고생을 하여야 할 것이다
이것 저것 표현도구들이 있지만 Office의 프로그램들을
따라 올수가 없다
이것이 바로 VBA쪽에서 .Net FrameWork쪽으로 접근하는
아주 편리한 점인 것이다
VBA에 내공이 쌓인 분들이 Window Form과 .Net FrameWork의
기능을 추가한다면 사무자동화는 ....!!!!

워드는 최상위 개체가 Application이고
이것은 어느 프로그램이나 거의 똑같다..최상위는 Appliation!!
그다음은 만들어지는 문서개체인데
워드에서는 Document라는 개체인 것이고
문장을 작성하는 한단락의 문장을 다루는 개체는 Paragraph개체이고
테이블을 구성한다면 Table개체가 필요하게 되고
Paragraph개체의 또 하위 개체중의 하나인 Range개체가
또 약방의 감초같은 역할을 죄다 해낸다

Window폼에서 워드로 전달하고 싶은 정보에 접근하는 방법은
다양하게 있을 것이다
DataGrieView1 콘트롤을 그냥 순환하면서 콘트롤상의 데이타를
전달 할 수도 있고.. 이것은 하수!!
DataGridView1연결한 BindingSource콘트롤의 DataSource로
DataTable로 연결하여 메모리상의 정보를 퍼 나를수도 있고
아래와 같이 접근하기도 하고

Dim oDataTable As DataTable = Me.BindingNavigator1.BindingSource.DataSource

또 아래와 같이 접근하기도 하고

Dim oDataTable As DataTable = CType(Me.DataGridView1.DataSource, _
BindingSource).DataSource

문제는 어떻게 DataTable에 접근하느냐는 것이 목적!!
수단과 방법은 다양한 경로로 접근 할 수 있을 것이다
개체지향프로그래밍의 문제는 항상 개체를 어떻게 접근하느냐에
관심을 갖으면 90% 개념이 서있는 상태가 된다

DataTable에 접근하면 DataTable은 DataRow개체가 줄줄이
집합되어 있는 것이니..
아래와 같이 순환하면서 해당 행(레코드)의 각셀의 값을
워드의 개체에 전달하면 되는 셈이다

For Each oRow As DataRow In oDataTable.Rows
...워드 개체의 속성=oRow.Item(0)
...워드 개체의 속성=oRow.Item(1)
...
...
Next

삐딱하게도 DataRow의 각셀이 Cells 이 아니고
Item이라는 것으로 접근한다
가끔 그렇게 샛길로 빠지는 녀석들도 있다..

이제 정보를 받아서 소화시킬 워드개체만 친하다면 하나도
걱정없이 훨훨날게 되는 것이다

아래의 빨강색이 모두 워드개체이고..검정색이 .Net FrameWork의
개체들이다
공동작업을 하는 것을 한눈에 볼수있다

Dim iRow As Integer = oDataTable.Columns.Count
Dim iCol As Integer = 2


For Each oRow As DataRow In oDataTable.Rows
    Dim oPara As WD.Paragraph = oDoc.Paragraphs.Add
    Dim oTbl As WD.Table = oDoc.Tables.Add(oPara.Range, iRow, iCol)
    oTbl.Columns(1).Width = 150
    oTbl.Columns(2).Width = 350
    oTbl.Columns(1).Shading.BackgroundPatternColor = Microsoft.Office.Interop.Word.WdColor.wdColorDarkBlue
    writeEachCell(oTbl.Rows(2), "Author", oRow.Item(0))
    writeEachCell(oTbl.Rows(3), "Title", oRow.Item(1))
    writeEachCell(oTbl.Rows(4), "Genre", oRow.Item(2))
    writeEachCell(oTbl.Rows(5), "Price", oRow.Item(3))
    writeEachCell(oTbl.Rows(6), "Publish", oRow.Item(4))
    writeEachCell(oTbl.Rows(7), "Description", oRow.Item(5))
    writeEachCell(oTbl.Rows(1), "ID", oRow.Item(6))

    oDoc.Paragraphs.Add()
    oDoc.Paragraphs.Add()

Next

다른것이 좋은 것이 많이 나오는데..
VBA갖고 되겠어????별 귀신씨나락까먹는 소리를 하고 있는 셈이다
엑셀을 포함한 오피스프로그램은 MS의 핵심품목이다..
계속 다른 것들과 공동연계작업에 있어서의 핵심인 것이다
그러니..
VBA를 우습게 보는 분들은 ..생각 잘 하시고..엑셀을 기본으로 하는
VBA에 열공하여 그리고...개체의 개념을 뼈속까지 심고
이곳에 오셔서 확장하여 나가시기를 권한다
VBA는 모든 프로그래밍언어의 기초다!!라고 생각하시면 좋을 것이다

위의 내용을 그대로 엑셀VBA로 옮기고
데이타 부분을 엑셀의 범위로 바꿔서 .Net FrameWork개체부분을
엑셀개체로 바꾸면 또, 엑셀 소루션되는 셈이다
이렇게 생각나는대로..땡기는대로 만들면 되는 셈이다

***[LOG-IN]***