Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2010, 01:03   #1
drNabla
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 87
По умолчанию сохранить в файл *.txt

Можно ли из листа EXCEL сохранить заранее заданные массивы данных в разные файлы *.txt при этом задавая название отдельному файлу (один выделенный массив - один файл, два выделенных массива - два файла). Если возможно то не могли бы подсказать как.

Заранее спасибо.
drNabla вне форума Ответить с цитированием
Старый 20.05.2010, 18:44   #2
0mega
Форумчанин
 
Регистрация: 12.09.2009
Сообщений: 232
По умолчанию

Возможно местные Гуру меня поправят, но я думаю что Еxcel и txt имеют разные форматы расширения.
Желаемого результата можно добиться "ручным приводом". Вверху, слева устанавливаете курсор, топнуть левой мышкой и протянуть по диагонали.
Потом CTRL+C. Открываете текстовый документ и пользутесь двумя волшебными клавишами CTRL+V
0mega вне форума Ответить с цитированием
Старый 20.05.2010, 18:59   #3
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

А в каком формате вам нужно сохранить, то есть, что и в каком виде должно быть в файле? Подробнее бы написали... Если с разделителями в виде пробелов, запятых или табов, то это можно в csv сохранить.
motorway вне форума Ответить с цитированием
Старый 20.05.2010, 22:44   #4
drNabla
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 87
По умолчанию

Ctrl-C совсем не подходит))) я конечно неопытный юзер, но не настолько) просто очень много файлов (больше 100 и ещё ожидается постоянное пополнение) и ручками, как то много времени уходит, хотелось бы побыстрее...
а подробности, вот - нужная область: столбец из 191 значения, причём не с первого ряда а в середине листа, и нужно получить тоже столбец, и сохранить надо строго в txt... и ещё на одном листе несколько таких столбцов которые надо сохранить каждый в отдельном txt файле, и желательно под задаваемыми именами файла. Вот как то так, я объясняю плохо, так что если кто-то может помочь но не понимает что всётаки надо спрашивайте, постараюсь объяснить ещё подробнее или прислать исходный файл и ожидаемый результат...

Заранее спасибо.
drNabla вне форума Ответить с цитированием
Старый 20.05.2010, 23:05   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
или прислать исходный файл и ожидаемый результат...
Вот с этого и надо было начинать - давно бы получили готовый код...

К примеру, выделяете экспортируемый диапазон желтым цветом, и в описании задачи пишете: "желтый столбец созраняем в файл 123.txt, красный столбец - в файл 345.txt" ...

Ну и опишите, как формировать названия для текстовых файлов.
EducatedFool вне форума Ответить с цитированием
Старый 21.05.2010, 17:04   #6
drNabla
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 87
По умолчанию

Хорошо, высылаю, и жду ответов)
В архиве пример как и исходного файла так и примера того что надо получить, ещё вложил описание того что хочется получить.

Заранее спасибо.
Вложения
Тип файла: zip пример.zip (29.8 Кб, 34 просмотров)
drNabla вне форума Ответить с цитированием
Старый 21.05.2010, 17:41   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Если програма будет сама автоматически менять названия *.txt файла это былобы прост супер
Конечно, программа сама назовёт файлы так, как вам надо, но...

Цитата:
Исходный файл EXCEL будет иметь название "nameij" где name - имя испытуемого (меняется из раза к разу); i,j - номер состояний(также меняются от раза к разу)
Где примеры названий файлов?
Если имя файла Excel будет иметь вид Имя-1-23.xls или Имя 12_3.xls - тогда всё понятно (как получить name, i, j)
Но если имя будет иметь вид текст123текст323текст.xls - тут совсем непонятно, как разбить строку "текст123текст323текст" на составляющие name, i, j


Цитата:
слиб можно было выбирать какие файлы надо сохронять
(допустим не все шесть а только первый и второй, или пятый шестой)
Не считаю целесообразным.
Поскольку все файлы окажутся в специально созданной для этого папке, - проще будет вам потом удалить ненужные файлы, чем выбирать нужные в диалоговом окне (сделать которое сложнее, чем выгрузку в в TXT)

Цитата:
Жёлтый столбец сохраняется в файл namei.txt
красный - namej.txt
зелёный - name(j-i).txt
А как макрос должен искать эти столбцы на листе?

Правильным ли будет такой алгоритм?
1) в столбце А ищем ячейку со словом РЕЗУЛЬТАТЫ
2) спускаемся вниз на 2 строки, и в этой строке ищем ячейки "состояние 1 ОК","состояние 2 ОК","крос 2-1"
3) столбцы, в которых мы нашли указанные слова, и выгружаются в TXT

Или можно сделать проще:
1) номера выгружаемых столбцов нам известны, и не меняются
2) диапазон определяем так: берем последнюю заполненную ячейку в столбце А, и поднимаемся вверх, пока не найдём пустую ячейку
(аналогично для других столбцов)

PS: неужели нельзя было объяснить подробнее - я бы уже успел написать макрос, а сейчас приходится выяснять всякие нюансы...

Последний раз редактировалось EducatedFool; 21.05.2010 в 17:51.
EducatedFool вне форума Ответить с цитированием
Старый 22.05.2010, 15:48   #8
drNabla
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 87
По умолчанию

Я ж говорю у меня проблемы с объяснением чего либо кому либо, это серьёзно и я от этого страдаю...
Так теперь отвечаю на вопросы:
1. Имя файла будет иметь вид имя_1_1 к примеру (всё разделено _)
2.хорошо, пусть сохраняет всё, я имел в виду что иногда будет не шесть нужных столбцов а только три, и не будет ли потом проблем, или это не имеет значения?
3.Расположение искомых столбцов - они всегда зафиксированы и будут располагаться одинаково, и идея с поиском последнего заполненной ячейки наверно самая оптимальная.

Вот вроде всё.
drNabla вне форума Ответить с цитированием
Старый 22.05.2010, 16:23   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот весь код:

Код:
Sub main()
    On Error Resume Next
    имяфайла = Split(ThisWorkbook.Name, ".")(0) ' имя файла без расширения
    arr = Split(имяфайла, "_") ' разбиваем на 3 части
    
    ПапкаДляТекстовыхФайлов = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "TXT\")    ' папка будет называться "TXT"
    ' или так - с указанием даты
    ПапкаДляТекстовыхФайлов = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "TXT " & Format(Now, "DD-MM-YYYY HH-NN-SS") & "\")
    MkDir ПапкаДляТекстовыхФайлов    ' создаём папку

    ' формируем 6 текстовых файлов
    СохранитьТекстовыйФайл 1, ПапкаДляТекстовыхФайлов & arr(0) & arr(1) & ".txt"
    СохранитьТекстовыйФайл 3, ПапкаДляТекстовыхФайлов & arr(0) & arr(2) & ".txt"
    СохранитьТекстовыйФайл 11, ПапкаДляТекстовыхФайлов & arr(0) & "(" & arr(2) & "-" & arr(1) & ")" & ".txt"
    СохранитьТекстовыйФайл 16, ПапкаДляТекстовыхФайлов & "pc" & arr(0) & arr(1) & ".txt"
    СохранитьТекстовыйФайл 18, ПапкаДляТекстовыхФайлов & "pc" & arr(0) & arr(2) & ".txt"
    СохранитьТекстовыйФайл 26, ПапкаДляТекстовыхФайлов & "pc" & arr(0) & "(" & arr(2) & "-" & arr(1) & ")" & ".txt"
End Sub

Sub СохранитьТекстовыйФайл(ByVal col As Long, ByVal filename As String)
    Dim cell As Range, ra As Range
    Set ra = Range(Cells(Rows.Count, col).End(xlUp), Cells(Rows.Count, col).End(xlUp).End(xlUp))
    ' если надо точные значения из ячеек
    txt = Join(Application.WorksheetFunction.Transpose(ra.Value), vbNewLine)
    ' или так, если нужны округлённые
    txt = "": For Each cell In ra.Cells: txt = txt & vbNewLine & cell.Text: Next cell
    txt = Mid(txt, 3)
    On Error Resume Next: Err.Clear
    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.CreateTextFile(filename, True) ' создаём текстовый файл
    ts.Write txt: ts.Close
    Set ts = Nothing: Set fso = Nothing
End Sub
Пример в файле:

EducatedFool вне форума Ответить с цитированием
Старый 22.05.2010, 17:05   #10
drNabla
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 87
По умолчанию

спасибо за помощь) вроде всё работает как надо) щас буду разбираться.

Не могли бы посмотреть вот ещё тему, вдруг что-то получится http://programmersforum.ru/showthread.php?t=98657
drNabla вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранить StringGrid в txt Alinka27 Помощь студентам 9 07.05.2010 12:23
Сохранить excel в txt kain151 Microsoft Office Excel 2 26.03.2010 22:08
как сохранить строчки в TXT файл Ярослав Помощь студентам 2 17.05.2008 18:43
Как прочесть txt файл www.site.ru/info.txt BR17UY Работа с сетью в Delphi 1 16.04.2007 13:01
сохранить код страницы в txt файл на компьютере DimkinStd Общие вопросы Delphi 8 28.01.2007 17:15