我有一个Excel工作表,在A列中有许多包含特殊字符的单元格。当我将该工作表保存为.txt格式时,每行开头会出现引号。我尝试了手动和宏方式保存文件为.txt格式,但问题依旧存在。为什么会这样?如何去除它们?
我无法删除这些引号。
附上一张图片
我有一个Excel工作表,在A列中有许多包含特殊字符的单元格。当我将该工作表保存为.txt格式时,每行开头会出现引号。我尝试了手动和宏方式保存文件为.txt格式,但问题依旧存在。为什么会这样?如何去除它们?
我无法删除这些引号。
附上一张图片
我看到这个问题已经得到了回答,但是想提供一个替代方案,以防后来的某个人发现它有用。
根据所需的分隔符,可以不编写任何代码实现这一点。原始问题没有给出所需输出类型的详细信息,但是这里有一个替代方案:
最简单的选择是将文件保存为“格式化文本(空格分隔)”类型。VBA 代码行类似于此:
ActiveWorkbook.SaveAs FileName:=myFileName, FileFormat:=xlTextPrinter, CreateBackup:=False
在Excel 2007中,这将令文件名末尾带有annoyingly的.prn文件扩展名,但可以通过手动重命名更改为.txt。
在Excel 2010中,您可以在另存为对话框中指定任何文件扩展名。
需要注意的一点是:文本文件中使用的分隔符数量与Excel列的宽度有关。
观察:
变成:
这段代码能实现您所需的功能。
逻辑
""
替换为空格,并写入新文件。代码
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
快照
实际工作簿
保存后
With New FileSystemObject If .FileExists(yourFilePath) Then .DeleteFile yourFilepath End If End With
- ekkisKill tmpFile
命令来删除该文件,OERN @ekkis。 - Siddharth Rout你可以尝试以下步骤:
复制你的单元格。
打开记事本。
粘贴。
注意没有引号、没有反引号,并保留特殊字符,这正是OP所要求的。 它也由回车符分隔,就像OP没有将其列为不好的事情(或好的事情)一样。
我真的不确定为什么一个简单的答案,可以提供所需的结果,会给我带来负面评价。
我刚刚花了一整个下午来完成这个任务。
写入文件有两种常见的方法,第一种是直接访问文件的"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
结束函数
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)
记住其他 SaveAs 方法 的文件格式编号:
FileExtStr = ".csv": FileFormatNum = 6
FileExtStr = ".txt": FileFormatNum = -4158
FileExtStr = ".prn": FileFormatNum = 36