#excel #powershell #datetime
#excel #powershell #дата и время
Вопрос:
У меня есть файл Excel, в котором у меня возникли проблемы с преобразованием формата времени из чч: мм AM / PM в чч: мм (24 часа). Поскольку столбцы форматируются в текст, применение свойства number format вообще не будет работать (оно просто ничего не делает).
Однако я заметил, что формула «=TEXT (C1;»H: MM»)» работает хорошо. Итак, я создал сценарий powershell, который выполняет цикл на каждом листе и переходит к применению формулы в новых столбцах, чтобы создать исправленные значения:
$rows = $WorkSheet.UsedRange.Rows.Count
for ($i = 8; $i -le $rows ; $i )
{
$formula1 = '=TEXTE(C' $i ';"H:MM")'
$formula2 = '=TEXTE(E' $i ';"H:MM")'
$WorkSheet.Cells.Item($i,4).Formula = $formula1
$WorkSheet.Cells.Item($i,6).Formula = $formula2
}
Несмотря на то, что этот цикл выполняет трюк, для его выполнения требуется огромное время.
Мои файлы Excel содержат около 37 листов и около 100 строк на листе. Весь процесс занимает более 20 минут.
Что я здесь пропустил и как я могу это оптимизировать?
Комментарии:
1. Вам все еще нужна помощь в этом?
2. Если я смогу получить некоторое «да», потому что на данный момент мой алгоритм все еще мучительно медленный
3. Я предполагаю, что вы используете последнюю версию Powershell (v5), поскольку каждое обновление улучшало скорость. ~ 3700 строк — это немного, и Powershell может считывать данные довольно быстро. Есть ли здесь какие-либо другие рабочие листы, которые вы не используете? Powershell должен анализировать весь документ, и если у вас есть огромное количество данных, даже неиспользуемых, это значительно замедлит обработку.
4. Ну, нет, аппарт из 2 дополнительных бесполезных небольших листов, которые я не использую, других данных нет. Я действительно использую последнюю версию powershell. Может быть, это связано с последней версией office?
Ответ №1:
Вы можете сделать что-то подобное, что должно ускорить процесс. Конечно, вам нужно перебирать свои листы.
Sub DoThis()
Sheet3.Range("M:M").Select
Selection.NumberFormat = "h:mm;@"
Selection.FormulaR1C1 = Selection.Value
End Sub
Комментарии:
1. Я думаю, вы не читали мой пост: сначала я обрабатываю свой файл с помощью powershell, а не vba, затем я просто указал, что свойство number format не работает, поскольку ячейки форматируются как текст. Пожалуйста, прочитайте, прежде чем отвечать