Что нового

[Данные, строки] Редактор Excel

Wulk@n

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

Описание:
Здравствуйте пользователи форума Autoit-script
Нужна помощь в написание редактора для *.xls (Microsoft Office Excel )
Есть папка с документами Excel Нужен скрипт способный менять значения в строках и столбцах
Стандартно в Excel делается как "найти и заменить".
Что на что заменить прописывается зарастание
Примечания:
Что бы было понятней Пример файла прилагается !
Желтые значения должны меняться.
PS: файлов в папке может быть n_количество 3 и более данные в файлах одинаковые
Жду ваши варианты Спасибо !
 

Вложения

  • 1.zip
    13.8 КБ · Просмотры: 8

ildar

Осваивающий
Сообщения
252
Репутация
29
Непонятна задача.
1. Нужно заменить во всех файлах .xls значения в определенных ячейках?
2. Менять в одном файле значения в определенных ячейках?
3. Нужно заменить определенные значения во всех файлах .xls в определенных ячейках?
Файлы все одинаковые?
 
Автор
Wulk@n

Wulk@n

Новичок
Сообщения
34
Репутация
0
Может возможно переделать этот Код
Код:
#include <File.au3>

Global $Words[] = ["40702810000000000000","30101810400000000348","44525348"] ; массив слов для удаления
Global $Folder = @DesktopDir & "/Folder" ; путь к папке
Global $Mask = "*" ; маска файлов

Global $Files = _FileListToArrayRec($Folder, $Mask, 1, 1, 0, 2)
If @error Then
  MsgBox(0, @ScriptName, "Обнаружена ошибка (@extended=" & @extended & ")")
  Exit
EndIf

For $i = 1 To $Files[0]
  $Text = FileRead($Files[$i])
  For $j = 0 To UBound($Words) - 1
    $Text = StringReplace($Text, $Words[$j], "411111111111111111111111")
  Next
  $File = FileOpen($Files[$i], 2)
  FileWrite($File, $Text)
  FileClose($File)
Next
 

ildar

Осваивающий
Сообщения
252
Репутация
29
Скрипт можно написать, когда знаешь что хочешь получить. Очень мутно поставлена задача. Как ты видишь его работу? Я запускаю скрипт, он без моего участия заменяет все данные и завершает работу?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
мой вариант. но только для данного документа
Код:
#include <File.au3>
#include <Excel.au3>
;координаты ячеек, в которых меняем текст
Local $array[9] = ['B3', 'W3', 'B7', 'W4', 'D6', 'M6', 'W6', 'H13', 'H15']

;новый текст
Local $arraystr[9] = ['АКБ "Новые Васюки"', 'Новый Бик', 'ООО Ёкарный бабай', 'Номер счета', 'Налоговый номер', 'Какое то там КПП', 'Номер счета', ' ООО "Хвост и яйца"', 'ООО "Ядрена вошь"']

Local $fsf = FileSelectFolder('', '')
If @error Then Exit
Local $oAppl = _Excel_Open(False)
Local $Files = _FileListToArrayRec($fsf, '*.xls',1,1,0,2)

For $i = 1 To $Files[0]
	Local $oWorkbook = _Excel_BookOpen($oAppl, $Files[$i])
	For $n = 0 To UBound($array) - 1
		_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $arraystr[$n], $array[$n])
	Next
	_Excel_BookClose($oWorkbook)
Next
_Excel_Close($oAppl)
если все остальные документы такие же, то будет работать, но если номера ячеек не совпадают, то увы.



Добавлено:
Сообщение автоматически объединено:

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

вариант с поиском
Код:
#include <File.au3>
#include <Excel.au3>

Local $fsf = FileSelectFolder('', '')
If @error Then Exit
Local $oAppl = _Excel_Open(False)
Local $Files = _FileListToArrayRec($fsf, '*.xls', 1, 1, 0, 2)
Local $arraystr[9] = ['АКБ "Новые Васюки"', 'Новый Бик', 'Номер счета', 'Налоговый номер', 'Какое то там КПП', 'Номер счета', 'ООО Ёкарный бабай', ' ООО "Хвост и яйца"', 'ООО "Ядрена вошь"']
Local $array[9] = ['АКБ "ЛАНТА-БАНК" (ЗАО) Г. МОСКВА', '44525348', '30101810400000000348', '7707841234', '770701001', '40702810000000015450', 'ООО "Рога и копыта"', 'ООО "Рога и копыта", ИНН 7707841234, КПП 770701001', 'ООО "Рога и копыта", ИНН 7707841234, КПП 7707010021']

For $i = 1 To $Files[0]
	Local $oWorkbook = _Excel_BookOpen($oAppl, $Files[$i])
	Local $aResult = _Excel_RangeFind($oWorkbook, '*')
	For $w = 0 To UBound($array) - 1
		For $n = 0 To UBound($aResult) - 1
			If StringCompare($aResult[$n][3], $array[$w]) = 0 Then
				$str = StringReplace($aResult[$n][2], '$', '')
				_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $arraystr[$w], $str)
			EndIf
		Next
	Next
	_Excel_BookClose($oWorkbook)
Next
_Excel_Close($oAppl)
 

ivanius

Знающий
Сообщения
74
Репутация
5
10-15 строк кода на VBA прямо в екселе решили бы твою задачу.....
Если нужно будет обращайся, покажу и расскажу.
 
Верх