У меня есть лист excel, который имеет данные в столбце A. В ячейках много специальных символов. Когда я сохраняю лист в формате .txt, я получаю кавычки в начале каждой строки. Я попробовал как вручную, так и макрос, сохраняя файл в формате .txt. Почему это так? Как их удалить? Я не могу удалить кавычки . Присоединение рисунка
Сохранение файла Excel в формате .txt без кавычек
Ответ 1
Попробуйте этот код. Это делает то, что вы хотите.
LOGIC
- Сохранить файл в виде файла с разделителями табуляции в каталоге временных файлов
- Прочитайте текстовый файл за 1 проход
- Заменить
""
пробелами и записать в новый файл одновременно.
КОД (ИСПЫТАНИЕ И ИСПЫТАНИЕ)
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
Актуальная рабочая книга
После сохранения
Ответ 2
Я вижу, что на этот вопрос уже дан ответ, но он хотел предложить альтернативу, если кто-то еще это обнаружит позже.
В зависимости от требуемого разделителя это можно сделать без написания кода. В исходном вопросе не приводится подробная информация о желаемом типе вывода, но здесь есть альтернатива:
Тип файла PRN
Самый простой вариант - сохранить файл в виде типа "Отформатированный текст (ограниченный пространством)". Кодовая строка VBA будет выглядеть примерно так:
ActiveWorkbook.SaveAs FileName:=myFileName, FileFormat:=xlTextPrinter, CreateBackup:=False
В Excel 2007 это будет досадно помещать расширение .prn в конец имени файла, но его можно изменить на .txt, переименовав вручную.
В Excel 2010 вы можете указать любое расширение файла, которое вы хотите в диалоговом окне "Сохранить как".
Важно отметить: количество разделителей, используемых в текстовом файле, связано с шириной столбца Excel.
Заметим:
становится:
Ответ 3
Ummm, Как насчет этого.
Скопируйте свои ячейки.
Откройте Блокнот.
Paste.
Посмотрите кавычки, не перевернутые запятые и сохраните специальные символы , о которых попросил ОП. Его также обозначают возвратом каретки, так же как и прикрепленная пиктограмма, которую OP не упоминал как плохая вещь (или хорошая вещь).
Не уверен, почему простой ответ, который дает желаемые результаты, получает отрицательную оценку.
Ответ 4
Я просто провел большую часть дня на этом
Существует два распространенных способа записи в файл, первый из которых - это прямой запрос на запись в файл. Это добавляет кавычки.
Во-вторых, это "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
Конечная функция
Ответ 5
У меня такая же проблема: я должен сделать конкретный .txt файл для банковских платежей из файла excel. Файл .txt не должен делиться каким-либо символом, поскольку для каждого стандартного значения требуется определенное количество запятых. Самый простой способ сделать это - скопировать contect файла excel и вставить его в блокнот.