Показать полную графическую версию : [решено] excel изменение значения времени
chamskiu
28-10-2014, 09:04
Добрый день. Есть такое дело. Имеются 2 автоматически сгенерированных файла, генерируются они каждый день, поэтому каждый день их нужно редактировать. Вопрос редактирования следующий: имеется столбец со временем в первом файле в формате 06:22:06:23(с миллисекундами) и во втором 10:29:00(без млсек соответственно); задача: сдвинуть время на час вперед. К примеру с 06:22:06:23 на 07:22:06:23. Данных в каждом столбце по 1000 штук, руками это делать просто невозможно и нерационально. Помогите советом.
Имеются 2 автоматически сгенерированных файла, »
Упакуйте в архив образцы этих двух файлов и приложите к сообщению, або на RGhost.
в формате 06:22:06:23(с миллисекундами) »
Странный формат. Обычно это выглядит как «06:22:06.023».
задача: сдвинуть время на час вперед. К примеру с 06:22:06:23 на 07:22:06:23. »
Может ли там быть время в интервале «23:00»-«23:59»?
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» не подойдет.
Каким методом можете предложить?
«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
Большое спасибо за такой понятный и развернутый ответ, завтра буду пробовать, ибо не хватает времени. По рез-там отпишусь. А на счет автоматизации оч интересно, тоже попробую С НТВ да, все кроме газетной программы.
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!
chamskiu, завсегда пожалуйста ;). Какую малость человеку нужно для счастья!
Вспомнилось: «Учитесь радоваться мелочам. Я вот, например, всегда радуюсь, когда получаю зарплату» ;).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC