16

我有一个 Excel 表格,其中 A 列中有数据。单元格中有许多特殊字符。当我以 .txt 格式保存表格时,我在每行的开头都得到了逗号。我尝试手动和通过宏将文件保存为 .txt 格式。为什么会这样?如何删除它们?我无法删除引号。 附上一张照片在此处输入图像描述

4

8 回答 8

17

我看到这个问题已经得到解答,但想提供一个替代方案,以防其他人稍后发现。

根据所需的分隔符,可以在不编写任何代码的情况下执行此操作。原始问题未提供有关所需输出类型的详细信息,但这是另一种选择:

PRN 文件类型

最简单的选择是将文件保存为“格式化文本(空格分隔)”类型。VBA 代码行类似于以下内容:

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

在 Excel 2007 中,这会令人讨厌地在文件名末尾添加 .prn 文件扩展名,但可以通过手动重命名将其更改为 .txt。

在 Excel 2010 中,您可以在“另存为”对话框中指定所需的任何文件扩展名。

需要注意的重要一点:文本文件中使用的分隔符数量与 Excel 列的宽度有关。

观察:

Excel 截图

变成:

文字截图

于 2012-07-26T02:36:02.020 回答
12

这段代码做你想做的事。

逻辑

  1. 将文件另存为用户临时目录中的制表符分隔文件
  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

快照

实际工作簿

在此处输入图像描述

保存后

在此处输入图像描述

于 2012-07-16T12:31:04.493 回答
8

嗯,这个怎么样。

复制你的单元格。
打开记事本。
粘贴。

看没有引号,没有引号,并保留特殊字符,这是 OP 要求的。它也由回车描述,与 OP 没有提到的坏事(或好事)所附图片相同。

不太清楚为什么一个简单的答案,提供了预期的结果,给我一个负面的分数。

于 2014-03-19T19:57:12.237 回答
2

我刚刚花了一个下午的大部分时间在这上面

有两种常见的写入文件的方式,第一种是直接文件访问“write”语句。这会添加引号。

第二个是“ActiveWorkbook.SaveAs”或“ActiveWorksheet.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

结束功能

于 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 个符号。

这些是 Excel 2007-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)

来自XlFileFormat FileFormat 属性

请记住SaveAs 方法的其他 FileFormatNumbers :

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