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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2020, 05:36   #1
Romancobran
Пользователь
 
Регистрация: 10.04.2020
Сообщений: 23
По умолчанию Склейка файлов сырой отчётности через cmd: copy *.csv 1.csv

Всем привет. В последнее время я с неистовым интересом стремлюсь к упрощению и автоматизации отчётности в формате Excel с целью экономии моего времени, так и времени других пользователей этих отчётов, которые с Excel на "вы".
Есть один из таких этапов автоматизации : создаётся .vbs отрабатывающий команды в cmd для склейки нескольких файлов сырого отчёта, а именно команда copy *.csv 1.csv , но здесь есть одна проблема. При использовании вышеупомянутой процедуры copy , например, два файла .csv склеиваются в один, сохраняя данные по столбцам друг под дружкой , учитывая что порядок столбцов одинаковый. Но вот незадача - у каждого из файлов одинаковое n-ное кол-во стобцов, содержащих данные и названия этих столбцов. Как только два файла склеиваются в один, в конечном файле идёт информация первого документа, после того, как она закончится, начинается информация второго документа, а между инфой 1го и 2го есть некий шов, который мне мешает. Шов - это повторно дублирующиеся названия столбцов, которые закономерно переносятся из файла2, в то время, как из файла1 в первых ячейках этих столбцов эта информация уже имеется и дублировать ее мне не нужно, потому что данные должны идти сплошняком. Надеюсь понятно выразился. Если нет, вот элементарный пример.
Файл1 содержит столбец с названием "фрукты" , в ячейках которого идут перечисления (названия фруктов ) , н-р банан, яблоко, персик.
Файл2 содержит почти тоже самое, столбец "фрукты" , но уже с другой информацией в ячейках, н-р нектарин, груша, киви .
Таким образом сшивая два этих файла у меня получается
Фрукты
Банан
Яблоко
Персик
Фрукты
Нектарин
Груша
Киви

Думаю, теперь понятнее некуда
Вопрос: как сделать так, чтобы название столбца "фрукты" не дублировались?


Заранее спасибо откликнувшимся, очень поможете своими советами
Romancobran вне форума Ответить с цитированием
Старый 10.04.2020, 08:45   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Встроенная возможность Екселя - консолидировать, не помогает без vbs сводить таблицы?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 10.04.2020, 08:56   #3
Romancobran
Пользователь
 
Регистрация: 10.04.2020
Сообщений: 23
По умолчанию

[QUOTE=Aleksandr H.;1813002]Встроенная возможность Екселя - консолидировать, не помогает без vbs сводить таблицы?[/QUOTE
Помогает,но это сложно для человека, кто не разбирается. К тому же, если пользоваться встроенным функционалом, то можно механически сделать ctrl+c Ctrl+v нужные данные из одного отчёта в другой, от чего теряется суть задуманного мною процесса, когда человек просто запускает vbs
Romancobran вне форума Ответить с цитированием
Старый 10.04.2020, 09:58   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

https://www.experts-exchange.com/que...ve-header.html
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 10.04.2020, 12:00   #5
Romancobran
Пользователь
 
Регистрация: 10.04.2020
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
О,классный сайт! Спасибо. Если есть время, можете указать на рабочий вариант из всех комментаторов ?) Если нет - потыкаюсь сам , попробую все.
Но все равно спасибо, уже неплохо )
Romancobran вне форума Ответить с цитированием
Старый 10.04.2020, 13:22   #6
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 953
По умолчанию

наверняка возможна простейшая программа посредник

считывающая 1.csv
и сразу пишущая 1a.csv
без лишних повторяющихся данных как текст

и заодно думаю реально очистить итоговый csv

плюс есть функции склейки файлов
в файловых менеджерах вида total commander
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую
сфинкс вне форума Ответить с цитированием
Старый 10.04.2020, 17:36   #7
Romancobran
Пользователь
 
Регистрация: 10.04.2020
Сообщений: 23
По умолчанию

Цитата:
Сообщение от сфинкс Посмотреть сообщение
наверняка возможна простейшая программа посредник
и сразу пишущая 1a.csv
без лишних повторяющихся данных как текст

и заодно думаю реально очистить итоговый csv

плюс есть функции склейки файлов
в файловых менеджерах вида total commander
Вполне. Вот только, как я уже говорил, я хлебушек ьв программировании , ну знаю чуть-чуть SQL, ну vba Python c++ могу читать код, но не более того )) так что, как такую прогу написать, как говорится - я хз )
Romancobran вне форума Ответить с цитированием
Старый 10.04.2020, 18:01   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Там по ссылке предпоследний вариант вроде хорош, только нужно нарастить указание куда писать.

Вот работает, но результирующего файла изначально не должно быть:
Код:
    temp_path = "c:\Downloads\test\"
    Output_file_path = "c:\Downloads\test\Out\Output.csv"

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    If objFSO.FileExists(Output_file_path) = False Then
        objFSO.CreateTextFile (Output_file_path)
    End If

    Set objOutput = objFSO.OpenTextFile(Output_file_path, 8)

    blnHeaderWritten = False
    For Each objFile In objFSO.GetFolder(temp_path).Files
        Set objInput = objFSO.OpenTextFile(objFile.Path, 1, False)
        If blnHeaderWritten = False Then
            objOutput.WriteLine objInput.ReadAll
            blnHeaderWritten = True
        Else
            objInput.SkipLine
            objOutput.WriteLine objInput.ReadAll
        End If
    Next
P.S. правда обычно в файлах наличествует последняя пустая строка - этот код эту строку в результате оставляет. Но у Вас была только одна проблема
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 10.04.2020 в 18:25.
Hugo121 вне форума Ответить с цитированием
Старый 12.04.2020, 10:36   #9
Romancobran
Пользователь
 
Регистрация: 10.04.2020
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Там по ссылке предпоследний вариант вроде хорош, только нужно нарастить указание куда писать.

Вот работает, но результирующего файла изначально не должно быть:
Код:
    temp_path = "c:\Downloads\test\"
    Output_file_path = "c:\Downloads\test\Out\Output.csv"

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    If objFSO.FileExists(Output_file_path) = False Then
        objFSO.CreateTextFile (Output_file_path)
    End If

    Set objOutput = objFSO.OpenTextFile(Output_file_path, 8)

    blnHeaderWritten = False
    For Each objFile In objFSO.GetFolder(temp_path).Files
        Set objInput = objFSO.OpenTextFile(objFile.Path, 1, False)
        If blnHeaderWritten = False Then
            objOutput.WriteLine objInput.ReadAll
            blnHeaderWritten = True
        Else
            objInput.SkipLine
            objOutput.WriteLine objInput.ReadAll
        End If
    Next
P.S. правда обычно в файлах наличествует последняя пустая строка - этот код эту строку в результате оставляет. Но у Вас была только одна проблема
Неа, не работает. почему на путь ругается не пойму(
Есть идеи?))
Изображения
Тип файла: gif ошибка1.GIF (58.4 Кб, 0 просмотров)
Romancobran вне форума Ответить с цитированием
Старый 12.04.2020, 11:05   #10
Romancobran
Пользователь
 
Регистрация: 10.04.2020
Сообщений: 23
По умолчанию

Есть прогресс! Файл создается, но скрипт отрабатывает с ошибкой.
И в файл output пустой (
Изображения
Тип файла: gif ошибка1.GIF (85.2 Кб, 1 просмотров)
Romancobran вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Склейка скрипта vbs с другой adninistraotr Безопасность, Шифрование 0 26.02.2020 18:55
Склейка таблиц Varabei SQL, базы данных 5 26.01.2015 13:01
Склейка страниц .htaccess Дима я PHP 0 24.05.2014 13:25
.htaccess склейка адресов hon PHP 0 03.04.2013 22:46
Связь с кучей dbf файлов (таблиц) через OLEDB через UNION ALL Sasha811 SQL, базы данных 0 01.01.2009 14:04