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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   [решено] excel изменение значения времени (http://forum.oszone.net/showthread.php?t=290071)

chamskiu 28-10-2014 09:04 2421365

excel изменение значения времени
 
Добрый день. Есть такое дело. Имеются 2 автоматически сгенерированных файла, генерируются они каждый день, поэтому каждый день их нужно редактировать. Вопрос редактирования следующий: имеется столбец со временем в первом файле в формате 06:22:06:23(с миллисекундами) и во втором 10:29:00(без млсек соответственно); задача: сдвинуть время на час вперед. К примеру с 06:22:06:23 на 07:22:06:23. Данных в каждом столбце по 1000 штук, руками это делать просто невозможно и нерационально. Помогите советом.

Iska 28-10-2014 09:25 2421373

Цитата:

Цитата chamskiu
Имеются 2 автоматически сгенерированных файла, »

Упакуйте в архив образцы этих двух файлов и приложите к сообщению, або на RGhost.

Цитата:

Цитата chamskiu
в формате 06:22:06:23(с миллисекундами) »

Странный формат. Обычно это выглядит как «06:22:06.023».


Цитата:

Цитата chamskiu
задача: сдвинуть время на час вперед. К примеру с 06:22:06:23 на 07:22:06:23. »

Может ли там быть время в интервале «23:00»-«23:59»?

a_axe 28-10-2014 09:31 2421375

chamskiu, пожалуйста, выложите образцы файлов.
PS Iska, долго отправлял :smirk:

chamskiu 28-10-2014 10:00 2421390

«23:00»-«23:59» не подойдет.
http://rghost.ru/58754274
http://rghost.ru/58754294

chamskiu 28-10-2014 10:31 2421398

Поторопился с «23:00»-«23:59» не подойдет.
Каким методом можете предложить?

Iska 28-10-2014 13:17 2421477

Цитата:

Цитата chamskiu
«23:00»-«23:59» не подойдет. »

Цитата:

Цитата chamskiu
Поторопился с «23:00»-«23:59» не подойдет. »

Я имел в виду — встречаются ли в файлах показания времени в интервале от 23 часов 00 минут до 23 часов 59 минут 59 секунд? Посмотрел сейчас на образцы — да, имеются.

chamskiu, ручками — для «TVTs EVROPA NA 28.10.2014.xls» используйте такую формулу:
Код:

=ЕСЛИ(ЕПУСТО(A3);"";СЦЕПИТЬ(ТЕКСТ(ВРЕМЗНАЧ(ЛЕВСИМВ(A3;8))+ВРЕМЯ(1;0;0);"чч:мм:сс");":";ПРАВСИМВ(A3;2)))
для «ntv-0 27.10-2.11.2014.xls» ещё проще:
Код:

=ЕСЛИ(ЕПУСТО(A2);"";ТЕКСТ(ВРЕМЗНАЧ(A2)+ВРЕМЯ(1;0;0);"чч:мм:сс"))
Но Вы, полагаю, хотите именно автоматизацию?

Для «TVTs EVROPA NA 28.10.2014.xls», на WSH, пробуйте:
Скрытый текст
Код:

Option Explicit

Const strWorksheetName = "Лист1"


Dim strSourceFile

Dim objRegExp
Dim objWorksheet

Dim objRange


If WScript.Arguments.Count = 1 Then
        strSourceFile = WScript.Arguments.Item(0)
       
        With WScript.CreateObject("Scripting.FileSystemObject")
                If .FileExists(strSourceFile) Then
                        Select Case LCase(.GetExtensionName(strSourceFile))
                                Case "xls", "xlsx"
                                        Set objRegExp = WScript.CreateObject("VBScript.RegExp")
                                       
                                        objRegExp.Pattern = "^(\d{2}:){3}\d{2}$"
                                       
                                        With WScript.CreateObject("Excel.Application")
                                                '.Visible = True
                                               
                                                With .Workbooks.Open(strSourceFile)
                                                        For Each objWorksheet In .Worksheets
                                                                If objWorksheet.Name = strWorksheetName Then
                                                                        Exit For
                                                                End If
                                                        Next
                                                       
                                                        If Not objWorksheet Is Nothing Then
                                                                For Each objRange In objWorksheet.UsedRange.Columns.Item(1).Cells
                                                                        If Not IsEmpty(objRange.Value) Then
                                                                                If objRegExp.Test(objRange.Value) Then
                                                                                        objRange.Value = FormatDateTime(DateAdd("h", 1, CDate(Left(objRange.Value, 8))), vbLongTime) & ":" & Right(objRange.Value, 2)
                                                                                End If
                                                                        End If
                                                                Next
                                                               
                                                                .Save
                                                        Else
                                                                WScript.Echo "Can't find worksheet [" & strWorksheetName & "] in workbook [" & strSourceFile & "]."
                                                        End If
                                                       
                                                        .Close
                                                End With
                                               
                                                .Quit
                                        End With
                                       
                                        Set objRegExp = Nothing
                                Case Else
                                        WScript.Echo "Source file probably is not an Excel workbook."
                                        WScript.Quit 2
                        End Select
                Else
                        WScript.Echo "Can't find source file [" & strSourceFile & "]."
                        WScript.Quit 2
                End If
        End With
Else
        WScript.Echo "Usage: " & WScript.ScriptName & " <xls source file>"
        WScript.Quit 1
End If

WScript.Quit 0


Можно просто перетащить целевую рабочую книгу на скрипт.

А с «ntv-0 27.10-2.11.2014.xls» что делаем? Я понимаю, надо перебрать все рабочие листы, попадающие под маску «НТВ-0 ДД.ММ.ГГ ДеньНедели», т.е., в приведённом примере это будут все листы за вычетом «НТВ - 0. Газетная программа», так?

chamskiu 28-10-2014 13:59 2421519

Большое спасибо за такой понятный и развернутый ответ, завтра буду пробовать, ибо не хватает времени. По рез-там отпишусь. А на счет автоматизации оч интересно, тоже попробую С НТВ да, все кроме газетной программы.

Iska 28-10-2014 14:35 2421548

chamskiu, спасибо, ясно.

Для «ntv-0 27.10-2.11.2014.xls», на WSH, пробуйте:
Скрытый текст
Код:

Option Explicit

Dim strSourceFile

Dim objRegExp
Dim objWorksheet

Dim objRange


If WScript.Arguments.Count = 1 Then
        strSourceFile = WScript.Arguments.Item(0)
       
        With WScript.CreateObject("Scripting.FileSystemObject")
                If .FileExists(strSourceFile) Then
                        Select Case LCase(.GetExtensionName(strSourceFile))
                                Case "xls", "xlsx"
                                        Set objRegExp = WScript.CreateObject("VBScript.RegExp")
                                       
                                        With WScript.CreateObject("Excel.Application")
                                                '.Visible = True
                                               
                                                With .Workbooks.Open(strSourceFile)
                                                        For Each objWorksheet In .Worksheets
                                                                objRegExp.Pattern = "^НТВ-0  \d{2}\.\d{2}\.\d{2}  \S+$"
                                                               
                                                                If objRegExp.Test(objWorksheet.Name) Then
                                                                        objRegExp.Pattern = "^\d{2}:\d{2}:\d{2}$"
                                                                       
                                                                        For Each objRange In objWorksheet.UsedRange.Columns.Item(1).Cells
                                                                                If Not IsEmpty(objRange.Value) Then
                                                                                        If objRegExp.Test(objRange.Value) Then
                                                                                                objRange.Value = FormatDateTime(DateAdd("h", 1, CDate(objRange.Value)), vbLongTime)
                                                                                        End If
                                                                                End If
                                                                        Next
                                                                End If
                                                        Next
                                                       
                                                        .Save
                                                        .Close
                                                End With
                                               
                                                .Quit
                                        End With
                                       
                                        Set objRegExp = Nothing
                                Case Else
                                        WScript.Echo "Source file probably is not an Excel workbook."
                                        WScript.Quit 2
                        End Select
                Else
                        WScript.Echo "Can't find source file [" & strSourceFile & "]."
                        WScript.Quit 2
                End If
        End With
Else
        WScript.Echo "Usage: " & WScript.ScriptName & " <xls source file>"
        WScript.Quit 1
End If

WScript.Quit 0


Аналогично, можно просто перетащить целевую рабочую книгу на скрипт.

chamskiu 05-11-2014 09:27 2424829

Прошу прощения, что не отвечал. Сегодня только руки дошли. Вставил код, обозвал расширением vbs, радуюсь. Еще раз большое человеческое спасибо, Iska!

Iska 05-11-2014 14:30 2424977

chamskiu, завсегда пожалуйста ;). Какую малость человеку нужно для счастья!

Вспомнилось: «Учитесь радоваться мелочам. Я вот, например, всегда радуюсь, когда получаю зарплату» ;).


Время: 21:01.

Время: 21:01.
© OSzone.net 2001-