본문 바로가기
프로그램ing/PB

PowerBuilder DataWindow HTML로 변환 후 엑셀 저장

by 철밥통 2019. 1. 9.
반응형

PowerBuilder DataWindow HTML로 변환 후 엑셀 저장

 

/****************************************************************************************************************************************************/

엉뚱섭군 님의 글을 참조하여 조금 더 보강하였습니다.

 

기존 코드를 사용했을 때에는 Tmp Folder 가 삭제되지 않는 현상이 있어 해당 부분 조치하였습니다.

추가한 부분들은 파란색으로 별도 표기하였습니다.

 

무엇보다, 폴더를 삭제할 때에는 폴더 내에 아무런 파일이 없을 때 삭제가 되지 않아 엑셀 생성시 자동으로 생성되는

파일들의 리스트들을 적어서 삭제할 수 있도록 하였습니다.

/****************************************************************************************************************************************************/

 

 

String ls_HTML, ls_FileName, ls_Modify, ls_Named, ls_TmpFile, ls_TmpFolder
Integer li_FileNumber, li_Return
Long ll_Location

datawindow idw_saveas

 

idw_saveas = dw_1    // 원하시는 datawindow로 세팅하시면 됩니다.

 

// Don't proceed if there is no data object loaded in the DW
If (idw_saveas.dataobject = "") Then Return -1

// Generate the HTML
ls_Modify += "DataWindow.HTMLTable.Border=1  "

If Trim(ls_Modify) <> "" Then
 idw_saveas.Modify(ls_Modify)
End If
 
ls_HTML = idw_saveas.Object.DataWindow.Data.HTMLTable

If IsNull(ls_HTML) Or Len(ls_HTML) <= 1 Then
 MessageBox ("Error", "Error generating HTML table.", Exclamation!)
 Return -1
End If

OLEObject EXCEL

EXCEL = CREATE OLEObject
EXCEL.ConnectToNewObject("Excel.Application")

// 저장 위치
li_Return = GetFileSaveName( "Save File", ls_FileName, ls_Named, "xls" , "All Files (*.*),*.*" )

IF li_Return <> 1 THEN
 MessageBox("확인", "저장할 곳을 선택하십시오.")
 Return -1
END IF

 

ls_TmpFile = ls_FileName + ".htm"

ls_TmpFolder = left(ls_FileName, len(ls_FileName) - 4) + '.files'            //temp 폴더의 경로

 

IF FileExists(ls_TmpFile) THEN FileDelete(ls_TmpFile)
IF FileExists(ls_FileName) THEN FileDelete(ls_FileName)

li_FileNumber = FileOpen(ls_TmpFile, LineMode!, Write!, LockReadWrite!, Append!, EncodingUTF8! )

If (li_FileNumber >= 0) Then
 DO WHILE LenA(ls_HTML) > 10240
  ll_Location = PosA(ls_HTML, '<TR>') + 3
  FileWrite(li_FileNumber, LeftA(ls_HTML, ll_Location))
  ls_HTML = MidA(ls_HTML, ll_Location + 1)
 LOOP
 
 FileWrite(li_FileNumber, ls_HTML)
 FileClose(li_FileNumber)
Else // File open error
 MessageBox ("FileOpen Error", "Could not open file: " + ls_FileName + " (" + String( li_FileNumber ) + ")")
End If

EXCEL.WorkBooks.Open(ls_TmpFile)
EXCEL.WorkBooks(1).SaveAs(ls_FileName)
EXCEL.WorkBooks(1).Saved = True

EXCEL.Application.Quit
EXCEL.DisConnectObject()

Destroy EXCEL

FileDelete(ls_TmpFile)

FileDelete(ls_TmpFolder + '\filelist.xml')
FileDelete(ls_TmpFolder + '\sheet001.htm')
FileDelete(ls_TmpFolder + '\stylesheet.css')
FileDelete(ls_TmpFolder + '\tabstrip.htm')
RemoveDirectory(ls_TmpFolder)

Messagebox("완료", "파일이 저장되었습니다.")

Return 1

반응형

'프로그램ing > PB' 카테고리의 다른 글

[PowerBuilder] DataWindow 중복 데이터 표시 생략  (0) 2019.04.03

댓글