PDA

Показать полную графическую версию : [решено] excel изменение значения времени


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

Iska
28-10-2014, 09:25
Имеются 2 автоматически сгенерированных файла, »
Упакуйте в архив образцы этих двух файлов и приложите к сообщению, або на RGhost.

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

задача: сдвинуть время на час вперед. К примеру с 06:22:06:23 на 07:22:06:23. »
Может ли там быть время в интервале «23:00»-«23:59»?

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

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

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

Iska
28-10-2014, 13:17
«23:00»-«23:59» не подойдет. »
Поторопился с «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
Большое спасибо за такой понятный и развернутый ответ, завтра буду пробовать, ибо не хватает времени. По рез-там отпишусь. А на счет автоматизации оч интересно, тоже попробую С НТВ да, все кроме газетной программы.

Iska
28-10-2014, 14:35
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
Прошу прощения, что не отвечал. Сегодня только руки дошли. Вставил код, обозвал расширением vbs, радуюсь. Еще раз большое человеческое спасибо, Iska!

Iska
05-11-2014, 14:30
chamskiu, завсегда пожалуйста ;). Какую малость человеку нужно для счастья!

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




© OSzone.net 2001-2012