在 Mac 上将 .xls 和 .xlsx 批量转换为 .txt(制表符分隔)

在 Mac 上将 .xls 和 .xlsx 批量转换为 .txt(制表符分隔)

我有大约 150 个 .xls 和 .xlsx 文件需要转换为制表符分隔格式。我尝试使用自动程序,但只能逐个进行转换。不过,这肯定比逐个打开要快。我对脚本的了解很少,所以我很希望有一种尽可能轻松的方法来完成这项工作。

答案1

(我知道你用的是 MAC,所以我的答案可能对你没多大用处。但对于 Windows 用户来说也许有用。顺便说一句,有一个适用于 MAC 和 Linux 的 Powershell 开源重新实现,叫做前列腺增生症

如何轻松地将多个 Excel 文件转换为任何所需格式

下载此转换器Powershell 脚本并执行它。就这样。:)

它会要求您提供一个文件夹,并遍历此文件夹及其子文件夹中的所有 XLSX、XLS、XLSB。接下来,Powershell 会创建一个隐藏的 Excel 实例,以使用 Excel 内部OpenSave 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

相关内容