programing

따옴표 없이 Excel 파일을 .txt 형식으로 저장

procenter 2023. 7. 9. 22:45
반응형

따옴표 없이 Excel 파일을 .txt 형식으로 저장

저는 A열에 데이터가 있는 엑셀 시트를 가지고 있습니다.세포에는 많은 특별한 문자들이 있습니다.시트를 .txt 형식으로 저장하면 각 줄의 시작 부분에 역콤마가 표시됩니다.수동으로 파일을 저장하고 매크로로 .txt 형식으로 저장해 보았습니다.그것은 왜 그럴까?어떻게 제거합니까?견적을 제거할 수 없습니다.사진 첨부enter image description here

이 질문에 대한 답변은 이미 끝났지만 나중에 다른 사람이 발견할 경우를 대비해 대안을 제시하고자 했습니다.

필요한 구분 기호에 따라 코드를 작성하지 않고작업을 수행할 수 있습니다.원래 질문에는 원하는 출력 유형에 대한 자세한 내용이 나와 있지 않지만 다음과 같은 대안이 있습니다.

PRN 파일 형식

가장 쉬운 선택사항은 파일을 "형식화된 텍스트(공백 구분)" 유형으로 저장하는 것입니다.VBA 코드 라인은 다음과 유사합니다.

ActiveWorkbook.SaveAs FileName:=myFileName, FileFormat:=xlTextPrinter, CreateBackup:=False

Excel 2007에서는 파일 이름 끝에 .prn 파일 확장자가 표시되지만 수동으로 이름을 변경하면 .txt로 변경할 수 있습니다.

Excel 2010에서는 다른 이름으로 저장 대화 상자에서 원하는 파일 확장자를 지정할 수 있습니다.

한 가지 중요한 점은 텍스트 파일에 사용되는 구분 기호의 수가 Excel 열의 너비와 관련이 있다는 것입니다.

관찰:

Excel Screenshot

다음이 됩니다.

Text Screenshot

이 코드는 당신이 원하는 것을 해줍니다.

논리

  1. 사용자 임시 디렉토리에 파일을 TAB로 구분된 파일로 저장
  2. 텍스트 파일을 한 번에 읽기
  3. 를 바꿉니다.""빈칸으로 새 파일에 동시에 씁니다.

코드

Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Private Const MAX_PATH As Long = 260

'~~> Change this where and how you want to save the file
Const FlName = "C:\Users\Siddharth Rout\Desktop\MyWorkbook.txt"

Sub Sample()
    Dim tmpFile As String
    Dim MyData As String, strData() As String
    Dim entireline As String
    Dim filesize As Integer
    
    '~~> Create a Temp File
    tmpFile = TempPath & Format(Now, "ddmmyyyyhhmmss") & ".txt"
    
    ActiveWorkbook.SaveAs Filename:=tmpFile _
    , FileFormat:=xlText, CreateBackup:=False
    
    '~~> Read the entire file in 1 Go!
    Open tmpFile For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1
    strData() = Split(MyData, vbCrLf)
    
    '~~> Get a free file handle
    filesize = FreeFile()
  
    '~~> Open your file
    Open FlName For Output As #filesize
    
    For i = LBound(strData) To UBound(strData)
        entireline = Replace(strData(i), """", "")
        '~~> Export Text
        Print #filesize, entireline
    Next i
    
    Close #filesize
    
    MsgBox "Done"
End Sub

Function TempPath() As String
    TempPath = String$(MAX_PATH, Chr$(0))
    GetTempPath MAX_PATH, TempPath
    TempPath = Replace(TempPath, Chr$(0), "")
End Function

스냅샷

실제 워크북

enter image description here

저장 후

enter image description here

음, 이건 어때요?

세포를 복사합니다.
메모장을 엽니다.
붙여넣기.

따옴표도, 쉼표도 없고 OP가 요청한 특수 문자를 유지합니다.그것은 또한 OP가 나쁜 것(또는 좋은 것)으로 언급하지 않은 첨부된 사진과 마찬가지로 캐리지 리턴으로 묘사됩니다.

원하는 결과를 제공하는 간단한 대답이 왜 저에게 부정적인 점수를 주는지 잘 모르겠습니다.

오후의 대부분을 이 일에 보냈습니다.

파일에 쓰는 일반적인 방법은 두 가지가 있는데, 첫 번째 방법은 직접 파일 액세스 "쓰기" 문입니다.따옴표가 추가됩니다.

두 번째는 "액티브 워크북"입니다.다른 이름으로 저장" 또는 "활성 워크시트"를 선택합니다.SaveAs"는 둘 다 활성 워크북의 파일 이름을 변경하는 매우 나쁜 부작용을 일으킵니다.

여기서의 해결책은 제가 온라인에서 찾은 몇 가지 해결책의 혼합입니다.기본적으로 다음과 같은 작업을 수행합니다. 1) 선택한 셀을 새 워크시트로 복사 2) 각 셀을 한 번에 하나씩 반복하여 열려 있는 파일로 "인쇄" 3) 임시 워크시트를 삭제합니다.

이 함수는 선택한 셀에서 작동하며 파일 이름에 대한 문자열을 가져오거나 파일 이름에 대한 프롬프트를 표시합니다.

Function SaveFile(myFolder As String) As String
tempSheetName = "fileWrite_temp"
SaveFile = "False"

Dim FilePath As String
Dim CellData As String
Dim LastCol As Long
Dim LastRow As Long

Set myRange = Selection
'myRange.Select
Selection.Copy

'Ask user for folder to save text file to.
If myFolder = "prompt" Then
    myFolder = Application.GetSaveAsFilename(fileFilter:="XML Files (*.xml), *.xml, All Files (*), *")
End If
If myFolder = "False" Then
    End
End If

Open myFolder For Output As #2

'This temporarily adds a sheet named "Test."
Sheets.Add.Name = tempSheetName
Sheets(tempSheetName).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

LastCol = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
LastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

For i = 1 To LastRow
    For j = 1 To LastCol
        CellData = CellData + Trim(ActiveCell(i, j).Value) + "   "
    Next j

    Print #2, CellData; " "
    CellData = ""

Next i

Close #2

'Remove temporary sheet.
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
'Indicate save action.
MsgBox "Text File Saved to: " & vbNewLine & myFolder
SaveFile = myFolder

함수 종료

이 질문은 이 질문에 대한 답을 훨씬 더 간단하게 제공했습니다.

쓰기는 나중에 입력과 함께 사용되는 컴퓨터에서 읽을 수 있는 파일을 생성하도록 설계된 특수 명령문입니다.

데이터를 만지작거리지 않으려면 인쇄를 사용합니다.

사용자 Gerg 감사합니다.

저도 같은 문제가 있어요.나는 엑셀 파일로 은행 결제를 위한 특정 .txt 파일을 만들어야 합니다.표준에서는 각 필수 필드 뒤에 특정 개수의 쉼표가 필요하므로 .txt 파일을 문자로 구분해서는 안 됩니다.가장 쉬운 방법은 엑셀 파일의 내용을 복사하여 메모장에 붙여 넣는 것입니다.

Write #1 "Print my Line"을 사용하는 대신 Print #1 "Print my Line"을 사용했는데 기본 Quote() 없이 모든 데이터가 제공됩니다.

Dim strFile_Path As String
strFile_Path = ThisWorkbook.Path & "\" & "XXXX" & VBA.Format(VBA.Now, "dd-MMM-yyyy hh-mm") & ".txt"
Open strFile_Path For Output As #1

Dim selectedFeature As String

For counter = 7 To maxNumberOfColumn

        selectedFeature = "X"
        Print #1, selectedFeature
        'Write #1, selectedFeature

Next counter
Close #1

PRN 솔루션은 셀의 간단한 데이터에만 작동하며, 저의 경우 200자 셀에서 처음 6개의 부호만 잘라냅니다.

다음은 Excel 2007-2016의 주요 파일 형식입니다. 참고:Mac용 Excel에서 값은 +1입니다.

51 = xlOpenXMLWorkbook (without macro's in 2007-2016, xlsx)
52 = xlOpenXMLWorkbookMacroEnabled (with or without macro's in 2007-2016, xlsm)
50 = xlExcel12 (Excel Binary Workbook in 2007-2016 with or without macro's, xlsb)
56 = xlExcel8 (97-2003 format in Excel 2007-2016, xls)

원본 XlFileFormat 파일 형식 속성

SaveAs 메서드에 대한 다른 FileFormatNumbers:

FileExtStr = ".csv": FileFormatNum = 6
FileExtStr = ".txt": FileFormatNum = -4158
FileExtStr = ".prn": FileFormatNum = 36

언급URL : https://stackoverflow.com/questions/11501531/saving-a-excel-file-into-txt-format-without-quotes

반응형