XLS封裝成EXE製作全攻略

假如您手頭已有一xls文檔等待封裝,假如您機子上已安裝有VB6開發系統,那麼請跟着往下操作:

一、用VB製作EXE文件頭部分

1、打開VB,“文件”-“新建工程”-“標準EXE”;

2、此時會出現名爲Form1的默認窗體編輯窗口,Form1將作爲軟件啓動封面窗體,打開該Form1的屬性窗口,對如下屬性進行設置:BorderStyle=0,StartUpPosition=2,Icon與Picture屬性設置成你需要的圖標(這也將成爲你EXE的圖標)和設計好準備使用的圖片(即軟件封面),窗體的大小設置成您需要的合適值即可。

3、往窗體中添加一個時鐘控件timer1,並將其InterVal屬性設爲1000。

4、雙擊窗體打開代碼編輯窗口,錄入以下代碼:
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function GetTempFileName Lib "kernel32" Alias "GetTempFileNameA" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Const MAX_PATH = 260
Private Const EXE_SIZE = 81920 '本EXE實際字節大小
Private Type FileSection
Bytes() As Byte
End Type
Private Type SectionedFile
Files() As FileSection
End Type
Dim StopTime As Integer

Private Sub Form_Activate()
If Command() = "" Then Main1
End Sub

Private Sub Form_Load()
On Error Resume Next
If Command() = "" Then
Form1.Visible = True
SetWindowPos Form1.hwnd, -1, 0, 0, 0, 0, &H2 Or &H1 '將封面置爲最頂層窗體
Else
Form1.Visible = False
Form1.Timer1.Enabled = True
End If
End Sub
Sub Main1()
Dim StartXLSByte, I, J As Long
Dim AppPath, XlsTmpPath As String
Dim myfile As SectionedFile
Dim xlApp As Excel.Application '定義EXCEL類
Dim xlBook As Excel.Workbook '定義工件簿類
Dim xlsheet As Excel.Worksheet '定義工作表類
AppPath = App.Path
XlsTmpPath = GetTempFile() '取得XLS臨時文件名(帶路徑)
If VBA.Right(App.Path, 1) = "\" Then AppPath = VBA.Left(App.Path, VBA.Len(App.Path) - 1)
Open AppPath & "\" & App.EXEName & ".exe" For Binary As #1
ReDim myfile.Files(1)
ReDim myfile.Files(1).Bytes(1 To LOF(1) - EXE_SIZE)
Open XlsTmpPath For Binary As #2
Get #1, EXE_SIZE + 1, myfile.Files(1).Bytes '此處數字要根據EXE實際頭文件大小更改設定
Put #2, 1, myfile.Files(1).Bytes
Close #1
Close #2
Set xlApp = CreateObject("Excel.Application") '創建EXCEL應用類
Set xlBook = xlApp.Workbooks.Open(FileName:=XlsTmpPath, password:="ldhyob") '打開EXCEL工作簿,已知該工作簿已加打開口令爲ldhyob,若您的工作簿沒有口令,則將此參數去掉
'以下星號括起部分代碼是往xls裏寫數據(也可不往工作簿裏寫數據的方法,而生成txt的方法),作用是保存本exe的絕對路徑與臨時xls絕對路徑,以便於EXE重寫更新與臨時文件刪除
'*****************************************
Set xlsheet = xlBook.Worksheets("temp") '設置活動工作表
xlsheet.Cells(1, 1) = AppPath & "\" & App.EXEName & ".exe" '將該EXE完全路徑存在工作表單元格內
xlsheet.Cells(2, 1) = XlsTmpPath '將該EXE本次運行產生XLS臨時文件路徑存在工作表單元格內
'****************************************
xlApp.Visible = True '設置EXCEL可見
Set xlApp = Nothing '釋放xlApp對象
StopTime = 0
Me.Timer1.Enabled = True '啓動時鐘
End Sub

Private Function GetTempFile() As String '用來產生系統臨時文件名
Dim lngRet As Long
Dim strBuffer As String, strTempPath As String
strBuffer = String$(MAX_PATH, 0)
lngRet = GetTempPath(Len(strBuffer), strBuffer)
If lngRet = 0 Then Exit Function
strTempPath = Left$(strBuffer, lngRet)
strBuffer = String$(MAX_PATH, 0)
lngRet = GetTempFileName(strTempPath, "tmp", 0&, strBuffer)
If lngRet = 0 Then Exit Function
lngRet = InStr(1, strBuffer, Chr(0))
If lngRet > 0 Then
GetTempFile = Left$(strBuffer, lngRet - 1)
Else
GetTempFile = strBuffer
End If
End Function

Private Sub Timer1_Timer()
On Error Resume Next
If Command() <> "" Then
If VBA.Dir(Command()) <> "" Then
Kill Command() '刪除本次運行遺留的臨時XLS文件
Else
End
End If
Else
StopTime = StopTime + 1 '計時累加
If StopTime = 1 Then Unload Me: End '2秒後自動關閉退出
End If
End Sub
5、可保存工程,如取名爲“工程1”;

6、進行編譯,“文件”-“生成工程1.exe”,此時也可將生成的EXE另外取名,如取名叫abc.exe。

7、查看第6步生成的EXE文件字節大小,並將具體數字記下來,並將VB模塊中的“Private Const EXE_SIZE = 81920”保證一致(這裏的81920是筆者例子的結果數字,每個人在實際時會有不同)。此例此步很重要,必須要做,該數字在xls文檔VBA中還要使用到。

至此,文件頭部分已做完,abc.exe文件也已生成於磁盤中。
特別提示:編譯前,確保VB裏"工程"---"引用"裏"Microsoft Excel 9.0 Object Library"前面的勾已打上.
二、xls文檔部分操作

1、給工作簿增加一個工作表temp,將其置爲隱藏。

2、增加xls文檔宏代碼以實現文檔關閉時EXE數據刷新。

打開xls文檔,打開VBE窗口,在ThisWorkBook代碼區頭部加入以下代碼:
Private Const EXE_SIZE = 81920 '此處數字爲前面第7步得到的EXE文件字節數
Private Type FileSection
Bytes() As Byte
End Type

在Workbook_BeforeClose事件中加入如下代碼(對原有的代碼可保留):
Dim myfile As FileSection '定義變量
Dim comc, exec, xlsc As String '定義變量
Application.Visible = False '隱藏EXCEL主窗口
exec = WorkSheets(“temp”).cells(1,1).value
xlsc = WorkSheets(“temp”).cells(2,1).value
comc = exec & " " & xlsc
Open exec For Binary As #1 '打開EXE文件
ReDim myfile.Bytes(1 To EXE_SIZE)
Get #1, 1, myfile.Bytes '取得固有文件頭
Close #1
If VBA.Dir(exec) <> "" Then Kill exec
Open exec For Binary As #1 '生成新的EXE文件
Put #1, 1, myfile.Bytes '先寫入文件頭
Open xlsc For Binary As #2 '打開xls臨時文件
ReDim myfile.Bytes(1 To FileLen(xlsc))
Get #2, 1, myfile.Bytes
Put #1, EXE_SIZE + 1, myfile.Bytes '將xls部分追加進EXE
Close #1
Close #2
Application.Quit
Shell comc, vbMinimizedNoFocus ‘刪除臨時xls文件

3、保存文檔,退出,關閉EXCEL。(提示:XLS文檔不要在open事件中顯示起始窗體,在關閉事件中,最好增加詢問用戶是否保存的語句)

三、將EXE與XLS結合生成新的EXE

將第一步得到的abc.exe與第二步得到的test.xls(文件名隨你願意取)放到同一目錄下,切換到MS-DOS模式,或者在該目錄下建立一個批處理文件即bat文件,這樣就不用切換到MS-DOS模式下輸入DOS命令了。建立bat文件的步驟方法是:鼠標右鍵“新建”—“文本文檔”,輸入以下內容:
@echo off
copy /b abc.exe + test.xls main.exe
保存,更改文件名(包括擴展名)爲“合併.bat”,然後雙擊它,不一會就會發現在當前目錄下會多出一個EXE文件main.exe,這就是封裝成品了,你可以將其重命名爲所需要的名稱。

好了,大功告成!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章