我有大约 150 个 .xls 和 .xlsx 文件需要转换为制表符分隔格式。我尝试使用自动程序,但只能逐个进行转换。不过,这肯定比逐个打开要快。我对脚本的了解很少,所以我很希望有一种尽可能轻松的方法来完成这项工作。
答案1
(我知道你用的是 MAC,所以我的答案可能对你没多大用处。但对于 Windows 用户来说也许有用。顺便说一句,有一个适用于 MAC 和 Linux 的 Powershell 开源重新实现,叫做前列腺增生症)
如何轻松地将多个 Excel 文件转换为任何所需格式
下载此转换器Powershell 脚本并执行它。就这样。:)
它会要求您提供一个文件夹,并遍历此文件夹及其子文件夹中的所有 XLSX、XLS、XLSB。接下来,Powershell 会创建一个隐藏的 Excel 实例,以使用 Excel 内部Open
和Save as
命令将所有文件转换为所需的格式。目前转换为制表符分隔的 TXT 文件,因为 OP 要求。文件名和文件夹结构被保留。
一个巧妙之处在于,如果您选择 CSV 或 TXT,即使多个工作表也会保存到单独的文件中。通常,使用 Excel 时,只有第一张工作表会被保存另存为对话
如果您需要其他格式,只需-4158
在源代码中更改为您的值即可。以下是一些常见格式微软。
打开 XML 工作簿 XLSX 51 xlOpenXMLWorkbook Excel 2003 XLS 56 xlExcel8 Excel12 XLSB 50 xlExcel12 当前平台文本 CSV -4158 xlCurrentPlatformText HTML 格式 HTML 44 xlHtml Unicode 文本 TXT 42 xlUnicodeText DBF4 DBF 11 xlDBF4
$object = New-Object -comObject Shell.Application
$folder = $object.BrowseForFolder(0, 'Select the folder', 0)
if (!$folder) {exit}
$excel = New-Object -comObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
foreach ($file in Get-ChildItem -literalPath $folder.self.Path*.xls? -recurse) {
$workbook = $excel.Workbooks.Open($file.Fullname)
foreach ($worksheet in $workbook.Sheets) {
$worksheet.activate()
$newpath = $File.DirectoryName +"\"+ $file.BaseName + " - " + $worksheet.name + ".csv"
$workbook.SaveAs($newpath,-4158 ,$null,$null)
}
$workbook.Close()
}
$excel.quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
- 依赖项:Excel 2003 或更高版本和 Powershell(Windows 7 下预装)
答案2
打开其中一个工作簿,转到developer
选项卡,单击 Visual Basic,然后输入此代码作为module
切换PATH
到所有工作簿所在的文件夹。第二个文件夹PATH
是您要保存文本文件的位置。
笔记您只能将worksheet
每个文件中的第一个保存为制表符分隔的文本,而不支持多个工作表。
Sub openandsave()
Dim lCount As Long
Dim wbResults As Workbook
Dim wbCodeBook As Workbook
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False
On Error Resume Next
Set wbCodeBook = ThisWorkbook
With Application.FileSearch
.NewSearch
.LookIn = "PATH"
.FileType = msoFileTypeExcelWorkbooks
If .Execute > 0 Then
For lCount = 1 To .FoundFiles.Count
Set wbResults = Workbooks.Open(Filename:=.FoundFiles(lCount), UpdateLinks:=0)
ActiveWorkbook.SaveAs Filename:="PATH" AND .Foundfiles(lcount) AND ".txt", FileFormat _
:=xlText, CreateBackup:=False
Next lCount
End If
End With
On Error GoTo 0
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub
如果它不起作用,我可能会搞砸SaveAs Filename
答案3
您可以使用脚本语言和一些 Excel 库来遍历它们,并执行某种 RegEx 将某些字符转换为制表符。我可能会起草并稍后发布。
答案4
这是一个 Applescript,旨在作为 droplet 实现(即,您可以将一堆文件拖到上面应用程序)。
还有改进的空间,但我希望你会发现它完成了基本的工作。
property type_list : {"XLS6", "XLS7", "XLS8", "XLSX"}
property extension_list : {"xls", "xlsx"}
on open these_workbooks
repeat with k from 1 to the count of these_workbooks
set this_item to item k of these_workbooks
set the item_info to info for this_item
--this if statement tests to make sure the items you're converting are Excel spreadsheets and not folders or aliases
if (folder of the item_info is false) and (alias of the item_info is false) and ((the file type of the item_info is in the type_list) or the name extension of the item_info is in the extension_list) then
tell application "Finder" to open this_item
tell application "Microsoft Excel 2011"
--this just tacks on ".txt" to your file name
set workbookName to (name of active workbook & ".txt")
--save the current open workbook as a tab-delimited text file
tell active workbook to save workbook as filename workbookName file format text Mac file format
close active workbook saving no
end tell
end if
end repeat
end open
on run
display dialog "Drop Excel files onto this icon."
end run