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

Компьютерный форум 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 | Цитировать


Цитата Iska:
Какой скрипт? Какую запись? »
Visual Basic Script. Visual Basic Script-овую запись. Запись в .xls файл, если помните...
Под словом "производит" - я подразумеваю "должен". Это своего рода конкретизация поставленной задачи.
В строку 12. Если ячейка столбца данной строки не пустая, то в 13. Если и та содержит информацию, то в 14.
ЗАПИСЬ аналогичную специально представленными выше примерами(в .xls файле).

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


Отправлено: 07:34, 18-12-2019 | #11



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

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


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

fascinating rhythm


Moderator


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

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


В нынешнем виде таблица непригодна для автоматизации, во всяком случае, эта автоматизация будет крайне трудоёмкая.

1) Для нормальной автоматизации нужно избавиться от объединённых ячеек, продублировав данные.

Тогда можно получить такой вывод

№ п/п : 1
Наименование работы : Устройство армированных стяжек толщ 20мм
Материал : раствор или бетон
Ед. изм : м3
Норма на ед. изм. : 6,5
Нормативный документ : Устройство монолитных ж/б и бетонных конструкций
"это" : 1,3
умножить на "это" : 5

№ п/п : 1
Наименование работы : Устройство армированных стяжек толщ 20мм
Материал : сетка сварная
Ед. изм : м2
Норма на ед. изм. : 7,6464
Нормативный документ : Устройство монолитных ж/б и бетонных конструкций
"это" : 1,08
умножить на "это" : 7,08

№ п/п : 2
Наименование работы : Устройство стяжек армированных полипропиленовой фиброй
Материал : цемент
Ед. изм : кг
Норма на ед. изм. : 15120
Нормативный документ : Устройство монолитных ж/б и бетонных конструкций
"это" : 280
умножить на "это" : 54

№ п/п : 2
Наименование работы : Устройство стяжек армированных полипропиленовой фиброй
Материал : песок
Ед. изм : м3
Норма на ед. изм. : 2,3
Нормативный документ : Устройство монолитных ж/б и бетонных конструкций
"это" : 1,15
умножить на "это" : 2

№ п/п : 2
Наименование работы : Устройство стяжек армированных полипропиленовой фиброй
Материал : фибра
Ед. изм : кг
Норма на ед. изм. : 0,63
Нормативный документ : Устройство монолитных ж/б и бетонных конструкций
"это" : 0,7
умножить на "это" : 0,9

Потом с этими данными уже можно работать, добавлять строки и т. д.

2) Ячейки с числами сделать реально числовыми. Сейчас, если импортировать из экселя данные, то умножить числа не получается, для этого надо объяснить компьютеру, что это действительно числа
Код: Выделить весь код
[double]$1 = $_.'"это"' -replace ',','.'
[double]$2 = $_.'умножить на "это"' -replace ',','.'

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

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

Отправлено: 11:35, 18-12-2019 | #12


Аватара для Ka3hak

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


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

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


DJ Mogarych, спасибо Вам большое за то, что откликнулись!
Цитата DJ Mogarych:
Тогда можно получить такой вывод
№ п/п : 1
Наименование работы : Устройство армированных стяжек толщ 20мм
Материал : раствор или бетон
Ед. изм : м3
Норма на ед. изм. : 6,5
Нормативный документ : Устройство монолитных ж/б и бетонных конструкций
"это" : 1,3
умножить на "это" : 5

№ п/п : 1
Наименование работы : Устройство армированных стяжек толщ 20мм
Материал : сетка сварная
Ед. изм : м2
Норма на ед. изм. : 7,6464
Нормативный документ : Устройство монолитных ж/б и бетонных конструкций
"это" : 1,08
умножить на "это" : 7,08

№ п/п : 2
Наименование работы : Устройство стяжек армированных полипропиленовой фиброй
Материал : цемент
Ед. изм : кг
Норма на ед. изм. : 15120
Нормативный документ : Устройство монолитных ж/б и бетонных конструкций
"это" : 280
умножить на "это" : 54

№ п/п : 2
Наименование работы : Устройство стяжек армированных полипропиленовой фиброй
Материал : песок
Ед. изм : м3
Норма на ед. изм. : 2,3
Нормативный документ : Устройство монолитных ж/б и бетонных конструкций
"это" : 1,15
умножить на "это" : 2

№ п/п : 2
Наименование работы : Устройство стяжек армированных полипропиленовой фиброй
Материал : фибра
Ед. изм : кг
Норма на ед. изм. : 0,63
Нормативный документ : Устройство монолитных ж/б и бетонных конструкций
"это" : 0,7
умножить на "это" : 0,9
»
На счёт этого я всё понял. Спасибо Вам кстати за наставления, которые безусловно внесли прояснения.
Но вот что касается остального - возникают вопросы.
Цитата DJ Mogarych:
[double]$1 = $_.'"это"' -replace ',','.'
[double]$2 = $_.'умножить на "это"' -replace ',','.' »
Это код .VBS? Осмелюсь предположить что здесь речь об произведении двух столбцов, и замена символов - запятой на точку, так?

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


Отправлено: 12:11, 18-12-2019 | #13


Аватара для Ka3hak

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


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

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


DJ Mogarych, дело в том, что на текущий момент, в .VBS я нулевой. Но спешу заверить, что быстро учусь
Могу ли я предложить поставить задачу ещё проще и попросить кусочек полного кода, чтобы было от чего отталкиваться?
Мне важны только 3 ключевых момента.
1) Внедрение формулы в одну из ячеек строки, а лучше - на весь столбец. Потому как на основе одного (рабочего) скрипта, поочерёдно будут вноситься разные данные.
Но и хрен бы с этим "пунктом первым". Он просто блекнет на фоне пункта №2, ведь формулу произведения чисел можно изначально забить и ручками.
2) Очерёдности записи в ближайшую, верхнюю, свободную строку. С учётом дублирования, как вы подсказали - буду также колдовать.
3) Внесённые данные должны различаться по типу: текстовый - числовой, хотя и это, как я понимаю, тоже можно исполнить вручную.

И вдовесок ещё вопросик, пожалуйста... Я никак не смогу управлять размером ячейки по средствам .VBS?

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


Отправлено: 12:49, 18-12-2019 | #14


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

fascinating rhythm


Moderator


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

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


Нет, это Powershell. Также, необходимо установить модуль Import-Excel: https://www.powershellgallery.com/packages/ImportExcel

Полный код:
Код: Выделить весь код
# Конвертация xls в xlsx
& 'C:\Program Files (x86)\Microsoft Office\Office16\excelcnv.exe' -oice D:\temp\normy_spisania_materialov.xls D:\temp\normy_spisania_materialov.xlsx

$xlsx = import-excel D:\temp\normy_spisania_materialov.xlsx -StartRow 4 -DataOnly

# Если ячейки в исходном файле не числовые
$xlsx.where{$_.'Ед. изм'} |% {
[double]$1 = $_.'"это"' -replace ',','.'
[double]$2 = $_.'умножить на "это"' -replace ',','.'
$1 * $2
}

# Если числовые
$xlsx.where{$_.'Ед. изм'} |% {
$_.'"это"' * $_.'умножить на "это"'
}
Видео по модулю: https://www.youtube.com/watch?v=U3Ne...e_NtvSo0k0K0kq

1) Формулы там вроде бы есть, см. справку по модулю.
2) Можно внести ещё один столбец просто с порядковыми номерами и отталкиваться от них, или сделать № п/п последовательными, если я правильно понял ваш вопрос.
3) Если данные будут вноситься скриптом, то при экспорте готового файла с данными будет всё в порядке. Вопрос в исходном файле.

Управлять размером ячейки при экспорте можно. Я обычно пользуюсь параметром -AutoSize.

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


Последний раз редактировалось DJ Mogarych, 18-12-2019 в 15:16.

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

Отправлено: 14:50, 18-12-2019 | #15


Ветеран


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

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


Избавляться надо от Excel, потому как в примере — типичная картина для базы данных с тремя таблицами: Нормативные документы, Наименование работы, Материалы и связями между ними один-ко-многим. Посему — MS Access, 1С или любую другую не плоскую СУБД.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:40, 18-12-2019 | #16


Ветеран


Contributor


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

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


Цитата DJ Mogarych:
В нынешнем виде таблица непригодна для автоматизации »
Ka3hak, А что подразумевается под автоматизацией? Откуда надо вставлять данные? В каком они виде? Откуда известно, на какие нормы надо ссылаться? Возьмите для примера уже имеющиеся 2 пункта и покажите, как они выглядят в файле (?) для вставки в Excel.
Цитата Ka3hak:
Внедрение формулы в одну из ячеек строки, а лучше - на весь столбец. »
Это не проблема даже в Вашей таблице, но смысла в этом нет - руками в Excel это сделать проще и надёжнее.
И, опять же, не проще ли это сделать макросом в таблице, а не внешним скриптом?

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


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

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

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


Аватара для Ka3hak

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


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

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


megaloman, доброго времени суток!
Цитата megaloman:
не проще ли это сделать макросом в таблице, а не внешним скриптом? »
Я рассматривал такой вариант. Но = нет. Задача стоит однозначная. Это "должно быть похоже" на полноценное ПО,
с удобным, понятным интерфейсом и как следствие - минимумом манипуляций для пользователя.
Цитата megaloman:
А что подразумевается под автоматизацией?
В аналогии с моей прошлой темой (http://forum.oszone.net/thread-327297.html) за что Вам отдельное, громаднейшее СПАСИБО,
подразумевается некая связка визуального GUI-интерфейса и исполняемых файлов в виде скриптов.
- В GUI оболочке есть выпадающий список с наименованием производимых работ на выбор.
- Выбираем необходимый пункт (тип производимых работ) и он уже ссылается на заведомо определённые скриптом значения.
- Далее - кнопка "apply" и уже тут отработывает скрипт, который заносит необходимую информацию в .xls файл.
Если быть несколько точнее, то условно: when press "apply"\ if change "наименование работ №1"\ then run "script1"\ else if... и т.д. и т.п.
Цитата megaloman:
Откуда надо вставлять данные? В каком они виде? Откуда известно, на какие нормы надо ссылаться? »
Данные содержит сам скрипт. Для каждого из пунктов производимых работ "он свой".

Последний раз редактировалось Ka3hak, 24-12-2019 в 09:51.


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


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

fascinating rhythm


Moderator


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

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


Цитата Ka3hak:
Это "должно быть похоже" на полноценное ПО, с удобным, понятным интерфейсом и как следствие - минимумом манипуляций для пользователя. »
И максимумом геморроя для того, кто возьмётся это реализовывать.

Зачем вообще всё это? Почему не использовать просто Excel, а не дублировать его интерфейс непонятными костылями?

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

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

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


Ветеран


Contributor


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

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


Ka3hak, Не понимаю задачи.
Цитата DJ Mogarych:
Почему не использовать просто Excel, а не дублировать его интерфейс непонятными костылями »
Цитата Ka3hak:
Данные содержит сам скрипт. Для каждого из пунктов производимых работ "он свой". »
Как максимум, можно предложить вносить исходные данные в Excel - таблицы, например - одно данное - одна книга созданная по бланку, со своим именем в определённой папке, не пытаться ваять непонятную конструкцию для каждого данного в скрипте. И затем объединять таблицы в одну например макросом или скриптом.
То есть, работать надо в направлении организации процесса на базе полноценного ПО (Excel), либо
Цитата Iska:
Избавляться надо от Excel, потому как в примере — типичная картина для базы данных с тремя таблицами: Нормативные документы, Наименование работы, Материалы и связями между ними один-ко-многим. »

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


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

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

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



Компьютерный форум 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




 
Переход