Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   из bat файла записать дату в ячейку файла xlsx (http://forum.oszone.net/showthread.php?t=343344)

DUNAEV78 19-12-2019 11:47 2901241

из bat файла записать дату в ячейку файла xlsx
 
Вложений: 1
Ребята здравствуйте! сам не знаю как написать прошу у вас помощи как из bat файла, записать дату в ячейку, файла xlsx - который имеет "имя" книги и "дату" актуальную, пример приложил
Заранее спасибо!

DJ Mogarych 19-12-2019 13:05 2901261

Из бат-файла - никак. VBS или Powershell.

Надо сформировать excel-файл с датой или записать значение в ячейку уже готового файла?

megaloman 19-12-2019 22:46 2901340

Код:

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


Iska 20-12-2019 00:09 2901344

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


DUNAEV78 20-12-2019 12:48 2901388

DJ Mogarych, файл уже существует такой как в примере

DUNAEV78 20-12-2019 13:03 2901389

megaloman, все хорошо Только вот дата может быть другой и каждый раз менять дату, НО дата она всегда актуальная т.е. дата автоматически уже измененная на актуальную, по видимому строку, потребуется видоизменить:
Цитата:

FName = "Z:\Box_In\Дунаев_Д.П._ОТЧЕТ 19.12.2019.xlsx"
megaloman, все хорошо Только вот дата может быть другой и каждый раз менять дату, НО дата она всегда актуальная т.е. дата автоматически уже измененная на актуальную, по видимому строку, потребуется видоизменить:
Цитата:

FName = "Z:\Box_In\Дунаев_Д.П._ОТЧЕТ 19.12.2019.xlsx"
Iska, запускаю - сообщение - и ни чего не происходит

DUNAEV78 20-12-2019 13:12 2901392

Вложений: 1
Iska, запускаю - сообщение - и ни чего не происходит

megaloman 20-12-2019 13:45 2901400

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

DUNAEV78 20-12-2019 13:57 2901405

megaloman, получилось спасибо!, А по поводу пути можно прописать не сам путь а там где и лежит сам файл , просто пути меняются каждый раз

megaloman 20-12-2019 14:50 2901421

Вложений: 1
DUNAEV78, Если не писать словами Декабря, то можно обойтись без скрипта, при условии что у файла называние в формате
"Что угодно ДД.ММ.ГГГГ.xlsx"
Дата возьмется из названия.
Пишем в нужной ячейке формулу:
Код:

="Отчет за "&ПСТР(ЯЧЕЙКА("имяфайла");ПОИСК(".xlsx";ЯЧЕЙКА("имяфайла"))-10;10)&" г."
Разве что при первом вызове таблицы понадобится нажать F9 чтобы дата пересчиталась.
Ваш пример прикрепил
Наверное можно извратиться и написать буквами, но лень.

v79italya 20-12-2019 16:46 2901450

Цитата:

Цитата megaloman
в нужной ячейке формулу »

или такую формулу:
HTML код:

="Отчет за "&ТЕКСТ(--ПСТР(ЯЧЕЙКА("имяфайла");ПОИСК(".xlsx";ЯЧЕЙКА("имяфайла"))-10;10);"[$-FC19]ДД ММММ ГГГ")&" г."

DUNAEV78 20-12-2019 17:02 2901456

megaloman, прикольно так ! спасибо

megaloman 20-12-2019 17:11 2901458

v79italya, Увы, не Декабря, а Декабрь

v79italya 20-12-2019 17:55 2901463

Цитата:

Цитата megaloman
не Декабря »

на листе ОТЧЕТ именно Декабря.
в формулу надо добавить ПРОПНАЧ:
HTML код:

="Отчет за "&ПРОПНАЧ(ТЕКСТ(--ПСТР(ЯЧЕЙКА("имяфайла");ПОИСК(".xlsx";ЯЧЕЙКА("имяфайла"))-10;10);"[$-FC19]ДД ММММ ГГГ"))&" г."

Iska 20-12-2019 17:56 2901464

Цитата:

Цитата DUNAEV78
Iska, запускаю - сообщение - и ни чего не происходит »

«Происходит» сообщение. О том, как нужно использовать скрипт. Путь к Рабочей книге указывается аргументом скрипта (также можно просто перетащить файл Рабочей книги на скрипт в Проводнике).

Цитата:

Цитата megaloman
Пишем в нужной ячейке формулу: »

Вот, как бы не лучший вариант был.

DUNAEV78 23-12-2019 10:31 2901737

megaloman, СПАСИБО! еще раз хотел поблагодарить за оригинальное решение вопроса!


Время: 18:02.

Время: 18:02.
© OSzone.net 2001-