Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] как внести коррективы в .xls файл используя .BAT

Ответить
Настройки темы
CMD/BAT - [решено] как внести коррективы в .xls файл используя .BAT

Аватара для Ka3hak

Новый участник


Сообщения: 33
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: Ka3hak
Дата: 17-12-2019
Вложения
Тип файла: zip normy_spisania_materialov.zip
(15.6 Kb, 6 просмотров)
День добрый Уважаемые знатоки, всеми нами любимого, супер-форума OSZone!
Уважаемый "Боженька кодеров" megaloman, ну и конечно же Iska, дорогие...
Излагаю суть:
1) Необходимо внести коррективы в .xls-файл по средствам .BAT, .CMD либо .VBS.
Лучше наверное будет .VBS, потому как на BAT-ники многие антивирусы попросту ругаются. А там, конечно же, на ваше усмотрение, Уважаемые.
Почему коррективы? Потому, как столбцы в .xls изначально размечены по ширине и присутствует некая шапка-заголовок.
Информация заносится "в строку", в каждую ячейку, (слева на право :D), как в текстовом, так и в числовом виде (зависит от типа столбца).
Для примера: (№3|Вася Пупкин|Мужчина|КрасаУчиГ|28|ЖиЕсть);
или: (12|текст|текст|текст|56|текст), в общем, что-то вроде того.
2) Возможно ли выполнить проверку на "пустоту строки"? Т.е. строки №1,№2,№3 уже заполнены Васей, Федей и Толиком, а нужна запись в №4 - как следствие.
Или, другими словами, "запись в близжайшую свободную строку",
что в конкретной задаче необходимо для последовательности:
#1
#2
#3
...


3) Есть ли возможность привязать вдовесок какую-нибудь формулу, например "произведение чисел" или ячеек?

P.S. Возможно я всё усложняю и "пункт 2)" можно реализовать как-то иначе. Например несколько BAT-ников(если на .BAT всё же пал выбор)
вносят коррективы в один ОСНОВНОЙ (пополня список Вась, Петь и т.д.), а тот уже одним махом внесёт все данные в .xls
Т.е. BAT1(№1), BAT2(№2), BAT(...) to>>> .BAT(основной)
(№1|текст|число|текст|)
(№2|текст|число|текст|)
to>>> .xls


Мне кажется, что так даже будет лучше. Но вот незадача! Снова проверка ближайших свободных "пустых строк"

Отправлено: 19:22, 16-12-2019

 

Аватара для Ka3hak

Новый участник


Сообщения: 33
Благодарности: 1

Профиль | Отправить PM | Цитировать


DJ Mogarych, спасибо Вам большое за вариант. Беру его на рассмотрение, в обязательном порядке.
Смущает только # Конвертация xls в xlsx. Дело в том, что разбор полётов происходит с файлом старого образца, Office 2003
Цитата Iska:
Избавляться надо от Excel »
И тут Вы правы. Солидарен. Но это не от меня зависит.
Цитата DJ Mogarych:
И максимумом геморроя для того, кто возьмётся это реализовывать. »
Есть такое.

Цитата megaloman:
Как максимум, можно предложить вносить исходные данные в Excel - таблицы, например - одно данное - одна книга созданная по бланку, со своим именем в определённой папке, »
Чувствуете этот запах? Запах жаренного мозга кажись... Не особо догнал о чём речь

Последний раз редактировалось Ka3hak, 18-12-2019 в 23:33.


Отправлено: 23:22, 18-12-2019 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Ka3hak

Новый участник


Сообщения: 33
Благодарности: 1

Профиль | Отправить PM | Цитировать


Господиии! Да как же всё сложно-то, а
Я понимаю, что задача из разряда - вырывание зуба через анальное отверстие. И было бы это просто - я бы к вам за помощью не обращался.
По-крайней мере, здесь я выяснил, что реализация задуманного невозможна по средствам BAT/CMD. А может VBS здесь тоже не поможет? Тогда скажите об этом прямо.
GUI+исполняемые скрипты - как вариант работы извне. Ну вот нету у меня Excel-я, к примеру... Соответственно нет макросов. Да вообще ничего нет! Что делать...?
Если я перефразирую задачу вплоть до самого минимума, это что-то изменит? Могу даже ещё один файл залить, для примера и точности описания текущей задачи. Хотя подойдёт и пустой.
Пример. Текущий файл имеет вид:
(строка:№1)\1(A1-числовая ячейка)\огонь(B1-текстовая ячейка)\45(С1-числовая ячейка)
(строка:№2)\2(A2-числовая ячейка)\вода(B2-текстовая ячейка)\86(С2-числовая ячейка)
...

Вопрос.
VBS скрипт вносит строку: (строка:№3)\3(A3-числовая ячейка)\медные трубы(B3-текстовая ячейка)\94(С3-числовая ячейка); т.к. строки:№1-2 заняты.
Если отсутствует (строка:№2\"вода"), то вносимая строка (строка:№3\"медные трубы") прописывается вместо неё, под №2. Если отсутствуют обе (№1,2), то под №1/
Могу поставит вопрос ещё проще. Мне даже нумерация не нужна, дело не в этом! Просто нужно избежать перезаписывания строк.
Вопрос.
Как, с помощью VBS записать текстовую и числовую информацию в ячейки A2(текстовая) и B2(числовая) - (строки:№2)(соответственно), если (строка:№1) уже занята?

Последний раз редактировалось Ka3hak, 19-12-2019 в 02:53.


Отправлено: 02:38, 19-12-2019 | #22


Старожил


Сообщения: 250
Благодарности: 51

Профиль | Отправить PM | Цитировать


Ka3hak, мне кажется вы еще не рассматриваете Хабр Фриланс - и мне не ясно почему ?
опишите задачу и вам ее сделают - а как тема для форума ваша задача черезчур узко специальна

ну кому может потребоваться заливать воду с огнем через медные трубы прописью в новую ячейку ?

Отправлено: 03:20, 19-12-2019 | #23


Аватара для Ka3hak

Новый участник


Сообщения: 33
Благодарности: 1

Профиль | Отправить PM | Цитировать


Serguei Kouzmine, а мне почему-то кажется, что вы очень глубоко и сильно прониклись сутью поставленной задачи. Спасибо Вам.
Цитата Serguei Kouzmine:
ну кому может потребоваться заливать воду с огнем через медные трубы прописью в новую ячейку ? »
Не ячейку, а строку - что само собой подразумевает изменение целого ряда ячеек. И желательно не прописью, а печатными буквами и арабскими цифрами.

Отправлено: 12:34, 19-12-2019 | #24


Ветеран


Contributor


Сообщения: 2733
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Цитата Ka3hak:
Текущий файл имеет вид: »
Так каждый может, ты мне Мурку сбацай! Дайте под эту постановку:
1. Текстовый файл откуда данные берём.
2. Excel-Таблицу с 1-2 строкой, после которых эти данные вставляем.
Пустых строк между строками с данными быть не может?
Это одна строка, или надо вставить за раз кучу строк?
Вы не боитесь, что умелые ручки запустят скрипт сто раз и вставят одни и те же строки многократно?
Соответственно, надо говорить об организации процесса: где-то в папке должен быть импортируемый файл с данными.
Куда-то после импорта он должен перемещаться.
Цитата Ka3hak:
И было бы это просто »
Вставить строку в Excel-таблицу vbs - элементарная задача. Если бы было четкое понимание задачи.
Цитата Ka3hak:
Не особо догнал о чём речь »
Цитата Ka3hak:
Данные содержит сам скрипт. Для каждого из пунктов производимых работ "он свой". »
Могу представить, что обычный пользователь способен в заготовку Excel-таблицы что-то заполнить. Но
Цитата Ka3hak:
Чувствуете этот запах? Запах жаренного мозга кажись... »
чтобы обычный пользователь вбивал данные в скрипте - никогда.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 19-12-2019 в 13:13.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:06, 19-12-2019 | #25


Аватара для Ka3hak

Новый участник


Сообщения: 33
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Вставить строку в Excel-таблицу vbs - элементарная задача.»
Бесконечно рад. *ликует :D*
Цитата megaloman:
1. Текстовый файл откуда данные берём. »
Неужели скрипт не может содержать данные? Мне нужен пример лишь одного скрипта вносящего данные в 3 ячейки одной строки. Тогда хотя бы будет на чём основываться:
Цитата Ka3hak:
(строка:№1)\1(A1-числовая ячейка)\огонь(B1-текстовая ячейка)\45(С1-числовая ячейка) »
Я просто буду использовать видоизменённые копии одного и того же скрипта.
Скрипт также должен соблюсти условие "неперезаписывания". Чтобы свериться - можно запустить его парочку раз и увидеть результат.
А уже после, для каждого типа "производимых работ"(это раздел таблицы) я буду корректировать этот скрипт по-своему.
Цитата megaloman:
Это одна строка, или надо вставить за раз кучу строк? »
На примере файла вложенного в тему - там за раз необходимо задействовать 3 строки. Но, в принципе, можно и по одной.
Цитата megaloman:
Вы не боитесь, что умелые ручки запустят скрипт сто раз и вставят одни и те же строки многократно? »
Даже не думаю об этом. Пользователь будет работать непосредственно с GUI интерфейсом, а уже там - я исключу такую возможность.
К слову
P.S. Кстати! А ведь Вы навели меня на мысль! Что если собрать .txt, .ini, либо .cfg-файл по средствам того же .BAT, а после - разом занести всю информацию с помощью .VBS?
Может так даже лучше будет, как считаете? Или, это наоборот, в разы усложнит задачу?

Последний раз редактировалось Ka3hak, 19-12-2019 в 23:08.


Отправлено: 22:59, 19-12-2019 | #26


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6672
Благодарности: 1557

Профиль | Отправить PM | Цитировать


Можно поднять MySQL и использовать Excel как интерфейс к базе, и то лучше будет.
https://youtu.be/E_kn71R9BL0

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 14:47, 20-12-2019 | #27


Аватара для Ka3hak

Новый участник


Сообщения: 33
Благодарности: 1

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip Пример.zip
(7.3 Kb, 2 просмотров)

Цитата megaloman:
1. Текстовый файл откуда данные берём.
2. Excel-Таблицу с 1-2 строкой, после которых эти данные вставляем. »
megaloman, вот архив с файлами. Как можно внести строки 9, 10, 11?


DJ Mogarych, да, ну опять же... Это плагин расширяющий функционал? В любом случае он требует времени на освоение и, как следствие, работу в самом Excel.
Если бы это было нужно мне, как пользователю, я бы несомненно автоматизировал под себя многие действия. Но увы... Задача другая
В любом случае СПАСИБО. Я обязательно рассмотрю предложенный Вами вариант.

Последний раз редактировалось Ka3hak, 20-12-2019 в 15:52.


Отправлено: 15:42, 20-12-2019 | #28


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Ka3hak:
Это плагин расширяющий функционал? »
Это бесплатная СУБД.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:01, 20-12-2019 | #29


Ветеран


Contributor


Сообщения: 2733
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar Мой Пример.rar
(5.6 Kb, 11 просмотров)

Ka3hak,
Изменил последний вариант Вашей таблицы, придумал немного другой файл с данными.
Смысл этого извращения мне до сих пор непонятен
Это скрипт
Код: Выделить весь код
FileIn = "Z:\Soft_In\Мой Пример.cfg"
FileOut = "Z:\Soft_In\Мой Пример.xls"

Con = Array("B", "C")                   'В этих столбцах записываются заголовки блоков
Dan = Array("D", "E", "G", "H")         'В этих столбцах записываются данные

Str1 = 5                                'В этой строке первое данное
NoNull = "E"                            'В этом столбце обязательно должны быть данные
Form = Array("F")                       'В этих столбцах формулы. В первой строке с данными они должны быть

Beg = "#"                               'Признак начала секции
Delim = ";"                             'Разделитель данных

Set FSO = CreateObject("Scripting.FileSystemObject")

On Error Resume Next
Set fIn = FSO.OpenTextFile(FileIn, 1, False)

If Err.Number <> 0 Then
    MsgBox "File   " + FileIn + vbCrLf + Err.Description + "(" + CStr(Err.Number) + ")"
    WScript.Quit 2
End If
On Error GoTo 0

Alls = Split(fIn.ReadAll, vbCrLf)
fIn.Close

With CreateObject("Excel.Application")
	.Visible = True
	.Workbooks.Open FileOut

i = Str1
Do
    If Trim(.Range(NoNull + CStr(i))) = "" Then
        Exit Do
    End If
    i = i + 1
Loop

NCon = UBound(Con)
NDan = UBound(Dan)

LBegin = False
For Each j In Alls
    If Not Trim(j) = "" Then
        If Left(j, 1) = Beg Then
            
            If LBegin Then
                For Each m In Con
                    .Range(m + CStr(i1) + ":" + m + CStr(i2 - 1)).Merge
                Next
            End If
            
            LBegin = True
            i1 = i
            i2 = i
            jCon = Split(j, Delim)
            jj = 0
            For Each k In jCon
                If jj <= NCon Then
                    .Range(Con(jj) + CStr(i1)) = Replace(k, Beg, "")
                End If
                jj = jj + 1
            Next
        Else
            If LBegin Then
                jCon = Split(j, Delim)
                jj = 0
                For Each k In jCon
                    If jj <= NDan Then
                        .Range(Dan(jj) + CStr(i2)) = k
                    End If
                    jj = jj + 1
                Next
                
                For Each k In Form
                    .Range(k + CStr(Str1)).Copy
                    .Range(k + CStr(i)).PasteSpecial -4123
                Next

                i = i + 1
                i2 = i
            End If
        End If
    End If
Next

If LBegin Then
    For Each m In Con
        .Range(m + CStr(i1) + ":" + m + CStr(i2 - 1)).Merge
    Next
End If

	.ActiveWorkbook.Save
	.ActiveWorkbook.Close
	.Quit
End With
Это файл с данными
Код: Выделить весь код
#Для тех, кто в танке;куб. градусы
1;огонь;13;4
2;вода;6;7
3;медные трубы;14;6
#Для страуса;зиверты
5;песок;8;5
6;цемент;9;6
7;плитка;10;7
#Ритуальные услуги;кв.литры
9;краска;4;6
10;грунтовка;8;7
11;шпатлевка;13;5
Распакуйте архив, пропишите в скрипте свои пути. Посмотрите на Excel-файл до и после скрипта.
Это пример того, что сделать можно что угодно, но не думаю, что практически он полезен - мутная постановка с непонятным смыслом.
Если захотите изменить таблицу, в скрипте есть настройки сверху на уровне входных данных (с комментариями).

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 20-12-2019 в 23:31.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:23, 20-12-2019 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] как внести коррективы в .xls файл используя .BAT

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - открыть файл-архив, используя 7-ZIP, изменить текст и закрыть файл,сохранив изменения v79italya Скриптовые языки администрирования Windows 25 20-08-2019 19:20
CMD/BAT - [решено] пример BAT-файла, который будет вносить коррективы в .cfg файл Ka3hak Скриптовые языки администрирования Windows 25 14-06-2018 05:15
2013 - Как открыть файл *.mdb, не используя *.ldb? IksSafonsky Microsoft Office (Word, Excel, Outlook и т.д.) 0 15-02-2016 16:09
[решено] Как заблокировать доступ к сайтам на mac не используя файл hosts? Gosha1234 Хочу все знать 1 10-07-2012 00:10
Разное - Как найти и восстановить файл .XLS из контрольной точки возврата? webser Microsoft Windows 2000/XP 3 06-08-2007 14:52




 
Переход