Что нового

Поиск и замена ключевых слов в таблице Exel

IP_rat

Новичок
Сообщения
9
Репутация
0
Версия AutoIt: 3.5.4

Описание:
Необходим скрипт который будет заменять моими переменными определённые ключевые слова в таблице и присоединять к одной из клеток таблицы гиперссылку.
Пример таблицы во вложении


Примечания:


Пытался разобраться в справке с <Include> Exel.au3, но недостаточный опыт работы в этом языке не позволяет правильно составить рабочий скрипт
ниже мой не рабочий вариант позаимствованный и немного переделанный из просторов интернетов.
Помогите пожалуйста или разобраться в этом скрипте или подскажите более простой вариант... :stars:
Код:
#include <Excel.au3>
local $aArrayList
$sFilePath = @ScriptDir & '\Journal.xlsx'
$oExcel=_Excel_BookOpen($sFilePath, 0);скрытно
;~ $oExcel = _Excel_BookOpen($sFilePath,'');в открытую
$aArrayList=_Excel_SheetList($oExcel)
For $i = 1 To $aArrayList
    _Excel_SheetActivate($oExcel, $aArrayList[$i])
    $aArraySheet = _Excel_ReadSheetToArray($oExcel)
    For $j = 1 To $aArraySheet[0][0]
        For $x = 1 To $aArraySheet[0][1]
            $sString = StringReplace($aArraySheet[$j][$x], ':', '.')
            _Excel_WriteCell($oExcel, $sString, $j, $x)
        Next
    Next
Next
_Excel_BookClose($oExcel)
EndFunc
 

Вложения

  • ТАБЛИЦА.PNG
    ТАБЛИЦА.PNG
    79.6 КБ · Просмотры: 27

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
#include <Excel.au3>

$oExcel = _Excel_Open(False)
$oWorkBook = _Excel_BookOpen($oExcel, @ScriptDir & "\Journal.xls")
$aList = _Excel_SheetList($oWorkBook)
For $i = 0 To UBound($aList) - 1
    _Excel_RangeReplace($oWorkBook, $aList[$i][1], Default, ":", ".")
    _Excel_RangeReplace($oWorkBook, $aList[$i][1], Default, "-", "=")
    _Excel_RangeLinkAddRemove($oWorkBook, $aList[$i][1], "F1", "http://autoit-script.ru")
Next
_Excel_BookClose($oWorkBook)
_Excel_Close($oExcel)
 

Eisenshof

Новичок
Сообщения
2
Репутация
0
[Данные, строки] Re: Поиск и замена ключевых слов в таблице Exel

Как в уже открытой книге можно заменить символ . на "пусто" при помощи Autoit?

например написано число 24.456 а нужно заменить на 24456 и так во всей книге, ну или хотя б на листе как обойтись без ^h и лишних Send оф?

за ранее благодарен!
 
Автор
I

IP_rat

Новичок
Сообщения
9
Репутация
0
Re: [Данные, строки] Re: Поиск и замена ключевых слов в таблице Exel

Eisenshof сказал(а):
Как в уже открытой книге можно заменить символ . на "пусто" при помощи Autoit?

например написано число 24.456 а нужно заменить на 24456 и так во всей книге, ну или хотя б на листе как обойтись без ^h и лишних Send оф?

за ранее благодарен!

Может htt@ps://autoit-script.ru/autoit3_docs/functions/StringReplace.htm ?
 

Eisenshof

Новичок
Сообщения
2
Репутация
0
Пробовал
Код:
#include <Excel.au3>

WinActivate('Microsoft Excel - inw323 test Робоча')


StringReplace(send('^a'),'.','')


не работает замены не происходит=((
 
Автор
I

IP_rat

Новичок
Сообщения
9
Репутация
0
Eisenshof сказал(а):
Пробовал
Код:
#include <Excel.au3>

WinActivate('Microsoft Excel - inw323 test Робоча')


StringReplace(send('^a'),'.','')


не работает замены не происходит=((

Вообще эта функция работает немного не так. Изменять нужно переменную.
Код:
local $a = 'привед'

$a = StringReplace($a,'д','т')

MsgBox(0,0,$a)


Я бы попробовал запихать StringReplace в цикл For например и подставлял параметры которые необходимо откорректировать. Но может я не до конца понял чего именно вы хотите добиться
 

Tyr

Новичок
Сообщения
43
Репутация
4
Вот тебе пример который можно реализовать нетолько в autoit но и в любом языке работающем с ADO ... только синтексис чуток подправить. Эксель умеет всё делать сам и позволяет обращаться к своим ячейкам и к областям.
Возможно будет полезно... (код не мой, с просторов интернета)
Код:
' Извлекаю путь данного vbs 
Set FSO = CreateObject("Scripting.FileSystemObject") 
Set F = FSO.GetFile(Wscript.ScriptFullName) 
path = FSO.GetParentFolderName(F) 
 
' Путь файла xls 
Set objExcel = CreateObject("Excel.Application") 
Set objWorkbook = objExcel.Workbooks.Open (path+"\VK_Stat.xls") 
 
' Количество аккаунтов 
Accs = objExcel.ActiveSheet.UsedRange.Row + objExcel.ActiveSheet.UsedRange.Rows.Count - 3 
 
' Копирование колонка Status New в Status Old 
StatProv = objExcel.Cells(3, 9).Value ' первое значение в Status New 
i = 3 
Do While i < Accs + 3 And StatProv <> ("") 
    objExcel.Cells(i, 8).Value = objExcel.Cells(i, 9).Value                 ' копирование 
    objExcel.Cells(i, 9).Value = ""                                            ' очистка колонки         Status New 
    i = i+1 
Loop 
 
' Проверка статуса vk - аккаунта и запись в Status New 
i = 3 
Do While i < Accs + 3 And objExcel.Cells(i, 4).Value <> ("")                ' пока значение в url vk - аккаунта не пусто 
    Dim o 
    Set o = CreateObject("MSXML2.XMLHTTP") 
    o.open "GET", objExcel.Cells(i, 4), False 
    o.send 
' запись статуса vk - аккаунта  
    if InStr(1,o.responseText,"заблокировать",1) <> 0 Then 
            objExcel.Cells(i, 9).Value = "Блок" 
    else 
        if InStr(1,o.responseText,"заморозили",1) <> 0 Then 
            objExcel.Cells(i, 9).Value = "Замор" 
        else 
            objExcel.Cells(i, 9).Value = "Ok" 
        end if 
    end if 
    i = i+1 
Loop 
 
 
 
 
 
 
' Извлекаю путь данного vbs 
WScript.Echo objExcel.Cells(2, 10).Value 
 
 
objExcel.ActiveWorkbook.Save 
objExcel.Quit
 
Автор
I

IP_rat

Новичок
Сообщения
9
Репутация
0
Tyr сказал(а):
Вот тебе пример который можно реализовать нетолько в autoit но и в любом языке работающем с ADO ... только синтексис чуток подправить. Эксель умеет всё делать сам и позволяет обращаться к своим ячейкам и к областям.
Возможно будет полезно... (код не мой, с просторов интернета)
Код:
' Извлекаю путь данного vbs 
Set FSO = CreateObject("Scripting.FileSystemObject") 
Set F = FSO.GetFile(Wscript.ScriptFullName) 
path = FSO.GetParentFolderName(F) 
 
' Путь файла xls 
Set objExcel = CreateObject("Excel.Application") 
Set objWorkbook = objExcel.Workbooks.Open (path+"\VK_Stat.xls") 
 
' Количество аккаунтов 
Accs = objExcel.ActiveSheet.UsedRange.Row + objExcel.ActiveSheet.UsedRange.Rows.Count - 3 
 
' Копирование колонка Status New в Status Old 
StatProv = objExcel.Cells(3, 9).Value ' первое значение в Status New 
i = 3 
Do While i < Accs + 3 And StatProv <> ("") 
    objExcel.Cells(i, 8).Value = objExcel.Cells(i, 9).Value                 ' копирование 
    objExcel.Cells(i, 9).Value = ""                                            ' очистка колонки         Status New 
    i = i+1 
Loop 
 
' Проверка статуса vk - аккаунта и запись в Status New 
i = 3 
Do While i < Accs + 3 And objExcel.Cells(i, 4).Value <> ("")                ' пока значение в url vk - аккаунта не пусто 
    Dim o 
    Set o = CreateObject("MSXML2.XMLHTTP") 
    o.open "GET", objExcel.Cells(i, 4), False 
    o.send 
' запись статуса vk - аккаунта  
    if InStr(1,o.responseText,"заблокировать",1) <> 0 Then 
            objExcel.Cells(i, 9).Value = "Блок" 
    else 
        if InStr(1,o.responseText,"заморозили",1) <> 0 Then 
            objExcel.Cells(i, 9).Value = "Замор" 
        else 
            objExcel.Cells(i, 9).Value = "Ok" 
        end if 
    end if 
    i = i+1 
Loop 
 
 
 
 
 
 
' Извлекаю путь данного vbs 
WScript.Echo objExcel.Cells(2, 10).Value 
 
 
objExcel.ActiveWorkbook.Save 
objExcel.Quit

Спасибо за ответ, но, тема старая, я свою проблему давно решил самостоятельно. И думаю что на сайте AutoIt целесообразнее говорить именно о методах реализации решений именно с использованием AutoIt. Имхо :smile: Но за неравнодушие всё равно спасибо!

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

Код:
#include <Excel.au3>
ExelEdit('text.xls','1','2','3','4')

Func ExelEdit($Filename,$ms2,$ms3,$ms4,$ms5) ;ФУНКЦИЯ ВСТАВЛЯЕТ НОВУЮ СТРОКУ (после последней используемой)
;~    ;$Filename (например "\docs\Journal.xls") - Имя файла (по умолчанию использует директория скрипта, поэтому только имя файла и (или) путь к подпапке+имя),
;~    ;$ms - ячейки для вставки через запятую.

;ОТКРЫВАЕМ ФАЙЛ
Local $oExcel = _Excel_Open()
Local $sWorkbook = @ScriptDir & $Filename
Local $oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook, Default, Default, True)

;НАХОДИМ ПОСЛЕДНИЙ ЗАПОЛНЕННЫЙ СТОЛБЕЦ
$nb_columns = $oExcel.ActiveSheet.UsedRange.Columns.Count

; И СТОРОКУ
$nb_rows = $oExcel.ActiveSheet.UsedRange.Rows.Count

;ПИШЕМ ДАННЫЕ В СТРОКУ (опционально)
;$oExcel.Activesheet.Cells($nb_rows+1, 1).Value = "раз"
;$oExcel.Activesheet.Cells($nb_rows+1, 2).Value = "два"
;$oExcel.Activesheet.Cells($nb_rows+1, 3).Value = "три"

; или из массива
Local $myUsernameArray[5] = [$nb_rows,$ms2,$ms3,$ms4,$ms5] ;

For $z = 1 To  UBound($myUsernameArray)
$oExcel.Activesheet.Cells($nb_rows+1, $z).Value = $myUsernameArray[$z-1]
Next

;сохраняем файл
$oWorkbook.Save()
if Not @ERROR then
_Excel_BookClose($oWorkbook, False)
_Excel_Close($oExcel)
Else

;закрываем файл
_Excel_BookClose($oWorkbook, False)
_Excel_Close($oExcel)
EndIf
EndFunc


:IL_AutoIt_1:
 
Верх