VBA를 사용하여 .csv에서 캐리지 리턴 (줄 바꿈 제외)을 자동으로 제거하는 작업을하고 있습니다. 트릭을 수행 할 몇 가지 Powershell 구문을 알아 냈지만 동료와 공유 할 수있는 파일이 하나만 있도록 VBA 내에 포함해야합니다. 또한 나머지 매크로에서 사용하는 파일 경로로 이동하려면 Powershell 구문이 필요합니다. 마지막으로 적용해야하는 매크로의 마지막 부분은 다음과 같습니다.
Private Sub Save()
' Save Macro
' Save as a .csv
Dim new_file As String
Dim Final_path As String
new_file = Left(Application.ActiveWorkbook.FullName, Len(Application.ActiveWorkbook.FullName) - 4) & ".csv"
ActiveWorkbook.SaveAs Filename:= _
new_file _
, FileFormat:=xlCSV, CreateBackup:=False
Final_path = Application.ActiveWorkbook.FullName
'Below, I need to pass the Final_path file path over to powershell as a variable then
'strip the carraige returns from the file and resave as the same .csv
End Sub
다음으로 다음 Powershell 스크립트를 실행해야합니다 (VBA에서 Final_path 변수를 업데이트하려면 Powershell의 파일 경로도 필요합니다). 명확하게하기 위해 C : \ Users \ Desktop \ CopyTest3.csv 및. \ DataOutput_2.csv를 VBA의 Final_path 변수와 동일하게 업데이트해야합니다. 다음 Powershell 구문은 줄 바꿈 (\ n)을 남겨두고 .csv 파일에서 캐리지 리턴 (\ r)을 지 웁니다.
[STRING]$test = [io.file]::ReadAllText('C:\Users\Desktop\CopyTest3.csv')
$test = $test -replace '[\r]',''
$test | out-file .\DataOutput_2.csv
도움에 미리 감사드립니다!
- 답변 # 1
- 답변 # 2
Public FSO As New FileSystemObject Private Sub Save() ' ' Save Macro ' Save as a .csv ' Dim new_file As String Dim Final_path As String Dim PS_text As String Dim PS_run As Variant new_file = Left(Application.ActiveWorkbook.FullName, Len(Application.ActiveWorkbook.FullName) - 4) & ".csv" ActiveWorkbook.SaveAs Filename:= _ new_file _ , FileFormat:=xlCSV, CreateBackup:=False Final_path = new_file Application.DisplayAlerts = False Dim b Set b = VBA.CreateObject("WScript.Shell") 'creating temporary shall script Set a = FSO.CreateTextFile(ThisWorkbook.Path & "\temp.ps1") 'saving commands into the script a.WriteLine ("[STRING]$test = [io.file]::ReadAllText('" & Final_path & "')") a.WriteLine ("$test = $test -replace '[\r]',''") a.WriteLine ("$test | out-file " & Final_path) 'executing the script b.Run "powershell " & ThisWorkbook.Path & "\temp.ps1", vbNormalFocus Application.DisplayAlerts = True End Sub
관련 자료
- mysql - Sequel Server Management Studio 2017 내에서 올바른 구문으로 Python 코드를 직접 실행하는 방법
- reactjs - componentdidmount () 내에서 함수 포맷 - 구문 질문
- Processing items within a powershell array - powershell 배열 내에서 항목 처리 - 여러 항목
- c# - 목록 내 목록이있는 Lambda 메서드 쿼리 구문
- TFS Powershell 스크립트 내에서 Powershell Start-Process cmdlet이 작동하지 않음
- user interface - powershell 스크립트 (ps1)에서 gui를 직접 시작
- r - for 루프를 적용하여 목록에서 찾은 단일 데이터 프레임 저장
- flask - venv 내에서 powershell 스크립트를 어떻게 실행합니까?
- Emacs 명령 행을 통해 zip 내에서 직접 파일을 여는 방법은 무엇입니까?
- sql - 구문 문제-워크 시트에서 가져 오기 위해 Excel에서 Where 절을 사용하는 방법
다음은 FSO를 사용하여 텍스트 파일의 줄 구분 기호를 변경하여 파일을 읽고 사용자가 제공 한 줄 끝으로 수정 된 버전을 작성하는 한 가지 방법입니다.