При экспорте листа эксель в текстовый файл с разделителями табуляцией (нужно только так) происходит бардак. Большая часть значений получается в кавычках. Экспорт делаю с помощью простого макроса (два макроса точнее, текущий лист и все листы книги). При экспорте файла вручную "Сохранить как..." этого нет. Непонятно что это такое. Этот текстовый файл потом как база данных для другой программы используется, и наличие кавычек нежелательно, а побороть не могу эту напасть. И форматирование удалял и чего только не пытался сделать... самое непонятное, что некоторые значения без кавычек получаются, системы никакой не заметил, почему так, верней вроде есть, где есть запятая, там запись берётся в кавычки, НО при тех же самых условиях, но с сохранением в ручную, нет этих кавычек! (пробовал писать процесс сохранения макрорекордером, в файле нет кавычек, после запуска записанного макроса есть кавычки) Может кто знает откуда это всё берётся? Файл Экселя (исходник) и текстовый файл прилагаю.
Спасибо, работает. Региональные настройки оказывается виноваты , нда... Теперь другая забота, программа которая потом считывает базу данных, в качестве разделителя десятичной дроби запятую не принимает . Принудительная замена запятой на точку, перед сохранением, эффекта не даёт, в цифрах всё равно запятая в текстовом файле. Всё равно не понятно, почему при ручном сохранении всё пучком (все запятые на месте, кавычек нет, точки взамен запятых в цифрах появляются) а макросом где нибудь да подковырка. С такими делами придётся удалять из текстового файла кавычки вручную, но из 10+ файлов (у меня их уже около 50) ну очень муторное занятие... в добавок эти базы планируется обновлять частенько, не дело однако это.
For Each s In wb.Worksheets 'проходим во всем листам активной книги
s.Copy
With ActiveSheet.UsedRange.Columns(1)
.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End With
'сохраняем лист как новый файл
ActiveWorkbook.SaveAs wb.Path & "\" & s.Name & ".txt", FileFormat:=xlText, _
CreateBackup:=False, local:=True 'сохраняем файл
ActiveWorkbook.Close
Next
'cols номера столбцов (нумерация с 1) в диапазоне, в которых требуется
'заменить запятую на точку
'Пример
'Export1 ActiveSheet.UsedRange, "c:\temp\1.txt", 2, 3
Public Sub Export1(ByVal this As Range, ByVal FileName As String, ParamArray cols())
Dim pDict As Object, iCol As Long, iRow As Long, sItem As String
Dim fNum As Integer, vData As Variant, sOut As String, isFirst As Boolean
Set pDict = CreateObject("Scripting.Dictionary")
For iCol = LBound(cols) To UBound(cols)
pDict.Add cols(iCol), Empty
Next
vData = this.Value
fNum = FreeFile
Open FileName For Output As #fNum
If pDict.Exists(1) Then
isFirst = True
Else
isFirst = False
End If
For iRow = 1 To UBound(vData, 1)
sOut = vData(iRow, 1)
If isFirst Then sOut = Replace$(sOut, ",", ".")
For iCol = 2 To UBound(vData, 2)
sItem = vData(iRow, iCol)
If pDict.Exists(iCol) Then sItem = Replace$(sItem, ",", ".")
sOut = sOut & vbTab & sItem
Next
Print #fNum, sOut
Next
Close #fNum
End Sub
Здравствуйте все! Я сейчас как раз интересуюсь точно этой же темой. Скопировал макрос, но в тхт-шном файле (при импорте из экселя текстовой информации) появляются кавычки и запятые после каждой импортированной ячейки. Подскажите, пожалуйста, как сделать так чтоб не было кавычек?
В VB 2003 "без затей" форматы: 1. Текстовые файлы (с разделителями табуляции) (*.TXT) 2. Текст Юникод (*.TXT) распрекрасно-хорошо делают все, что Вам нужно. P.S. Предварительно в макросе в нужных Вам столбах:
MaksExcel, не могли бы вы приложить пример файла, что-то с трудом верится, что код добавляет кавычки. Или в вашем файле присутствуют кавычки в текстовых значениях ячеек?
У меня вся фишка в том была, что в значениях должны были быть и запятые и точки. При разных вариантах имеем или все точки, или где были запятые кавычки. В общем бардак. куда это всё потом вставляется тупо не умеет считать цифры с запятыми. Т.е. Имеем наименование (марку) КСПВ-3х2,5 именно так и должно быть написано в последующей спецификации, но для того чтоб посчитать падение напряжения на скажем 10 м кабеля, нам надо уже чтоб попало в этот же файл не 2,5 а 2.5 (много разных значений ещё, масса, удельное сопротивление и т.д), намучился в общем, следующая программа иногда просто переставала воспринимать файлы текстовые, структура ломалась. Плюнул в общем на это безобразие, с кавычками экспортировал, а потом средствами следующей программы программы убираю кавычки и всё в красивом виде куда надо ставится (пришлось правдо дополнительную переменную мудрить), и считает всё нормально. Ещё фишку экселя заметил при конвертации, если внутри одной ячейки был сделан принудительный перенос, то туда тоже кавычка вставляется, вся база конкретно лететь начинает...
MaksExcel! Ваши строчки: Если 1.5 то 2 до состояния 3 и еще прицепим текст АЛЬФА; Если 2.5 то 2 до состояния 3 и еще прицепим текст АЛЬФА; Если 0.5 то 2 до состояния 3 и еще прицепим текст АЛЬФА; - формулы. Если Вы вместо формул с помощью специальной вставки вставите значения "из-под" этих формул, у Вас все будет распрекрасно-хорошо.
Мотя, здравствуйте! Мне неловко сказать, но, возможно, я не понял что Вы имели в виду... Вставить содержимое ячеек А5:А7 как текст в другие ячейки и экспортировать их? Если это, то увы, результат тот же. Пожалуй мне всё же стоит уточнить смысл сего действия: 1. есть программа, которая передает значения в эксель, 2. эксель проводит манипуляции с полученными значениями и выдает результат в виде текста и значений (через формулу "=сцепить(...)" и 3. экспортирует в тхт, 4. которого уже читает первоначальная программа-экспортер. Я стремлюсь максимально автоматизировать этот процесс, чтоб не отвлекаться на него постоянно. Соответственно ручное копирование сведет на нет весь смысл. Да и лишние знаки, к сожалению, остаются...
P.S. Да и вот еще. Офис у меня 2010. Не знаю имеет ли это значение, но мало ли...
Мотя, спасибо!! Кавычки ушли, запятых в конце строк нет, работает! Остались 2 момента: злополучные кавычки появляются если экспортируется дробное число; и между строками в тхт добавляется пустая строка. Но я, надеюсь, это не критично. Завтра протестирую - отпишусь.
Здравствуйте, уважаемые участники! Мотя, благодарю Вас за отличное решение! Оно работает абсолютно верно! Прога, считывающая тхт файл восприняла его как родного! Не нахожу раздел типа "Репутация", иначе плюсанул бы Вам от души. Спасибо большое!
P.S. Вопрос администратору: для того чтоб попросить зациклить макрос или запускать по расписанию (я пока не решил) - мне лучше создать новую тему или продолжить можно здесь?