ฉันต้องทำงานกับแอปพลิเคชันเก่าที่สามารถส่งออกไฟล์ XLS เท่านั้นและฉันเขียนโปรแกรมใน. Net โดยใช้ไลบรารี EPPlus ที่สามารถอ่านไฟล์ XLSX ได้เท่านั้น
วิธีที่ง่ายที่สุดในการแปลงชุดจาก XLS เป็น XLSX คืออะไร?
ฉันต้องทำงานกับแอปพลิเคชันเก่าที่สามารถส่งออกไฟล์ XLS เท่านั้นและฉันเขียนโปรแกรมใน. Net โดยใช้ไลบรารี EPPlus ที่สามารถอ่านไฟล์ XLSX ได้เท่านั้น
วิธีที่ง่ายที่สุดในการแปลงชุดจาก XLS เป็น XLSX คืออะไร?
คำตอบ:
ตรวจสอบผู้จัดการการวางแผนโยกย้าย Office
ชุดเครื่องมือนี้ยังมี Office File Converter (OFC) ซึ่งเปิดใช้งานการแปลงเอกสารจำนวนมากจากรูปแบบไบนารีเป็น OpenXML ( Technet )
โปรดทราบว่าคุณจะต้องMicrosoft Office Compatibility Pack for Word, Excel, and PowerPoint File Formatsใช้ OFC ในการทำงานด้วย
เครื่องมือทั้งสองดูเหมือนจะไม่ได้รับการสนับสนุนอีกต่อไป
ฉันขอแนะนำให้ใช้แมโครเพื่อประมวลผลไฟล์ภายในโฟลเดอร์เพื่อแปลงไฟล์จาก xls เป็น xlsx รหัสนี้อนุมานว่าไฟล์ทั้งหมดอยู่ภายในโฟลเดอร์เดียวและไฟล์ xls ทั้งหมดจะต้องถูกแปลง แต่ถ้าคุณต้องการเลือกไฟล์แต่ละไฟล์รหัสนี้สามารถอัปเดตได้
รหัสนี้จะต้องเรียกใช้จาก Excel 2007 หรือสูงกว่าสมุดงาน
Option Explicit
' Convert all xls files in selected folder to xlsx
Public Sub convertXLStoXLSX()
Dim FSO As Scripting.FileSystemObject
Dim strConversionPath As String
Dim fFile As File
Dim fFolder As Folder
Dim wkbConvert As Workbook
' Open dialog and select folder
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Show
On Error Resume Next ' Prevent debug mode if user cancels selection
strConversionPath = .SelectedItems(1)
On Error GoTo 0 ' Re-enable default error handling
End With
Set FSO = New Scripting.FileSystemObject
' Check if the folder exists
If FSO.FolderExists(strConversionPath) Then
Set fFolder = FSO.GetFolder(strConversionPath)
' Disable confirmation dialogs (to prevent "unsaved changes" dialog popping up)
' and screen updates (to speed up conversion)
Application.DisplayAlerts = False
Application.ScreenUpdating = False
' Loop through files, find the .xls files
For Each fFile In fFolder.Files
If LCase$(Right(fFile.Name, 4)) = ".xls" Then
' Open temporary workbook
Set wkbConvert = Workbooks.Open(fFile.Path)
' Save as OpenXML workbook - if your .xls files contain macros
' then change to FileFormat:=xlOpenXMLWorkbookMacroEnabled
wkbConvert.SaveAs FSO.BuildPath(fFile.ParentFolder, _
Left(fFile.Name, Len(fFile.Name) - 4)) & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook
wkbConvert.Close SaveChanges:=False
' Delete original file
fFile.Delete Force:=True
End If
Next fFile
' Re-enable confirmation dialogs and screen updates
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End If
End Sub
หมายเหตุ:ถ้าไฟล์ที่คุณกำลังแปลงประกอบด้วยแมโครแล้วคุณจะต้องอัปเดตในการอ่าน
FileFormat:=xlOpenXMLWorkbookFileFormat:=xlOpenXMLWorkbookMacroEnabledหรือถ้าคุณไม่ต้องการรหัสแมโครในไฟล์ที่แปลงคุณสามารถปล่อยให้มันอยู่คนเดียวและมันจะลบมาโครเมื่อมันแปลงเป็นรูปแบบ xlsx
ดังนั้นฉันจึงเขียน VBScript แบบง่าย ๆ เพื่อแปลงไฟล์. xls เป็น. xlsx แบบเงียบ ๆ
./convert-xls-xlsx.vbs {พา ธ ไปยังโฟลเดอร์ที่มีไฟล์. xls}
convert-xls-xlsx.vbs:
ตั้ง args = WScript.Arguments
strPath = args (0)
strPath = CreateObject ("Scripting.FileSystemObject") GetAbsolutePathName (strPath)
ตั้งค่า objExcel = CreateObject ("Excel.Application")
objExcel.Visible = เท็จ
objExcel.DisplayAlerts = False
ตั้งค่า objFso = CreateObject ("Scripting.FileSystemObject")
ตั้งค่า objFolder = objFso.GetFolder (strPath)
สำหรับแต่ละ objFile ใน objFolder.Files
fileName = objFile.Path
ถ้า (objFso.GetExtensionName (objFile.Path) = "xls") จากนั้น
ตั้งค่า objWorkbook = objExcel.Workbooks.Open (ชื่อไฟล์)
saveFileName = แทนที่ (fileName, ". xls", ". xlsx")
objWorkbook.SaveAs saveFileName, 51
objWorkbook.Close ()
objExcel.Application.DisplayAlerts = True
สิ้นสุดถ้า
ต่อไป
MsgBox "การแปลงเสร็จสิ้น"
หมายเหตุ: ระวังช่องว่างในเส้นทางโฟลเดอร์หากเส้นทางของคุณมีช่องว่างคั่นกลางให้ใส่เส้นทางด้วยเครื่องหมายคำพูด
Sub SaveAllAsXLSX ()
strFilename ติ่มซำเป็นสตริง
strDocName มัวเป็นสตริง
strpath ติ่มซำเป็นสตริง
Dim wbk เป็นสมุดงาน
Dim fDialog As FileDialog
Dim intPos As Integer
Dim strPassword As String
Dim strWritePassword As String
Dim varA As String
Dim varB As String
Dim colFiles เป็นชุดใหม่
Dim vFile As Variant
ตั้งค่า fDialog = Application.FileDialog (msoFileDialogFolderPicker)
ด้วย fDialog
.Title = "เลือกโฟลเดอร์แล้วคลิกตกลง"
.AllowMultiSelect = True
.InitialView = msoFileDialogViewList
ถ้า. แสดง -1 แล้ว
MsgBox "ยกเลิกโดยผู้ใช้", "รายการเนื้อหาโฟลเดอร์"
ออกจากตำบล
สิ้นสุดถ้า
strPath = fDialog.SelectedItems.Item (1)
ถ้าถูกต้อง (strPath, 1) "\" ดังนั้น strPath = strPath + "\"
จบด้วย
ถ้า Left (strPath, 1) = Chr (34) แล้ว
strPath = กลาง (strPath, 2, Len (strPath) - 2)
สิ้นสุดถ้า
ตั้งค่า obj = CreateObject ("Scripting.FileSystemObject")
RecursiveDir colFiles, strPath, "* .xls", True
สำหรับแต่ละ vFile In colFiles
Debug.Print vFile
strFilename = vFile
varA = ขวา (strFilename, 3)
ถ้า (varA = "xls" หรือ varA = "XLSX") จากนั้น
ตั้งค่า wbk = สมุดงานเปิด (ชื่อไฟล์: = strFilename)
หาก wbk.HasVBProject นั้น
wbk.SaveAs ชื่อไฟล์: = strFilename & "m", FileFormat: = xlOpenXMLWorkbookMacroEnabled
อื่น
wbk.SaveAs ชื่อไฟล์: = strFilename & "x", FileFormat: = xlOpenXMLWorkbook
สิ้นสุดถ้า
wbk.Close SaveChanges: = False
obj.DeleteFile (strFilename)
สิ้นสุดถ้า
ถัดไป vFile
ส่วนท้าย
ฟังก์ชั่นสาธารณะ RecursiveDir (colFiles เป็นชุดสะสม, _
strFolder เป็นสตริง, _
strFileSpec As String, _
bIncludeSubfolders ในฐานะบูลีน)
ติ่มซำ strTemp As String
Dim colFolders เป็นชุดใหม่
Dim vFolderName เป็น Variant
'เพิ่มไฟล์ใน strFolder ที่ตรงกับ strFileSpec ไปที่ colFiles
strFolder = TrailingSlash (strFolder)
strTemp = Dir (strFolder & strFileSpec)
ทำในขณะที่ strTemp vbNullString
colFiles เพิ่ม strFolder & strTemp
strTemp = Dir
ห่วง
ถ้า bIncludeSubfolders แล้ว
'เติม colFolders ด้วยรายการไดเรกทอรีย่อยของ strFolder
strTemp = Dir (strFolder, vbDirectory)
ทำในขณะที่ strTemp vbNullString
ถ้า (strTemp ".") และ (strTemp ".. ") จากนั้น
ถ้า (GetAttr (strFolder & strTemp) และ vbDirectory) 0 จากนั้น
colFolders เพิ่ม strTemp
สิ้นสุดถ้า
สิ้นสุดถ้า
strTemp = Dir
ห่วง
'โทร RecursiveDir สำหรับแต่ละโฟลเดอร์ย่อยใน colFolders
สำหรับแต่ละ vFolderName ใน colFolders
โทร RecursiveDir (colFiles, strFolder & vFolderName, strFileSpec, True)
ถัดไป vFolderName
สิ้นสุดถ้า
ฟังก์ชั่นสิ้นสุด
ฟังก์ชั่นที่สาธารณะ TrailingSlash (strFolder As String) As String
ถ้า Len (strFolder)> 0 จากนั้น
ถ้าถูกต้อง (strFolder, 1) = "\" จากนั้น
TrailingSlash = strFolder
อื่น
TrailingSlash = strFolder & "\"
สิ้นสุดถ้า
สิ้นสุดถ้า
ฟังก์ชั่นสิ้นสุด
หากคุณติดตั้ง MsOffice ไว้เครื่องมือนี้อาจคุ้มค่าสำหรับการดาวน์โหลดสำหรับการแก้ไขอย่างรวดเร็ว
http://www.softinterface.com/Convert-XLS/Features/Convert-XLS-To-XLSX.htm
เมื่อคุณเลือกโฟลเดอร์เพื่อดูไฟล์ xls ที่ถูกแปลงตรวจสอบให้แน่ใจว่าคุณทำเครื่องหมายที่ตัวเลือกเครื่องมือการแปลงที่ใช้ MS Office เพื่อการแปลงไม่ใช่ตัวแปลงของพวกเขาเอง
หากคุณใช้ตัวแปลงของคุณเองคุณจะสูญเสียสีในเซลล์และดูเหมือนว่าแผ่นงานแผ่นเดียวจะออกมา หากคุณใช้ MsOffice เนื่องจากตัวแปลงดูเหมือนจะทำงานได้ดี เครื่องมือที่ดีสำหรับการแก้ไขอย่างรวดเร็ว