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

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


megaloman, ну я даже не знаю что сказать.. ЧЕЛОВЕЧИЩЕ! Всё Великолепно работает!
Могу ли я пока не закрывать тему, на случай вдруг ещё вопросик-другой назреет?
Кстати! Я ничего подобного на форуме не видел, может создать тему заново, в другой категории, поставив вопрос иначе?
Например: VBS/WSH/JS - как внести данные в .xls файл используя .VBS?
Ну, дабы облегчить поиски нуждающимся. А то выходит и вопрос в шапке поставлен иначе, и вариант исполнения другими методами.

Отправлено: 08:03, 22-12-2019 | #31



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

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


Ветеран


Contributor


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

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


Ka3hak, я вовсе не тонкий знаток правил портала. Знаю, что если пометите тему решенной, это позволит и в дальнейшем создавать там сообщения, относящиеся к этой теме.

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

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

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


Аватара для Ka3hak

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


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

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


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

megaloman, всё Великолепно отрабатывает, повторюсь (готов повторять это вечно). Собственно о доп.вопросиках...
Я прилагаю архив со скриптами и .cfg файлами, которые как производят записи индивидуально, так и один, "Общий".
Вопрос:
Как мне реализовать строку типа:№6(Стяжка) после каждого успешного внесения данных из "Общий"?
Подразумевается выравнивание по левому краю (если возможно), полужирный текст, параметр "Объединить и поместить в центре", и, желательно (если возможно), соответствующий цвет заливки.
СтрОки столбца "A" можно причесть туда же, не принципиально. Иными словами - задать вышеуказанные значения для всей строки, полностью.
Осмелюсь только догадываться, что есть возможность дополнить скрипт, а сами параметры прописать в файле "Общий.cfg", не так ли?
Пример желаемого результата в строке 19 файла "Образец.xls".

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


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


Аватара для Ka3hak

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


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

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


Нагуглил вот такой вариант:
XLApp.ActiveWorkbook.ActiveSheet.Range("A28:F30").Merge(True);
Теперь понять бы как это работает и куда его приткнуть, чтобы было грамотно :\

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


Ветеран


Contributor


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

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


Вложения
Тип файла: rar 20191223-OsZone.rar
(18.1 Kb, 8 просмотров)

Существенно доработал.
Код: Выделить весь код
^ПОЛЫ
^^Стяжка
#Устройство армированных стяжек толщиной 20мм\м2\Устройство монолитных ж/б и бетонных конструкций
раствор или бетон\м3\1,3\5
сетка сварная\м2\1,08\7,08
#Устройство стяжек армированных полипропиленовой фиброй\м3\Устройство монолитных ж/б и бетонных конструкций
цемент\кг\280\54
песок\м3\1,15\2
фибра\кг\0,7\0,9
^^Устройство полов
#Для тех, кто в танке\куб. градусы\Устройство монолитных ж/б и бетонных конструкций
огонь\град\13\4
вода\литр\6\7
медные трубы\м\14\6
^Зоопарк
^^Клетки
#Для страуса\зиверты\Устройство монолитных ж/б и бетонных конструкций
песок\м3\8\5
цемент\кг\9\6
плитка\м2\10\7
#Ритуальные услуги\кв.литры\Устройство монолитных ж/б и бетонных конструкций
краска\литр\4\6
грунтовка\литр\8\7
шпатлевка\литр\13\5
Код: Выделить весь код
FileIn = "Z:\Soft_In\Мой Пример New.cfg"
FileOut = "Z:\Soft_In\Мой Пример New.xls"

With WScript.Arguments
    If .Count >1 Then FileOut=.Item(1)
    If .Count >0 Then FileIn=.Item(0)
End With

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

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

Forms = Array("=СЧЁТЗ(D" + CStr(Str1) + ":D??)", "=H??*I??") 'Формулы для строки

BegGl = "^"                             'Признак начала главы
BegRz = "^^"                            'Признак начала раздела (удвоенный символ главы)
RZag = "A??:G??"                        'Диапазон заголовка главы и раздела
InteriorColorIndexGl = 35               'Цвет главы
InteriorColorIndexRz = 40               'Цвет раздела
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

If Not FSO.FileExists(FileOut) Then
    MsgBox "File   " + vbCrLf + FileOut + vbCrLf + "Not Exists"
    WScript.Quit 2
End If

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

i = Str1
CZag = Mid(RZag, 1, InStr(1, RZag, "??:") - 1)

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

Do                  ''''''''''''''''''''''''''''''''''''''
    If Trim(.Range(NoNull + CStr(i))) = "" And Trim(.Range(CZag + 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) = BegGl Then      '========================================
            ZZ = Replace(RZag, "??", CStr(i))
            i = i + 1
            With .Range(ZZ)
                .Merge
                .VerticalAlignment = -4160
                .Font.FontStyle = "полужирный"
            End With
            If Left(j, 2) = BegRz Then
                .Range(ZZ).Interior.ColorIndex = InteriorColorIndexRz
                .Range(ZZ).HorizontalAlignment = -4131
                .Range(ZZ) = Replace(j, BegRz, "")
            Else
                .Range(ZZ).Interior.ColorIndex = InteriorColorIndexGl
                .Range(ZZ).HorizontalAlignment = -4108
                .Range(ZZ) = Replace(j, BegGl, "")
            End If
        Else                            '========================================
        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 k = 0 To UBound(Form)
                    .Range(Form(k) + CStr(i)).FormulaLocal = Replace(Forms(k), "??", CStr(i))
                Next
                
                i = i + 1
                i2 = i
            End If
        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
.Cells.EntireRow.AutoFit

.ActiveWorkbook.Save
.ActiveWorkbook.Close
.Quit

End With

FSO.MoveFile FileIn, FileIn + ".Done"

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


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

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

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


Аватара для Ka3hak

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


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

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


Вложения
Тип файла: zip Ласт момент ;).zip
(20.9 Kb, 5 просмотров)

Цитата megaloman:
Существенно доработал. »
О БОжечки... Какая прелесть! Спасибо громадное!!! Это просто Великолепно...!
(но, как всегда, что в моём репертуаре - придумайте мне велосипед и научите ездить...)
Конечно понимаю, что "в край оборзел" и крайне не удобно спрашивать у Вас что-либо ещё, но:
- Зачем в скрипте задаётся формула для столбца "A"? В рабочем .xls, согласно стандарту оформления,
происходит нумерация "производимых работ" столбца "B" - от 1 и до max кол-ва (для каждого пункта каждого из разделов). //пример приложил (выделено жёлтеньким)
Можно ли такое как-нибудь исполнить? Если это слишком трудоёмко - может и вовсе не производить запись данных в этот столбец? Значит будет делаться ручками.
- Ещё момент с ячейками столбца "G"... Они объединены в каждом разделе и носят имя "Устройство монолитных ж/б и бетонных конструкций". Так тоже можно сделать? //пример приложил (выделено жёлтеньким)
P.S. Опять же отсылка на трудоёмкость. Возможно это не стоит Ваших усилий и тогда уж "хрен с ним", пусть остаётся так.
- Не особо понял момент "запуск скрипта с с аргументами". Подразумевается указание параметров запуска, или как? Если я не указываю аргумент, то скрипт не отрабатывает
Может тогда ну их, эти танцы? Ведь (повторюсь) пользователь не будет напрямую взаимодействовать со скриптами, а только с визуальным интерфейсом, так что скрипты вполне могут находиться в постоянной боеготовности.

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


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


Ветеран


Contributor


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

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


Цитата Ka3hak:
Зачем в скрипте задаётся формула для столбца "A"? .... может и вовсе не производить запись данных в этот столбец »
Это делается на уровне настроек:
Код: Выделить весь код
'Form = Array("A", "F")                  'В этих столбцах формулы.
Form = Array("F")                  'В этих столбцах формулы.

'Forms = Array("=СЧЁТЗ(D" + CStr(Str1) + ":D??)", "=H??*I??") 'Формулы для строки
Forms = Array("=H??*I??") 'Формулы для строки
Цитата Ka3hak:
- Не особо понял момент "запуск скрипта с с аргументами". Подразумевается указание параметров запуска, или как? Если я не указываю аргумент, то скрипт не отрабатывает »
Что значит не отрабатывает?
Если в тексте скрипта указаны реальные пути файлов, то при отсутствии аргументов при запуске, возьмутся указанные файлы.
Если указаны аргумент(ы) (сначала cfg затем xls) - то возьмется то, что в аргументе
Остальные идеи пока не осознал.

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

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

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


Аватара для Ka3hak

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


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

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


Цитата megaloman:
'Forms = Array("=СЧЁТЗ(D" + CStr(Str1) + ":D??)", "=H??*I??") 'Формулы для строки »
Ах, да... Вот этот момент я недоглядел. Исключал только параметр "'Form = Array("A", "F")". Спасибо.
Цитата megaloman:
Если указаны аргумент(ы) »
А что подразумевается под словом "аргументы"? О каких именно значениях речь?
- Тогда самый главный момент. Какие процедуры или функции необходимо исключить для отмены своего рода "бэкапа" (.done)?
(вопрос из разряда: "на будущее")

Отправлено: 16:11, 25-12-2019 | #38


Ветеран


Contributor


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

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


Цитата Ka3hak:
А что подразумевается под словом "аргументы"? О каких именно значениях речь? »
Например (в текстовом файле описано) запуск скрипта
Код: Выделить весь код
я191223.vbs "Z:\Soft_In\Мой Пример New.cfg" "Z:\Soft_In\Мой Пример New.xls"
В аргументах полное имя cfg-файла и xls-файла.
При отсутствии втрорго аргумента (файла XLS) его имя возьмется из текста скрипта
Цитата Ka3hak:
Какие процедуры или функции необходимо исключить для отмены своего рода "бэкапа" (.done)? »
Закомментировать (хватит и одного ')
Код: Выделить весь код
''''''''''FSO.MoveFile FileIn, FileIn + ".Done"

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

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

Отправлено: 16:48, 25-12-2019 | #39



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




 
Переход