Excel / VBA: переименование файлов на основе содержимого [закрыто]

мне нужно переместить ряд файлов на основе их содержимого. В идеале, это может быть вызвано в Excel, так как пользователь импортирует файлы. Я могу сделать это с помощью простого сценария оболочки Unix следующим образом:

#!/bin/bash
for F in $(ls *.csv)
  do  
   while read N W
   do
     if grep -q "$W" "$F"
     then
      NEW=${N:0:50}.csv
        echo $F $NEW
        cp "$F" WORKING/$NEW
        break
      fi
  done <  ../Documents/ASSET Sale/bin/fixfilenames_namemap.txt
done

cp Name*.csv WORKING/name_name2.csv

формат fixfilesnames_namemap.txt-это:

newfilename text search string
newfilename2 text search string number two

обратите внимание, что последняя строка является kludge, как этот файл имеет кучу пробелов в своем имени, и поэтому он не может получить называется должным образом в цикле, и поэтому я просто переместить один папка.

Я хотел бы процедуру VBA, которая будет работать или, возможно, простой .bat-файл, который я мог бы вызвать изнутри Excel 2016.

В настоящее время я работаю с функцией RenameFile (), которая позволяет мне указывать КАТАЛОГ, Источник и newname. Если бы я мог просто получить функцию поиска, работающую, чтобы найти текстовую строку в другом поле, я все настроен.

Public Function RenameFile()
Dim src As String, dst As String, fl As String
Dim rfl As String

'Folder
src = Range("F4")
'File name
fl = Range("G4")
'Rename file
rfl = Range("Assets_Eligible_Destination")

On Error Resume Next
Name src & "" & fl As src & "" & rfl
If Err.Number <> 0 Then
    MsgBox "Error: " & src & "" & rfl
End If
On Error GoTo 0
End Function

спасибо

5
задан berlin
23.03.2023 9:16 Количество просмотров материала 3202
Распечатать страницу

1 ответ

следующий код работает, чтобы найти строки из листа в наборе файлов. Однако это очень медленно, если вы файлы 100k строк и соответствующая строка находится в последних 10.

это основано на другом ответе StackOverflow: как мне найти определенную строку в тексте .файлы журнала С помощью VBA?

Sub StringExistsInFile()
  Dim theString As String
  Dim path As String
  Dim StrFile As String
  Dim fso As New FileSystemObject
  Dim file As TextStream
  Dim line As String

  theString = Range("E4")
  path = Range("F4")
  StrFile = Dir(path & "*.csv")

  Do While StrFile <> ""

    'Find TheString in the file
    'If found, debug.print and exit loop

    'Set file = fso.OpenTextFile(path & StrFile)


    Do While Not file.AtEndOfStream
        line = file.ReadLine

'Debug.Print line

        If InStr(1, line, theString, vbTextCompare) > 0 Then
            Range("G4").Value = StrFile
            Exit Do
        End If
    Loop

    file.Close
    Set file = Nothing
    Set fso = Nothing

    StrFile = Dir()
  Loop
End Sub
0
отвечен berlin 2023-03-24 17:04

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх