Вот фрагмент кода, который каждую минуту преобразует все файлы .csv в папке в .xls. Но я ищу некоторую помощь, чтобы избежать дублирования - PullRequest
0 голосов
/ 17 января 2019

Вот фрагмент кода, который каждую минуту преобразует все файлы .csv в папке в .xls. Но я ищу некоторую помощь, чтобы избежать дублирования. Другими словами, согласно потоку он ищет все файлы .CSV в определенной папке и сохраняет их как .XLS в той же самой папке. В цикле это продолжает делать это каждую минуту. Теперь файлы, которые уже конвертированы, не нужно конвертировать снова. Поэтому я ищу некоторую помощь, чтобы добавить дополнительную логику, как описано ниже.

Для каждого файла в папке, если расширение файла равно .CSV, проверьте, существует ли в одной папке одно и то же имя файла с расширением .XLS. Если это так, проверьте то же самое для следующего файла, иначе СОХРАНИТЕ этот файл AS .XLS. и сделайте то же самое для всех остальных файлов в этой папке.

Dim waittime : waittime = 1 * 60 * 1000
'Constants
Const xlOpenXMLWorkbook = 51             '(without macro's in 2007-2016, xlsx)
Const xlOpenXMLWorkbookMacroEnabled = 52 '(with or without macro's in 2007-2016, xlsm)
Const xlExcel12 = 50                     '(Excel Binary Workbook in 2007-2016 with or without macro's, xlsb)
Const xlExcel8 = 56
Const xlExcEL9795 = 43

Do
    ' Extensions for old and new files
    strExcel = "xls"
    strCSV = "csv"

    ' Set up filesystem object for usage
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    ' Access the folder to process
    Set objFolder = objFSO.GetFolder("C:\Users\User\Desktop\CSV to XLS\")

    ' Load Excel (hidden) for conversions
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = False
    objExcel.DisplayAlerts = False

    ' Process all files
    For Each objFile In objFolder.Files
        ' Get full path to file
        strPath = objFile.Path
        ' Only convert CSV files
        If LCase(objFSO.GetExtensionName(strPath)) = LCase(strCSV) Then
            ' Display to console each file being converted
            'WScript.Echo "Converting """ & strPath & """"
            ' Load CSV into Excel and save as native Excel file
            Set objWorkbook = objExcel.Workbooks.Open(strPath, False, True)
            objWorkbook.SaveAs Replace(strPath, strCSV, strExcel), xlOpenXMLWorkbook
            objWorkbook.Close False
            Set objWorkbook = Nothing
        End If
    Next

    WScript.Sleep(waittime)
Loop

1 Ответ

0 голосов
/ 17 января 2019

Как правило, вы хотите проверить, существует ли файл с тем же базовым именем, но другим расширением в том же каталоге, и выполнить преобразование, только если это не так.

If LCase(objFSO.GetExtensionName(strPath)) = LCase(strCSV) Then
    directory = objFSO.GetParentFolderName(strPath)
    basename  = objFSO.GetBaseName(strPath)
    xlsPath   = objFSO.BuildPath(directory, basename & "." & strExcel)

    If Not objFSO.FileExists(xlsPath) Then
        Set objWorkbook = objExcel.Workbooks.Open(strPath, False, True)
        objWorkbook.SaveAs xlsPath, xlOpenXMLWorkbook
        objWorkbook.Close False
        Set objWorkbook = Nothing
    End If
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...