Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Изменения значения столбца в xls

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

Пользователь


Сообщения: 72
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день. Имеется файл в xls формате в папке D:\IVC\Operators\Printer\22.05.2018 ( Дата ежедневно меняется) с количеством строк от 3 - 20 тысяч. В зависимости от того сколько нам дадут данных значений. Возможно ли чтобы скрипт считывал весь столбец ( Наименование столбца indexto ячейка B1 ) и изменял необходимые данные на другие значения? Например если попадется 368200 меняется на 368211. 142191 на 108840 366100 на 366108 366600 на 366611 367033 на 367901 364901 на 364910. Остальных значений которые нужно менять я пока не знаю. Но буду сам дополнять в этот скрипт, если он получится . Для примера кидаю файл с 7360 строками https://yadi.sk/i/oRqx-IX83WPjYt

Отправлено: 10:29, 23-05-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


megaloman, полагаю, если вставлять как текст:
Код: Выделить весь код
.Range(RangeIn).Offset(i, 0).Value = "'" & CStr(NRepl(j + 1))
— выравниваться вправо не будет (не проверялось).

Отправлено: 06:13, 24-05-2018 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Iska, Я сам пробовал так делать. Действительно, выравнивание сохраняется, но при просмотре ячейки по F2 апостроф перед числом виден. Я посчитал это некорректным.
То, что сделал я, тоже костыль нехороший: ранее содержимое было текст, а стало числом.
Правильнее, вместо предыдущего костыля такое вот решение (каюсь, надо было не лениться и мозги раньше включить):
Код: Выделить весь код
                 .Range(RangeIn).Offset(i, 0).NumberFormat = "@"
                 .Range(RangeIn).Offset(i, 0) = NRepl(j + 1)
ИМХО (но это надо глубже знать задачу), лучше отформатировать весь столбец сразу как текстовый - быстрее будет выполняться.
Код: Выделить весь код
    .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)) здесь не нужно, элементы этого массива изначально записывались как литералы.
Я не проверял решение в случае, если замены надо делать не со строками, которые можно интерпретировать как число, а как голимые литералы. Подозреваю, и в этом случае скрипт будет работать.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 24-05-2018 в 07:51.


Отправлено: 07:10, 24-05-2018 | #12


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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



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

Отправлено: 08:00, 24-05-2018 | #13


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата Iska:
Шут его знает. »
Код: Выделить весь код
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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 10:11, 24-05-2018 | #14


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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

Отправлено: 12:23, 24-05-2018 | #15



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Изменения значения столбца в xls

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - Сбрасывается ширина столбца в папке и т. д. Heavycloud Microsoft Windows 10 10 04-08-2017 21:54
MySQL - [решено] Связывание значения столбца с именем таблицы Rikka Программирование и базы данных 5 25-10-2016 05:28
Прочие БД - кодировка названия столбца Arenear Программирование и базы данных 5 20-08-2016 23:05
Delphi - Сверка memo с элементами столбца в dbgrid alexmih241 Программирование и базы данных 1 13-05-2015 03:00
[решено] скрипт изменения значения ветки реестра в процессе установки программы adima AutoIt 7 27-03-2012 09:38




 
Переход