16

列AにデータがあるExcelシートがあります。セルには多くの特殊文字があります。シートを.txt形式で保存すると、各行の先頭に引用符が逆になります。手動とマクロでファイルを.txt形式で保存してみましたが、なぜそうなのですか?それらを削除する方法は?引用符を削除できません 写真を添付するここに画像の説明を入力してください

4

8 に答える 8

17

この質問はすでに回答されているようですが、後で誰かがこれを見つけた場合に備えて、別の方法を提供したいと思いました。

必要な区切り文字によっては、コードを記述せずにこれを行うことができます。元の質問では、目的の出力タイプの詳細は示されていませんが、別の方法があります。

PRNファイルタイプ

最も簡単なオプションは、ファイルを「フォーマットされたテキスト(スペース区切り)」タイプとして保存することです。VBAコード行は次のようになります。

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

Excel 2007では、これによりファイル名の末尾に.prnファイル拡張子が付けられますが、手動で名前を変更することで.txtに変更できます。

Excel 2010では、[名前を付けて保存]ダイアログで任意のファイル拡張子を指定できます。

注意すべき重要な点の1つは、テキストファイルで使用される区切り文字の数は、Excelの列の幅に関連しているということです。

観察:

Excelのスクリーンショット

になる:

テキストのスクリーンショット

于 2012-07-26T02:36:02.020 に答える
12

このコードはあなたが望むことをします。

論理

  1. ファイルをTAB区切りファイルとしてユーザー一時ディレクトリに保存します
  2. 1回でテキストファイルを読む
  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

SNAPSHOTS

実際のワークブック

ここに画像の説明を入力してください

保存後

ここに画像の説明を入力してください

于 2012-07-16T12:31:04.493 に答える
8

うーん、これはどう?

セルをコピーします。
メモ帳を開きます。
ペースト。

引用符や逆コンマはなく、OPが要求した特殊文字を保持します。OPが悪いこと(または良いこと)として言及しなかった添付の写真と同じように、キャリッジリターンによっても描写されます。

なぜ、望ましい結果をもたらす単純な答えが私に否定的な評価を与えるのか、よくわかりません。

于 2014-03-19T19:57:12.237 に答える
2

私はちょうど午後の大部分をこれに費やしました

ファイルへの書き込みには2つの一般的な方法があります。最初の方法は、直接ファイルアクセスの「書き込み」ステートメントです。これにより、引用符が追加されます。

2つ目は、「ActiveWorkbook.SaveAs」または「ActiveWorksheet.SaveAs」です。どちらも、アクティブなブックのファイル名を変更するという非常に悪い副作用があります。

ここでの解決策は、私がオンラインで見つけたいくつかの解決策のハイブリッドです。基本的にこれを行います:1)選択したセルを新しいワークシートにコピーします2)各セルを一度に1つずつ繰り返し、開いているファイルに「印刷」します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

終了機能

于 2014-03-11T22:20:54.253 に答える
2

この質問からの答えは、この質問への答えをはるかに簡単に提供しました。

Writeは、後でInputで使用される機械可読ファイルを生成するために設計された特別なステートメントです。

印刷を使用して、データをいじらないようにします。

ありがとうユーザーGSerg

于 2018-10-01T16:20:14.993 に答える
1

同じ問題があります。Excelファイルから銀行支払い用の特定の.txtファイルを作成する必要があります。標準では各必須フィールドの後に特定の数のコンマが必要なため、.txtファイルを文字で削除してはなりません。これを行う最も簡単な方法は、Excelファイルの内容をコピーしてメモ帳に貼り付けることです。

于 2015-02-25T10:36:12.303 に答える
1

代わりに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
于 2020-03-11T06:39:24.830 に答える
0

PRNソリューションは、セル内の単純なデータに対してのみ機能します。私にとっては、200文字のセルから最初の6つの記号のみを切り取ります。

これらはExcel2007-2016の主なファイル形式です。注:Excel for Macでは、値は+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)

XlFileFormatFileFormatプロパティから

SaveAsメソッドの他のFileFormatNumbersを覚えておいてください:

FileExtStr = ".csv": FileFormatNum = 6
FileExtStr = ".txt": FileFormatNum = -4158
FileExtStr = ".prn": FileFormatNum = 36
于 2018-06-06T11:19:49.193 に答える