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 |
---|
댓글