PROGRAMMING WORKSHOP

VB.Net | System.IO ...File 다루기

폴더나 드라이브 밑에는 화일이다
화일이 있는지도 알아야 하고
있는 것이 확인되면 열던지 덮어서 쓰던지, 삭제하던지 등등의 작업을 하게 된다
VBA에서도 많이 해본 것들이다
화일이 있는지 확인하는 것은

System.IO.File.Exists("경로와 화일명")의 결과값이 참이면 있는 것이고
아니면 없는 것이고
System.IO.File.Create("경로와 화일명")는 화일을 해당경로에 만들어주고
System.IO.File.Delete("경로와 화일명")은 삭제하는 것이고
System.IO.File.Copy("경로와 화일명","새로운 경로와 화일명")하면 복사하여 만들고
그냥 영어하면 된다..
Exists..존재하는지..Create...만들고..Delete..삭제하고..Copy..복사하여옮기고
그러니 우노가 죽기 살기로 영어이야기를 하는 것
영어를 알면 그냥 말하듯이 찍으면 된다

VSTO excel add-in화일을 또 만들어 보자
VB.Net의 내용을 학습하면서 엑셀도 리뷰하고 VSTO소루션도 계속 만들어 보도록 한다
아래와 같이 리본에 버튼을 3개를 달고
각 버튼의 Label속성과 OfficeImageID속성등을 적절히
설정하고(별로 중요치 않고,각자의 기호대로 정하면 되는 것이니까..)



첫째버튼의 Click 이벤트프로시져는 ..
시트에 이름지어주고 시트상에 정보를 뿌려주기

Private Sub btnSystemIO_Click(ByVal sender As System.Object, ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) Handles btnSystemIO.Click Dim shtX As Excel.Worksheet Try shtX = Globals.ThisAddIn.Application.Worksheets(SHEET_NAME) shtX.Activate() shtX.UsedRange.Clear() Catch ex As Exception shtX = Globals.ThisAddIn.Application.Worksheets.Add() shtX.Name = SHEET_NAME End Try With shtX.Range("B4") For iX As Integer = 1 To 10 For iY As Integer = 1 To 10 .Cells(iX, iY).value = Int(Rnd() * 100) + 1 Next Next End With End Sub

Try문은 참으로 편리한 것이다
현재 시트가 있다고 가정하고 시트(상수값으로 지정한 시트명)를 얻는다
없다..!!면 에러가 난다,에러가 나도 시끄럽게 아우성치지 않는다
Catch 브록으로 이동된다
시트가 없어서 온 것이다
그러니 이 브록에서시트를 새로 생성하고 이름을 붙여 준다
에러가 안났다면 그냥 기존의 시트를 얻어내어 작업을 하면 되는것이고
시트를 얻었으니 엑셀에서 밤낮하던 짓..순환하면서 값을 뿌려준다
이것으로 간단히 그냥 첫째버튼의 임무는 끝났다
이제 두번째 버튼 크릭하면

Private Sub btnSave_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles btnSave.Click Dim shtX As Excel.Worksheet Try shtX = Globals.ThisAddIn.Application.Worksheets(SHEET_NAME) Dim rData As Excel.Range = shtX.UsedRange If Globals.ThisAddIn.Application.WorksheetFunction.CountA(rData) = 0 Then MsgBox("저장하여야할 정보가 없습니다") Else SaveThisRange(rData) End If Catch ex As Exception MsgBox(SHEET_NAME & " 이라는 시트가 없습니다, 시트만들기 부터 하세요") End Try End Sub

이곳에서도 역시 Try문을 사용하는 습관이 좋고..
첫째시도는 정해진상수이름의 시트를 찾는다
실패하면 Catch문으로 가서 시트가 없다고 메시지 띄우고..
있으면 찾아서 활성화시키고 또한 시트에 정보가 있는지 없는지는
워크시트함수를 활용한다..이때는 경로명을 제대로 다 넣주어야 한다
엑셀 VBA에서와 같이 이런 저런 경로상의 생략은 VSTO에서는 안 통한다
정상적으로 WorksheetFunction같은 것도 철저히 넣어주어야 한다

범위에 정보가 있는지 없는지는 CountA함수같은 것이 있어서 편리한것..
0이라면 작업취소..
아니고 정보가 있다면
SaveThisRange(정보가 있는 범위)의 별도의 프로시져에 보내서
System.IO의 작업을 시키도록 한다..즉 시트상의 내용을 모두 하나의 텍스트문서에
옮기고 저장하는 작업을 하도록 한다

텍스트화일을 불러 들여서 시트에 뿌리는 것은 세번째버튼크릭작업..

***[LOG-IN]***

System.IO.TextWriter --- 텍스트화일 저장하는 일을 하는 개체
System.IO.StreamWriter("경로및화일명")---TextWriter개체만들기메소드
System.IO.TextReader ----텍스트화일 읽어들이는 일을 하는 개체
System.IO.StreamReader("경로및화일명")-------TextReader개체만들기메소드
와 같은 개체를 활용해 보았다