web-dev-qa-db-ja.com

Macで.xlsと.xlsxを.txt(タブ区切り)に一括変換

タブ区切りに変換する必要がある約150個の.xlsファイルと.xlsxファイルがあります。オートマターを使ってみましたが、1つずつしかできませんでした。ただし、それぞれを個別に開くよりも間違いなく高速です。私はスクリプトの知識がほとんどないので、これをできるだけ苦痛なく行う方法をいただければ幸いです。

3
Jarrett G.

(私はあなたがMACを使用していることを知っているので、私の答えはあなたにとってそれほど役に立たないかもしれません。しかし、Windowsユーザーにとっては多分。ところで、MACとLinux用のPowershellオープンソースの再実装があります [〜#〜 ] pash [〜#〜]

複数のExcelファイルを任意の形式に簡単に変換する方法

このコンバーターをダウンロード Powershellスクリプト 実行します。それで全部です。 :)

フォルダを要求し、このフォルダとそのサブフォルダ内のすべてのXLSX、XLS、XLSBを繰り返し処理します。次に、PowershellはExcelの非表示インスタンスを作成し、Excelの内部OpenおよびSave asコマンドを使用して、すべてのファイルを目的の形式に変換します。 OPが要求するため、現在タブ区切りのTXTファイル。ファイル名とフォルダー構造は保持されます。

たとえば、CSVやTXTを選択すると、複数のワークシートでも別々のファイルに保存されます。通常、Excelの名前を付けて保存ダイアログを使用すると、最初のシートのみが保存されます

enter image description hereenter image description here

別の形式が必要な場合は、ソースコードの-4158を自分の値に変更してください。以下は、 [〜#〜] msdn [〜#〜] から取得したいくつかの一般的な形式です。

Open XML Workbook XLSX 51 xlOpenXMLWorkbook 
 Excel 2003 XLS 56 xlExcel8 
 Excel12 XLSB 50 xlExcel12 
現在のプラットフォームテキストCSV-4158 xlCurrentPlatformText 
 HTML形式HTML44 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
nixda

ブックの1つを開き、developerタブに移動し、Visual Basicをクリックして、このコードをmoduleとして入力します。

PATHをすべてのワークブックがあるフォルダーに変更します。 2番目の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を台無しにした可能性があります

ここからリソース

1
Raystafarian

スクリプト言語を使用して、Excelライブラリでそれらすべてを反復処理し、ある種の正規表現を実行して特定の文字をタブに変換することができます。ドラフトして後で投稿する場合があります。

これは、ドロップレットとして実装することを目的としたApplescript(つまり、大量のファイルをドラッグできるアプリ)です。

磨く余地はありますが、本質的な仕事が成し遂げられることを願っています。

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
0
Bob Caceres