|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] как внести коррективы в .xls файл используя .BAT |
|
CMD/BAT - [решено] как внести коррективы в .xls файл используя .BAT
|
Новый участник Сообщения: 33 |
День добрый Уважаемые знатоки, всеми нами любимого, супер-форума 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 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать megaloman, ну я даже не знаю что сказать.. ЧЕЛОВЕЧИЩЕ! Всё Великолепно работает!
Могу ли я пока не закрывать тему, на случай вдруг ещё вопросик-другой назреет? Кстати! Я ничего подобного на форуме не видел, может создать тему заново, в другой категории, поставив вопрос иначе? Например: VBS/WSH/JS - как внести данные в .xls файл используя .VBS? Ну, дабы облегчить поиски нуждающимся. А то выходит и вопрос в шапке поставлен иначе, и вариант исполнения другими методами. |
Отправлено: 08:03, 22-12-2019 | #31 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Ka3hak, я вовсе не тонкий знаток правил портала. Знаю, что если пометите тему решенной, это позволит и в дальнейшем создавать там сообщения, относящиеся к этой теме.
|
------- Отправлено: 09:09, 22-12-2019 | #32 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать
megaloman, всё Великолепно отрабатывает, повторюсь (готов повторять это вечно). Собственно о доп.вопросиках...
![]() Я прилагаю архив со скриптами и .cfg файлами, которые как производят записи индивидуально, так и один, "Общий". Вопрос: Как мне реализовать строку типа:№6(Стяжка) после каждого успешного внесения данных из "Общий"? Подразумевается выравнивание по левому краю (если возможно), полужирный текст, параметр "Объединить и поместить в центре", и, желательно (если возможно), соответствующий цвет заливки. СтрОки столбца "A" можно причесть туда же, не принципиально. Иными словами - задать вышеуказанные значения для всей строки, полностью. Осмелюсь только догадываться, что есть возможность дополнить скрипт, а сами параметры прописать в файле "Общий.cfg", не так ли? Пример желаемого результата в строке 19 файла "Образец.xls". |
||||
Последний раз редактировалось Ka3hak, 23-12-2019 в 01:58. Отправлено: 14:38, 22-12-2019 | #33 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Нагуглил вот такой вариант:
XLApp.ActiveWorkbook.ActiveSheet.Range("A28:F30").Merge(True); Теперь понять бы как это работает и куда его приткнуть, чтобы было грамотно :\ |
Отправлено: 02:38, 23-12-2019 | #34 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать
Существенно доработал.
^ПОЛЫ ^^Стяжка #Устройство армированных стяжек толщиной 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 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать
Цитата megaloman:
(но, как всегда, что в моём репертуаре - придумайте мне велосипед и научите ездить...) Конечно понимаю, что "в край оборзел" и крайне не удобно спрашивать у Вас что-либо ещё, но: - Зачем в скрипте задаётся формула для столбца "A"? В рабочем .xls, согласно стандарту оформления, происходит нумерация "производимых работ" столбца "B" - от 1 и до max кол-ва (для каждого пункта каждого из разделов). //пример приложил (выделено жёлтеньким) Можно ли такое как-нибудь исполнить? Если это слишком трудоёмко - может и вовсе не производить запись данных в этот столбец? Значит будет делаться ручками. - Ещё момент с ячейками столбца "G"... Они объединены в каждом разделе и носят имя "Устройство монолитных ж/б и бетонных конструкций". Так тоже можно сделать? //пример приложил (выделено жёлтеньким) P.S. Опять же отсылка на трудоёмкость. Возможно это не стоит Ваших усилий и тогда уж "хрен с ним", пусть остаётся так. - Не особо понял момент "запуск скрипта с с аргументами". Подразумевается указание параметров запуска, или как? Если я не указываю аргумент, то скрипт не отрабатывает ![]() Может тогда ну их, эти танцы? Ведь (повторюсь) пользователь не будет напрямую взаимодействовать со скриптами, а только с визуальным интерфейсом, так что скрипты вполне могут находиться в постоянной боеготовности. |
|||||
Последний раз редактировалось Ka3hak, 25-12-2019 в 17:43. Отправлено: 13:25, 25-12-2019 | #36 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата Ka3hak:
Цитата Ka3hak:
Если в тексте скрипта указаны реальные пути файлов, то при отсутствии аргументов при запуске, возьмутся указанные файлы. Если указаны аргумент(ы) (сначала cfg затем xls) - то возьмется то, что в аргументе Остальные идеи пока не осознал. |
||
------- Отправлено: 14:49, 25-12-2019 | #37 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Цитата megaloman:
- Тогда самый главный момент. Какие процедуры или функции необходимо исключить для отмены своего рода "бэкапа" (.done)? (вопрос из разряда: "на будущее") |
||
Отправлено: 16:11, 25-12-2019 | #38 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата Ka3hak:
При отсутствии втрорго аргумента (файла XLS) его имя возьмется из текста скрипта Цитата Ka3hak:
|
||
------- Отправлено: 16:48, 25-12-2019 | #39 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - открыть файл-архив, используя 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 |
|