|
Компьютерный форум 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 | Цитировать DJ Mogarych, спасибо Вам большое за вариант. Беру его на рассмотрение, в обязательном порядке.
Смущает только # Конвертация xls в xlsx. Дело в том, что разбор полётов происходит с файлом старого образца, Office 2003 Цитата Iska:
Цитата DJ Mogarych:
Цитата megaloman:
![]() |
|||
Последний раз редактировалось Ka3hak, 18-12-2019 в 23:33. Отправлено: 23:22, 18-12-2019 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 33
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Ka3hak, мне кажется вы еще не рассматриваете Хабр Фриланс - и мне не ясно почему ?
опишите задачу и вам ее сделают - а как тема для форума ваша задача черезчур узко специальна ну кому может потребоваться заливать воду с огнем через медные трубы прописью в новую ячейку ? |
Отправлено: 03:20, 19-12-2019 | #23 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Serguei Kouzmine, а мне почему-то кажется, что вы очень глубоко и сильно прониклись сутью поставленной задачи. Спасибо Вам.
Цитата Serguei Kouzmine:
|
|
Отправлено: 12:34, 19-12-2019 | #24 |
Ветеран Сообщения: 2733
|
Профиль | Отправить PM | Цитировать Цитата Ka3hak:
1. Текстовый файл откуда данные берём. 2. Excel-Таблицу с 1-2 строкой, после которых эти данные вставляем. Пустых строк между строками с данными быть не может? Это одна строка, или надо вставить за раз кучу строк? Вы не боитесь, что умелые ручки запустят скрипт сто раз и вставят одни и те же строки многократно? Соответственно, надо говорить об организации процесса: где-то в папке должен быть импортируемый файл с данными. Куда-то после импорта он должен перемещаться. Цитата Ka3hak:
Цитата Ka3hak:
Цитата Ka3hak:
Цитата Ka3hak:
|
|||||
------- Последний раз редактировалось megaloman, 19-12-2019 в 13:13. Отправлено: 13:06, 19-12-2019 | #25 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Цитата megaloman:
Цитата Ka3hak:
Скрипт также должен соблюсти условие "неперезаписывания". Чтобы свериться - можно запустить его парочку раз и увидеть результат. А уже после, для каждого типа "производимых работ"(это раздел таблицы) я буду корректировать этот скрипт по-своему. Цитата megaloman:
Цитата megaloman:
К слову
P.S. Кстати! А ведь Вы навели меня на мысль! Что если собрать .txt, .ini, либо .cfg-файл по средствам того же .BAT, а после - разом занести всю информацию с помощью .VBS?
Может так даже лучше будет, как считаете? Или, это наоборот, в разы усложнит задачу? |
|||||
Последний раз редактировалось Ka3hak, 19-12-2019 в 23:08. Отправлено: 22:59, 19-12-2019 | #26 |
fascinating rhythm Сообщения: 6672
|
Профиль | Отправить PM | Цитировать Можно поднять MySQL и использовать Excel как интерфейс к базе, и то лучше будет.
https://youtu.be/E_kn71R9BL0 |
------- Отправлено: 14:47, 20-12-2019 | #27 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать
Цитата megaloman:
DJ Mogarych, да, ну опять же... Это плагин расширяющий функционал? В любом случае он требует времени на освоение и, как следствие, работу в самом Excel. Если бы это было нужно мне, как пользователю, я бы несомненно автоматизировал под себя многие действия. Но увы... Задача другая ![]() В любом случае СПАСИБО. Я обязательно рассмотрю предложенный Вами вариант. |
|||||
Последний раз редактировалось Ka3hak, 20-12-2019 в 15:52. Отправлено: 15:42, 20-12-2019 | #28 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Ka3hak:
|
|
Отправлено: 18:01, 20-12-2019 | #29 |
Ветеран Сообщения: 2733
|
Профиль | Отправить PM | Цитировать
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 Это пример того, что сделать можно что угодно, но не думаю, что практически он полезен - мутная постановка с непонятным смыслом. Если захотите изменить таблицу, в скрипте есть настройки сверху на уровне входных данных (с комментариями). |
||||
------- Последний раз редактировалось megaloman, 20-12-2019 в 23:31. Отправлено: 23:23, 20-12-2019 | #30 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - открыть файл-архив, используя 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 |
|