กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
291 2
URL.หัวข้อ /
URL
การแปลงไฟล์ Word 2000 หรือสูงกว่าให้เป็น Word 97
วันนี้ผมต้องแปลงไฟล์ Word 2000 ให้เป็น Word 97 มีทั้งหมดเกือบ 100 ไฟล์ และต้องเปลี่ยนฟอนท์ให้เป็น AngsanaUPC ด้วย
ผมจะใช้ Late Binding เหมือนตัวอย่างที่ผมเคยให้ตัวอย่างไว้ในเว็บนี้ มันอาจจะไม่เรียก Word ตัวที่เปิดล่าสุดขึ้นมาได้ ซึ่งอาจเป็น Word 2000 ก็ได้ เพื่อลดความเสี่ยง และให้เกิดความมั่นใจว่า เราเปิดไฟล์ Word ด้วย Word 97 จริงๆ จึงต้องใช้การอ้างอิงถึง Word Object แบบ Early Binding แทนครับ
ข้อดีของวิธีนี้คือ มันทำงานไวกว่า Late Binding แต่ข้อเสียคือ จะต้องตั้ง References ของ Microsoft Word 8.0 Object Libray ใน Access ก่อนที่เรียกใช้โค้ดแบบนี้ได้ครับ
ตัวอย่างการใช้ Late Binding
Dim objWord As Object
Set objWord = CreateObject("Word.Application")
ตัวอย่างการใช้ Early Binding
Dim objWord As Word.Document
Set objWord = CreateObject("Word.Document")
การทำงานของโค้ดข้างล่าง มันจะค้นหาไฟล์ที่เป็นนามสกุล .Doc ในห้องเป้าหมาย แล้วเปิดไฟล์นั้นด้วย Word 97 แล้วเปลี่ยนฟอนท์เป็น AngsanaUPC แล้ว Save เป็นชื่อใหม่ โดยเอาชื่อเดิมมาต่อท้ายด้วย _97 แล้วเก็บไว้ในห้องข้างในอีกห้องหนึ่งซึ่งผมได้สร้างรอไว้แล้ว
ลองดูตัวอย่างโค้ดข้างล่างครับ
Private Function fGetFiles2()
Dim objFS As Object, objFolder As Object
Dim objFiles As Object, objF1 As Object
Dim strFolderPath As String, strDoc As String
Dim I As Integer, J As Integer
strFolderPath = "e:/fullpaper/oral/"
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder(strFolderPath)
Set objFiles = objFolder.files
For Each objF1 In objFiles
If Right(objF1.Name, 3) = "doc" Then
OpenDoc strFolderPath & objF1.Name, strFolderPath & "97/" & Left(objF1.Name, Len(objF1.Name) - 4)
End If
Next
Set objF1 = Nothing
Set objFiles = Nothing
Set objFolder = Nothing
Set objFS = Nothing
End Function
Function OpenDoc(strDocName As String, strName As String)
'Dim objWord As Object
'Set objWord = CreateObject("Word.Application")
Dim objWord As Word.Document
Set objWord = CreateObject("Word.Document")
With objWord
.Application.Visible = False
.Application.Documents.Open FileName:=strDocName
.Application.Selection.WholeStory
.Application.Selection.Font.Name = "AngsanaUPC"
.Application.ActiveDocument.SaveAs FileName:=strName & "_97.doc", FileFormat:=0
End With
objWord.Application.Quit
Set objWord = Nothing
End Function
ผมจะใช้ Late Binding เหมือนตัวอย่างที่ผมเคยให้ตัวอย่างไว้ในเว็บนี้ มันอาจจะไม่เรียก Word ตัวที่เปิดล่าสุดขึ้นมาได้ ซึ่งอาจเป็น Word 2000 ก็ได้ เพื่อลดความเสี่ยง และให้เกิดความมั่นใจว่า เราเปิดไฟล์ Word ด้วย Word 97 จริงๆ จึงต้องใช้การอ้างอิงถึง Word Object แบบ Early Binding แทนครับ
ข้อดีของวิธีนี้คือ มันทำงานไวกว่า Late Binding แต่ข้อเสียคือ จะต้องตั้ง References ของ Microsoft Word 8.0 Object Libray ใน Access ก่อนที่เรียกใช้โค้ดแบบนี้ได้ครับ
ตัวอย่างการใช้ Late Binding
Dim objWord As Object
Set objWord = CreateObject("Word.Application")
ตัวอย่างการใช้ Early Binding
Dim objWord As Word.Document
Set objWord = CreateObject("Word.Document")
การทำงานของโค้ดข้างล่าง มันจะค้นหาไฟล์ที่เป็นนามสกุล .Doc ในห้องเป้าหมาย แล้วเปิดไฟล์นั้นด้วย Word 97 แล้วเปลี่ยนฟอนท์เป็น AngsanaUPC แล้ว Save เป็นชื่อใหม่ โดยเอาชื่อเดิมมาต่อท้ายด้วย _97 แล้วเก็บไว้ในห้องข้างในอีกห้องหนึ่งซึ่งผมได้สร้างรอไว้แล้ว
ลองดูตัวอย่างโค้ดข้างล่างครับ
Private Function fGetFiles2()
Dim objFS As Object, objFolder As Object
Dim objFiles As Object, objF1 As Object
Dim strFolderPath As String, strDoc As String
Dim I As Integer, J As Integer
strFolderPath = "e:/fullpaper/oral/"
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder(strFolderPath)
Set objFiles = objFolder.files
For Each objF1 In objFiles
If Right(objF1.Name, 3) = "doc" Then
OpenDoc strFolderPath & objF1.Name, strFolderPath & "97/" & Left(objF1.Name, Len(objF1.Name) - 4)
End If
Next
Set objF1 = Nothing
Set objFiles = Nothing
Set objFolder = Nothing
Set objFS = Nothing
End Function
Function OpenDoc(strDocName As String, strName As String)
'Dim objWord As Object
'Set objWord = CreateObject("Word.Application")
Dim objWord As Word.Document
Set objWord = CreateObject("Word.Document")
With objWord
.Application.Visible = False
.Application.Documents.Open FileName:=strDocName
.Application.Selection.WholeStory
.Application.Selection.Font.Name = "AngsanaUPC"
.Application.ActiveDocument.SaveAs FileName:=strName & "_97.doc", FileFormat:=0
End With
objWord.Application.Quit
Set objWord = Nothing
End Function
2 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R00788
ถ้าอยากมี Help ในเรื่องการทำ Automation ของ Office XP ก็ไปเอามาอ่านได้ที่
http://download.microsoft.com/download/OfficeXPProf/Utility/1/NT5XP/EN-US/Xpautomation.exe (http://support.microsoft.com/default.aspx?scid=kb;en-us;Q302460)
ซึ่งจะพูดถึง Late Binding และ Ealy Binding ไว้ด้วย
หรือจะศึกษาโค้ดที่เป็น C++ หรือ VB ได้ที่ http://download.microsoft.com/download/office2000dev/sample/2/WIN98/EN-US/OFFAUTMN.EXE
ส่วนโค้ดข้างบนยังไม่สมบูรณ์นะครับ เพราะมันจะเรียก Word ตัวที่ถูกเปิดล่าสุด ผมจะหาทางแก้ไข แล้วจะนำมาบอกอีกที่หนึ่งก็แล้วกัน
2 @R00828
ที่ http://support.microsoft.com/default.aspx?scid=kb;en-us;Q240794
จะมีโค้ดสำหรับหาว่าโปรแกรมของ Office ติดตั้งไว้ที่ห้องไหน
การหาห้องที่ได้ติดตั้งโปรแกรมไว้ก็มีประโยชน์เหมือนกันนะครับ
Time: 0.1083s