У меня есть лист Excel с данными в столбце A. В ячейках много специальных символов. Когда я сохраняю лист в формате .txt, я получаю кавычки в начале каждой строки. Я пробовал как вручную, так и с помощью макроса сохранить файл в формате .txt, почему это так? Как их убрать? Я не могу удалить цитаты. Прикрепление рисунка
Сохранение файла Excel в формате .txt без кавычек
Ответы (8)
Попробуйте этот код. Делай то, что хочешь.
ЛОГИКА
- Сохраните файл как файл с разделителями табуляции во временном каталоге пользователя.
- Прочтите текстовый файл за один раз
- Замените
""
пробелами и одновременно запишите в новый файл.
КОД (ИСПЫТАН И ИСПЫТАН)
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
- person ekkis; 14.05.2015
Kill tmpFile
с OERN @ekkis
- person Siddharth Rout; 14.05.2015
vb6 remove last blank line from text file
в Google
- person Siddharth Rout; 13.08.2015
Я вижу, что на этот вопрос уже дан ответ, но я хотел предложить альтернативу на случай, если кто-то еще найдет это позже.
В зависимости от необходимого разделителя это можно сделать без написания кода. Исходный вопрос не дает подробностей о желаемом типе вывода, но вот альтернатива:
Тип файла PRN
Самый простой вариант - сохранить файл как «Форматированный текст (с разделителями-пробелами)». Строка кода VBA будет выглядеть примерно так:
ActiveWorkbook.SaveAs FileName:=myFileName, FileFormat:=xlTextPrinter, CreateBackup:=False
В Excel 2007 это приведет к раздражающему добавлению расширения файла .prn в конце имени файла, но его можно изменить на .txt, переименовав вручную.
В Excel 2010 вы можете указать любое расширение файла в диалоговом окне «Сохранить как».
Обратите внимание на одну важную вещь: количество разделителей, используемых в текстовом файле, зависит от ширины столбца Excel.
Наблюдать:
Становится:
Эммм, как насчет этого.
Скопируйте ячейки.
Откройте Блокнот.
Вставьте.
Не ищите кавычек, кавычек и запятых, а также сохраните специальные символы, это то, что запрашивал OP. Это также обозначено возвратом каретки, как и прикрепленный рисунок, который OP не упомянул как плохой вещь (или хорошая вещь).
Не совсем уверен, почему простой ответ, который дает желаемые результаты, дает мне отрицательную оценку.
Я просто потратил на это большую часть дня
Есть два распространенных способа записи в файл, первый из которых - это оператор записи прямого доступа к файлу. Это добавляет кавычки.
Второй - 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
Конечная функция
ответ от этот вопрос дает гораздо более простой ответ на этот вопрос.
Запись - это специальный оператор, предназначенный для создания машиночитаемых файлов, которые позже используются с Вводом.
Используйте Печать, чтобы не возиться с данными.
Спасибо пользователю GSerg
У меня та же проблема: мне нужно сделать специальный файл .txt для банковских платежей из файла excel. Файл .txt не должен быть разделен какими-либо символами, потому что стандарт требует определенного количества запятых после каждого обязательного поля. Самый простой способ сделать это - скопировать контекст файла Excel и вставить его в блокнот.
Я использовал Write # 1 «Print my Line» вместо этого я попробовал Print # 1, «Print my Line», и он дал мне все данные без кавычек по умолчанию (")
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 работает только для простых данных в ячейках, для меня оно вырезает только первые 6 знаков из 200-символьной ячейки.
Это основные форматы файлов в Excel 2007-2016. Примечание. В Excel для 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
Помните о других FileFormatNumbers для метода SaveAs:
FileExtStr = ".csv": FileFormatNum = 6
FileExtStr = ".txt": FileFormatNum = -4158
FileExtStr = ".prn": FileFormatNum = 36