из bat файла записать дату в ячейку файла xlsx
Вложений: 1
Ребята здравствуйте! сам не знаю как написать прошу у вас помощи как из bat файла, записать дату в ячейку, файла xlsx - который имеет "имя" книги и "дату" актуальную, пример приложил
Заранее спасибо!
|
DJ Mogarych |
19-12-2019 13:05 2901261 |
Из бат-файла - никак. VBS или Powershell.
Надо сформировать excel-файл с датой или записать значение в ячейку уже готового файла?
|
Код:
FName = "Z:\Box_In\Дунаев_Д.П._ОТЧЕТ 19.12.2019.xlsx"
ToCell = "B1"
Dt = CStr(MonthName(Month(Date)))
Dt = "Отчет за " + Right("0" + CStr(Day(Date)), 2) + " " + Left(Dt, Len(Dt) - 1) + "я " + CStr(Year(Date)) + " г."
With CreateObject("Excel.Application")
.Visible = True
.Workbooks.Open FName
.Range(ToCell) = Dt
.ActiveWorkbook.Save
.ActiveWorkbook.Close
.Quit
End With
|
DUNAEV78, как-то так, если я всё правильно понял:
Скрытый текст
Код:
Option Explicit
Dim strSourceFile
Dim objFSO
Dim objExcel
Dim strWorksheetName
Dim strPartsDelimiter
Dim boolFound
Dim objWorksheet
Dim arrParts
strWorksheetName = "ОТЧЕТ"
strPartsDelimiter = "_ОТЧЕТ "
If WScript.Arguments.Count = 1 Then
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
strSourceFile = objFSO.GetAbsolutePathName(WScript.Arguments.Item(0))
If objFSO.FileExists(strSourceFile) Then
Select Case LCase(objFSO.GetExtensionName(strSourceFile))
Case "xls", "xlsx"
Set objExcel = WScript.CreateObject("Excel.Application")
With objExcel.Workbooks.Open(strSourceFile)
boolFound = False
For Each objWorksheet In .WorkSheets
If StrComp(objWorksheet.Name, strWorksheetName, vbTextCompare) = 0 Then
boolFound = True
arrParts = Split(objFSO.GetBaseName(strSourceFile), strPartsDelimiter)
If IsArray(arrParts) And UBound(arrParts) = 1 Then
objWorksheet.Cells.Item(3, 2).Value = Replace(arrParts(0), "_", " ")
WScript.Echo objWorksheet.Cells.Item(3, 2).Value
If IsDate(arrParts(1)) Then
objWorksheet.Cells.Item(1, 2).Value = "Отчет за " & FormatDateTime(CDate(arrParts(1)), vbLongDate)
WScript.Echo objWorksheet.Cells.Item(1, 2).Value
Else
WScript.Echo "Can't translate part [" & arrParts(1) & "] of file name [" & objFSO.GetBaseName(strSourceFile) & "] as date."
End If
Else
WScript.Echo "Can't parse file name [" & objFSO.GetBaseName(strSourceFile) & "] by delimiter [" & strPartsDelimiter & "]."
End If
Exit For
End If
Next
If boolFound Then
.Save
Else
WScript.Echo "Can't find worksheet [" & strWorksheetName & "] in [" & strSourceFile & "]."
End If
End With
objExcel.Quit
Set objExcel = Nothing
Case Else
' Nothing to do
End Select
Else
WScript.Echo "Can't find source file [" & strSourceFile & "]."
WScript.Quit 2
End If
Set objFSO = Nothing
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>"
WScript.Quit 1
End If
WScript.Quit 0
|
DJ Mogarych, файл уже существует такой как в примере
|
megaloman, все хорошо Только вот дата может быть другой и каждый раз менять дату, НО дата она всегда актуальная т.е. дата автоматически уже измененная на актуальную, по видимому строку, потребуется видоизменить:
Цитата:
FName = "Z:\Box_In\Дунаев_Д.П._ОТЧЕТ 19.12.2019.xlsx"
|
megaloman, все хорошо Только вот дата может быть другой и каждый раз менять дату, НО дата она всегда актуальная т.е. дата автоматически уже измененная на актуальную, по видимому строку, потребуется видоизменить:
Цитата:
FName = "Z:\Box_In\Дунаев_Д.П._ОТЧЕТ 19.12.2019.xlsx"
|
Iska, запускаю - сообщение - и ни чего не происходит
|
Вложений: 1
Iska, запускаю - сообщение - и ни чего не происходит
|
DUNAEV78, Объясните:
Имеется файл, например "Дунаев_Д.П._ОТЧЕТ ДД.ММ.ГГГГ.xlsx"
То есть, его создавать не нужно, сегодня существует файл "Дунаев_Д.П._ОТЧЕТ 20.12.2019.xlsx" и туда надо вбить в шапку дату.
Вы хотите чтобы скрипт обращался к файлу с датой в имени.
Код:
FName = "Z:\Box_In\Дунаев_Д.П._ОТЧЕТ ДД.ММ.ГГГГ.xlsx"
ToCell = "B1"
FName = Replace(FName, "ДД.ММ.ГГГГ", Right("0" + CStr(Day(Date)), 2) + "." + Right("0" + CStr(Month(Date)), 2) + "." + CStr(Year(Date)))
Dt = CStr(MonthName(Month(Date)))
Dt = "Отчет за " + Right("0" + CStr(Day(Date)), 2) + " " + Left(Dt, Len(Dt) - 1) + "я " + CStr(Year(Date)) + " г."
With CreateObject("Excel.Application")
.Visible = True
.Workbooks.Open FName
.Range(ToCell) = Dt
.ActiveWorkbook.Save
.ActiveWorkbook.Close
.Quit
End With
Формат даты в имени ДД.ММ.ГГГГ, то есть, например: 01.09.2025
|
megaloman, получилось спасибо!, А по поводу пути можно прописать не сам путь а там где и лежит сам файл , просто пути меняются каждый раз
|
Вложений: 1
DUNAEV78, Если не писать словами Декабря, то можно обойтись без скрипта, при условии что у файла называние в формате
"Что угодно ДД.ММ.ГГГГ.xlsx"
Дата возьмется из названия.
Пишем в нужной ячейке формулу:
Код:
="Отчет за "&ПСТР(ЯЧЕЙКА("имяфайла");ПОИСК(".xlsx";ЯЧЕЙКА("имяфайла"))-10;10)&" г."
Разве что при первом вызове таблицы понадобится нажать F9 чтобы дата пересчиталась.
Ваш пример прикрепил
Наверное можно извратиться и написать буквами, но лень.
|
Цитата:
Цитата megaloman
в нужной ячейке формулу »
|
или такую формулу:
HTML код:
="Отчет за "&ТЕКСТ(--ПСТР(ЯЧЕЙКА("имяфайла");ПОИСК(".xlsx";ЯЧЕЙКА("имяфайла"))-10;10);"[$-FC19]ДД ММММ ГГГ")&" г."
|
megaloman, прикольно так ! спасибо
|
v79italya, Увы, не Декабря, а Декабрь
|
на листе ОТЧЕТ именно Декабря.
в формулу надо добавить ПРОПНАЧ:
HTML код:
="Отчет за "&ПРОПНАЧ(ТЕКСТ(--ПСТР(ЯЧЕЙКА("имяфайла");ПОИСК(".xlsx";ЯЧЕЙКА("имяфайла"))-10;10);"[$-FC19]ДД ММММ ГГГ"))&" г."
|
Цитата:
Цитата DUNAEV78
Iska, запускаю - сообщение - и ни чего не происходит »
|
«Происходит» сообщение. О том, как нужно использовать скрипт. Путь к Рабочей книге указывается аргументом скрипта (также можно просто перетащить файл Рабочей книги на скрипт в Проводнике).
Цитата:
Цитата megaloman
Пишем в нужной ячейке формулу: »
|
Вот, как бы не лучший вариант был.
|
megaloman, СПАСИБО! еще раз хотел поблагодарить за оригинальное решение вопроса!
|
Время: 18:02.
© OSzone.net 2001-