Профессиональные приемы работы в Microsoft Excel

Пожалуйста, войдите или зарегистрируйтесь.


Расширенный поиск  

Новости:

Новая редакция правил форума: 2.4. Если вопрос или ответ содержится во вложенном файле, все-равно кратко описывайте в сообщении вопрос или суть решения. Это необходимо, чтобы тему можно было найти через поиск.

Автор Тема: Формирование файла данных  (Прочитано 9153 раз)

0 Пользователей и 1 Гость просматривают эту тему.

soal soalov

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 41

Добрый день уважаемые специалисты по Excel. Прошу о помощи вот в таком вопросе:
есть 3 столбца с данными "код", "базовая цена", "дата" -соответственно столбцы А, В, С.
мне необходимо из этих данных сгенерировать текстовый файл данных в котором через запятую идут данные по строкам:
код1,базовая_цена1,дата1
код2,базовая_цена2,дата2
.....................................
кодN,базовая_ценаN,датаN

Как сгенерить такой файлик?

И еще подводные камни
цена = значение должно быть с точкой, без пробелов

дата= формат с точкой, год полностью

Помогите советом!
Записан
NULL

Алексей Шмуйлович

  • Ветеран
  • *****
  • Уважение: +31/-0
  • Оффлайн Оффлайн
  • Сообщений: 1 085
  • WORK SMARTER, NOT HARDER
Re: Формирование файла данных
« Ответ #1 : 22.02.2008, 15:11:31 »

Получить текстовый файл просто - меню Файл - Сохранить как - ормат csv.
По поводу правильного формата чисел и дат воможны 2 подхода. Либо подготовить данные в excel, например с помощью функциии ТЕКСТ(). Либо сохранить данные как есть, а потом открыть в Word и воспользоваться операцией Поиска-Замены.
Кстати еще вариант - использовать инструмент слияния Word
Записан

soal soalov

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 41
Re: Формирование файла данных
« Ответ #2 : 22.02.2008, 16:13:15 »

Благодарю за совет, но не подходит мне такой вариант решения.
Причины:
1. По-видимому из-за региональных стандартов формируется файлик с разделителем ";" вместо ",".
2. Мне нужно сгенерить текстовый файл не из всех данных которые присутсвуют в данной книге, потому как там целая система принятия решений, а мне надо сгенерить файлик именно по 3м столбцам - тобиш результат принятия решений.
Простыми средствами тут не отделаешься!
Заранее благодарен.
Записан
NULL

Алексей Шмуйлович

  • Ветеран
  • *****
  • Уважение: +31/-0
  • Оффлайн Оффлайн
  • Сообщений: 1 085
  • WORK SMARTER, NOT HARDER
Re: Формирование файла данных
« Ответ #3 : 22.02.2008, 16:49:07 »

Тогда последний вариант. Со слиянием никогда не работали? Пришлите примерчик во вложении.
Записан

Шпец Докапыч

  • Ветеран
  • *****
  • Уважение: +189/-4
  • Оффлайн Оффлайн
  • Сообщений: 1 919
  • ОБЛАДАТЕЛЬ УНИКАЛЬНЫХ НАВЫКОВ!!! :)
Re: Формирование файла данных
« Ответ #4 : 24.02.2008, 12:30:31 »

Простыми средствами тут не отделаешься!

Почему это? Совет Алексея вполне подходит:
=A2&","&ТЕКСТ(B2;"#.")&ОКРУГЛ((B2-ЦЕЛОЕ(B2))*100;0)&","&ТЕКСТ(C2;"дд.ММ.гггг")
…, а после перенести в текстовый файл 1) через буфер (проще всего); 2) через "сохранить как" (результат на чистом листе) текст Юникод (*.txt);  3) само слияние, первое и второе, экспорт и что угодно посредством VBA.
Записан
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

soal soalov

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 41
Re: Формирование файла данных
« Ответ #5 : 25.02.2008, 08:51:34 »

Спасибо за идею!
Но только у меня что то с форматом числа с точкой не получается (мне ж и десятичная часть нужна), т.е. 5,36 после применения =Текст(5,86;"#.") => "6."
По поводу текстового файла.
Я склоняюсь к процедуре формирования текстовика из VBA. Только я такого никогда не делал.
Может кто помочь мне в этом вопросе советом.
Из паскаля я помню это делалось примерно так

var f:TextFile - создать переменную файла
     
begin
if not fileexists("..\dat.txt") then createfile("..\dat.txt")
assignefile(f,"..\dat.txt") - связать с физическим файлом
Rewrite(f)                    - 
write(f,"bla-bla-bla")
write(f,"bla-bla-bla")
writeln(f) --переход на следующую строку
write(f,"bla-bla-bla")
closefile(f)
end

как делать в VBA я не в курсе. Кто-нить может подсказать?
Записан
NULL

Алексей Шмуйлович

  • Ветеран
  • *****
  • Уважение: +31/-0
  • Оффлайн Оффлайн
  • Сообщений: 1 085
  • WORK SMARTER, NOT HARDER
Re: Формирование файла данных
« Ответ #6 : 25.02.2008, 11:53:17 »

Sub OpenTextFileTest
    Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Dim fs, f
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.OpenTextFile("c:\testfile.txt", ForAppending,TristateFalse)
    f.Write "Hello world!"
    f.Close
End Sub

Записан

Алексей Шмуйлович

  • Ветеран
  • *****
  • Уважение: +31/-0
  • Оффлайн Оффлайн
  • Сообщений: 1 085
  • WORK SMARTER, NOT HARDER
Re: Формирование файла данных
« Ответ #7 : 25.02.2008, 12:02:39 »

А формат можно так получить:
=ПОДСТАВИТЬ(ТЕКСТ(D13;"0,00");",";".")
Записан

soal soalov

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 41
Re: Формирование файла данных
« Ответ #8 : 25.02.2008, 16:12:23 »

По поводу формата - то что надо!  :D
По поводу файла
скопировал сам пример "как есть" в модуль книги. Прогнал его клавишей F8, на строчке
"Set f = fs.OpenTextFile("d:\testfile.txt", ForAppending, TristateFalse)"
стопорится, пишет
Run-time error '5':
invalid procedure call or argument

Попробовал создать на D:\  файлик  "testfile.txt" - все равно та же бяка.
И еще (на будущее) при работе с файлом:
- как спозиционироваться на последнюю строчку в файле (в паскале была функция seek())
- как перейти на следующую строчку в файле (в паскале использовалось writeLN(), т.е. write дописывает символы в текушую строку, а writeLN дописывает символы в текущую строку и ставит символ конца строки - переходит на следующую строку)
-как проверить наличие файла (fileexists) и при отсутствии создать файл.

Извиняюсь за такие вопросы, но самому с хелпом разобраться тяжело.
Записан
NULL

Andrey Lenets

  • Старожил
  • ****
  • Уважение: +54/-1
  • Оффлайн Оффлайн
  • Сообщений: 556
Re: Формирование файла данных
« Ответ #9 : 25.02.2008, 16:59:08 »

По поводу файла
скопировал сам пример "как есть" в модуль книги. Прогнал его клавишей F8, на строчке
"Set f = fs.OpenTextFile("d:\testfile.txt", ForAppending, TristateFalse)"
стопорится, пишет
Run-time error '5':
invalid procedure call or argument

Попробовал создать на D:\  файлик  "testfile.txt" - все равно та же бяка.

а если так попробовать?

Sub OpenTextFileTest()
    Dim fs As Object, f As Object
    Set fs = CreateObject("Scripting.FileSystemObject")
    If fs.FileExists("c:\testfile.txt") = True Then
        Set f = fs.OpenTextFile("c:\testfile.txt", 8, 0)
    Else
        Set f = fs.CreateTextFile("c:\testfile.txt", False, False)
    End If
    f.WriteLine ("This is a test.")
    f.Close
End Sub
Записан

soal soalov

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 41
Re: Формирование файла данных
« Ответ #10 : 25.02.2008, 17:26:06 »

Цитировать
Sub OpenTextFileTest()
    Dim fs As Object, f As Object
    Set fs = CreateObject("Scripting.FileSystemObject")
    If fs.FileExists("c:\testfile.txt") = True Then
        Set f = fs.OpenTextFile("c:\testfile.txt", 8, 0)
    Else
        Set f = fs.CreateTextFile("c:\testfile.txt", False, False)
    End If
    f.WriteLine ("This is a test.")
    f.Close
End Sub

Мегапасибище!!! Работает как часы!
Один маленький комент по тексту программы
не обязательно писать
Цитировать
If fs.FileExists("c:\testfile.txt") = True Then...
достаточно будет написать

If fs.FileExists("c:\testfile.txt") Then...

и это будет работать. смысл работы оператора - если выражение возращает True - выполнять ветку Then. а fs.FileExists при наличии указанного файла и так выдаст True.
Прост такое написание выдает начинающих программеров. Только Вы пожалуйста не подумайте что я такой умный - мне эт один продвинутый программер полчаса разжевывал.
Премногоблагодарен!
Записан
NULL

soal soalov

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 41
Re: Формирование файла данных
« Ответ #11 : 25.02.2008, 17:39:12 »

И снова здравствуйте!  :D
Я с этим VBA вообще каши не сварю!
как открыть файл для перезаписи. мож кто знает?
по процедуре OpenTextFile файл открывается только для дозаписи в конец
Записан
NULL

soal soalov

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 41
Re: Формирование файла данных
« Ответ #12 : 25.02.2008, 17:50:33 »

Разобрался сам!
В конечном варианте нужный мне код выглядит вот так (файл открывается для перезаписи):

Sub OpenTextFileTest()
    Dim fs As Object, f As Object
    Set fs = CreateObject("Scripting.FileSystemObject")
    If fs.FileExists("c:\testfile.txt") = True Then
        Set f = fs.OpenTextFile("c:\testfile.txt", 2, -2)
    Else
        Set f = fs.CreateTextFile("c:\testfile.txt", False, False)
    End If
    f.WriteLine ("This is a test.")
    f.WriteLine ("This is a test1")
    f.WriteLine ("This is a test2")
    f.Close
End Sub

Большое всем спасибо за помощь!
Записан
NULL

Andrey Lenets

  • Старожил
  • ****
  • Уважение: +54/-1
  • Оффлайн Оффлайн
  • Сообщений: 556
Re: Формирование файла данных
« Ответ #13 : 25.02.2008, 17:54:19 »

И снова здравствуйте!  :D
Я с этим VBA вообще каши не сварю!
как открыть файл для перезаписи. мож кто знает?
по процедуре OpenTextFile файл открывается только для дозаписи в конец

для перезаписи можно юзать CreateTextFile - аргументы (имя файла, [true-перезапись])...
Записан
 



Темы без ответов

27.05.2022 14:38 конструкция из Shape на VBA на листе Excel 447
09.08.2019 14:09 Макрос для заполнения таблиц через форму 5280
18.07.2019 16:02 Рассылка почты из Excel при помощи почтовой программы TheBAT! 4646
07.02.2019 01:36 Как удалить дубликаты из выпадающего связанного списка? 6255
03.03.2018 00:00 Подсчет отработанного времени, за исключением заранее определенных перерывов 3335
23.05.2017 11:20 Копирование данных из одной таблицы в умную таблицу по условию 5161
15.03.2017 15:45 автозамена картинок PowerPoint 4062
11.03.2017 13:43 Изменить нумерацию страниц 4002
07.02.2017 18:43 Блокировка ячеек по наступлению даты 3132
28.08.2016 19:29 Одинаковые заголовки после обновления оглавления 3625





Яндекс цитирования msexcel.ru Яндекс.Метрика

Страница сгенерирована за 0.137 секунд. Запросов: 119.