애들센스


고인물같은 아주 오래된 잡기술 삽질의 추억

VBA와 달달하던 시절(여친이랑 그래야지, 고작 프로그램 따위랑 달달?)에 Userform에 차트를 보여주는 팁이 있었다. 그림이라 인터랙티브하진 않지만 거지같은 Userform에 이런 걸 보여줄 수 있다는 걸 만드는 게 웬지 뿌듯했다(그래봐야 남의 코드 베낀 거지만)

대단한 기술처럼 아끼던 잡기였지만 이제와 보니 쓸데없는 짓거리(애초에 오피스프로그래밍이 쓸데없는 짓이지만)이다. MS는 Userform을 띄워 뭔가 입력하고 보여주라고 Userform을 만들었겠지만 사용자 입장에선 거추장스러운 것이고(워크시트에서 하면 될 걸, 윈도 애플리케이션 같은 모양새 갖춘다고 그런 삽질을...) Userform과 관련 컨트롤들이 VB나 C#의 그것만큼 그닥 유용하지 않다.


근데 오늘은 이런 짓거리를 할 필요가 생겼다. 만드는 웹사이트(즉 웹프로그램)에 쬐맨한 차트를 보여주고 싶은 데, 엑셀의 스파크 라인이 탐나는 것이다. 20개 남짓한 차트를 한 눈에 볼 수 있게 보여 주기 위해 highcharts 같은 거 쓰는 건 낭비일 듯 하여 셀안에 저장한 스파크 라인을 그림파일로 만들어 보여주려는 아이디어이다.

그래서 작성한 코드가...
    Dim rng As Range
Dim pathName As String

Application.Calculation = xlCalculationManual

For Each rng In shNAV.Range(shNAV.Range("B3"), _
shNAV.Range("B3").End(xlToRight))

Set rng = rng.Offset(-1, 0)
rng.CopyPicture xlScreen, xlBitmap

With ActiveSheet.ChartObjects.Add(Left:=rng.Left, _
Top:=rng.Top, Width:=rng.Width, Height:=rng.Height)

.Name = "SparklineChartEXPORT"
.Activate
End With

''' Paste into chart area, export to file, delete chart.
pathName = "C:\apps\foo\foo\static\" & _
rng.Offset(2, 0).Value2 & ".jpg"

ActiveChart.Paste
With ActiveSheet.ChartObjects("SparklineChartEXPORT")
.Chart.Export pathName
.Delete
End With
Next
Application.Calculation = xlCalculationAutomatic
이다. 처음 돌려보니 속도가 아무래도 느리다. 그럴만 하다. 클립보드에 들어간 데이터를 차트를 만들어(그림으로 저장하기 위해 이용하는 것일 뿐) 붙여 넣고, 그림으로 추출하고 지우는 걸 반복하고 있기 때문이다. 재미있는 점은 속도를 올리기 위해 Application.ScreenUpdating 를 False로 주었더니 스파크 라인이 없는 빈 그림만 만들어 진다. 화면 렌더링을 꺼두었으니 그럴 만하다.

막상 웹페이지에 띄워보니 비트맵이라 흐릿하다. 흠 더구나 투명이미지 파일이 아니라서 테이블의 배경과도 어울리지 않는다. 원상복구를 고민한다. 근데 이 포스팅은 카테고리를 엑셀/VBA로 분류해야 하나...아님 삽질로 분류해야 하나...

[추가 속보]
검색을 하다보니 jQuery Sparklines이라 게 있다. 고민 끝이다. 일단 원상복구후 하고 싶을 때, jQuery Sparklines로 고고씽~

덧글

댓글 입력 영역