CMD/BAT - [решено] Изменения значения столбца в xls

Ответить
 • Просмотры: 1
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Изменения значения столбца в xls

Сообщение megaloman »

romfus, Меняется не всё форматирование, а только выравнивание по горизонтали. Если надо выравнивать по левому краю, то добавьте строку:

Код:

Код: Выделить всё

..................
             If iCell = NRepl(j) Then
                .Range(RangeIn).Offset(i, 0) = NRepl(j + 1)
                .Range(RangeIn).Offset(i, 0).HorizontalAlignment = xlLeft
                Exit For
            End If
...............
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Изменения значения столбца в xls

Сообщение megaloman »

Iska, Я сам пробовал так делать. Действительно, выравнивание сохраняется, но при просмотре ячейки по F2 апостроф перед числом виден. Я посчитал это некорректным.

То, что сделал я, тоже костыль нехороший: ранее содержимое было текст, а стало числом.

Правильнее, вместо предыдущего костыля такое вот решение (каюсь, надо было не лениться и мозги раньше включить):

Код:

Код: Выделить всё

                 .Range(RangeIn).Offset(i, 0).NumberFormat = "@"
                 .Range(RangeIn).Offset(i, 0) = NRepl(j + 1)




ИМХО (но это надо глубже знать задачу), лучше отформатировать весь столбец сразу как текстовый - быстрее будет выполняться.

[spoiler]Код:
[/spoiler]

Код: Выделить всё

    .Columns(.Range(RangeIn).Column).NumberFormat = "@"

    i = 0
    Do
        i = i + 1
        iCell = Trim(CStr(.Range(RangeIn).Offset(i, 0)))
        If Len(iCell) = 0 Then Exit Do
        For j = N1 To N2 Step 2
            If iCell = NRepl(j) Then
                 .Range(RangeIn).Offset(i, 0) = NRepl(j + 1)
                Exit For
            End If
        Next
    Loop







CStr(NRepl(j + 1)) здесь не нужно, элементы этого массива изначально записывались как литералы.

Я не проверял решение в случае, если замены надо делать не со строками, которые можно интерпретировать как число, а как голимые литералы. Подозреваю, и в этом случае скрипт будет работать.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Изменения значения столбца в xls

Сообщение Iska »

Цитата megaloman:



но при просмотре ячейки по F2 апостроф перед числом виден. Я посчитал это некорректным.
CMD/BAT - [решено] Изменения значения столбца в xls




Шут его знает. В концепции Microsoft Excel — это вполне официальный и поддерживаемый способ, идущий от начала времён (ещё до-Excel'евских). В возвращаемом значении свойств .Value, .Value2, .Text апостроф не показывается, он учитывается отдельным свойством .PrefixCharacter, так уж сложилось исторически:



Изображение



При экспорте, например, в CSV или в TSV, эти апострофы не сохраняются, тип данных (строка, а не число) теряется. При экспорте в xml апострофы также не сохраняются, тип данных сохраняется.
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Изменения значения столбца в xls

Сообщение megaloman »

Цитата Iska:



Шут его знает.
CMD/BAT - [решено] Изменения значения столбца в xls






Код:

Код: Выделить всё

Range("A1") = "1234567"                         'Формат ячейки общий
Range("A2") = "'1234567"                        'Формат ячейки общий
MsgBox Range("A1") = Range("A2")                ' Получим False
MsgBox CStr(Range("A1")) = CStr(Range("A2"))    ' Получим True
Range("C1") = "1234567"                         'Формат ячейки общий
Range("C2") = "1234567"                         'Формат ячейки текстовый
MsgBox Range("C1") = Range("C2")                ' Получим False
MsgBox CStr(Range("C1")) = CStr(Range("C2"))    ' Получим True
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Изменения значения столбца в xls

Сообщение Iska »

megaloman, дык, про что и речь, ибо:



Код:

Код: Выделить всё

Option Explicit
Sub Sample()
    Range("A1").Value = "1234567"
    Range("A2").Value = "'1234567"
    Debug.Print Range("A1").Value = Range("A2").Value
    Debug.Print TypeName(Range("A1").Value)
    Debug.Print TypeName(Range("A2").Value)
End Sub


Цитата:





Код:

Код: Выделить всё

False
Double
String
Ответить

Вернуться в «Скриптовые языки администрирования Windows»