Что нового

[Автоматизация] Перенос данных из таблица1 в таблица2

Anufriy

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

Добрый день
подскажите каким образом сделать есть две таблицы .xls
таблица1, берем из столбца A название товара и из столбца C цену товара, идем в таблица2 ищем столбце B аналогичное название и в столбце E удаляем старую цену и вставляем новую.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
С примером таблиц было-бы проще, но вот, попробуйте такой вариант :
(На всякий случай сохраняйте исходники таблиц , что-бы ничего не поломать безвозвратно)
Код:
#include <Excel.au3>

Local $sFile1 = FileOpenDialog('Выбрать файл таблицы 1', @ScriptDir, 'Файлы EXCEL(*.xls;*.xlsx)', 1)
Local $sFile2 = FileOpenDialog('Выбрать файл таблицы 2', @ScriptDir, 'Файлы EXCEL(*.xls;*.xlsx)', 1)

Local $oExcel = _Excel_Open(False)

;Читаем в массив книгу 1
Local $oWorkbook1 = _Excel_BookOpen($oExcel, $sFile1)
Local $aBook1 = _Excel_RangeRead($oWorkbook1)
_Excel_BookClose($oWorkbook1)

;Читаем в массив книгу 2
Local $oWorkbook2 = _Excel_BookOpen($oExcel, $sFile2)
Local $aBook2 = _Excel_RangeRead($oWorkbook2)

For $i = 0 To UBound($aBook1) - 1
	Local $sName = $aBook1[$i][0]
	For $j = 0 To UBound($aBook2) - 1
		If $Name = $aBook2[$j][1] Then
			$iCena = $aBook1[$i][2]
			_ExcelWriteCell($oWorkbook2, $iCena, $j + 1, 5)
		EndIf
	Next

Next

_Excel_BookSave($oWorkbook2)
_Excel_BookClose($oWorkbook2)
_Excel_Close($oExcel)

; Функция записи значения в таблицу Excel со старой UDF (мне так удобнее)
Func _ExcelWriteCell($oExcel, $sValue, $sRangeOrRow, $iColumn = 1)
	If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
	If Not StringRegExp($sRangeOrRow, "[A-Z,a-z]", 0) Then
		If $sRangeOrRow < 1 Then Return SetError(2, 0, 0)
		If $iColumn < 1 Then Return SetError(2, 1, 0)
		$oExcel.Activesheet.Cells($sRangeOrRow, $iColumn).Value = $sValue
		Return 1
	Else
		$oExcel.Activesheet.Range($sRangeOrRow).Value = $sValue
		Return 1
	EndIf
EndFunc   ;==>_ExcelWriteCell
 
Автор
A

Anufriy

Новичок
Сообщения
3
Репутация
0
Добавил две таблицы
из Таблица1 берем название ищем строчку с таким названием в Таблица2, если находим то обновляем цену в столбце с ценой. Если не находим то пропускаем, берем из следующей строки название.
 

Вложения

  • таблица.ZIP
    16.5 КБ · Просмотры: 4

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Вот, чуть изменил первоначальный вариант под Ваши таблицы, проверяйте
Код:
#include <Array.au3>
#include <Excel.au3>

Local $sFile1 = FileOpenDialog('Выбрать файл таблицы 1', @ScriptDir, 'Файлы EXCEL(*.xls;*.xlsx)', 1)
Local $sFile2 = FileOpenDialog('Выбрать файл таблицы 2', @ScriptDir, 'Файлы EXCEL(*.xls;*.xlsx)', 1)


Local $oExcel = _Excel_Open(False)

;Читаем в массив книгу 1
Local $oWorkbook1 = _Excel_BookOpen($oExcel, $sFile1)
If @error Then ConsoleWrite('error book open ' & @error & @CRLF)
Local $aBook1 = _Excel_RangeRead($oWorkbook1, Default, Default, Default, True)
If @error Then ConsoleWrite('error book read ' & @error & @CRLF)
_Excel_BookClose($oWorkbook1)

;Читаем в массив книгу 2
Local $oWorkbook2 = _Excel_BookOpen($oExcel, $sFile2)
Local $aBook2 = _Excel_RangeRead($oWorkbook2)

For $i = 0 To UBound($aBook1) - 1
	Local $sName = $aBook1[$i][1]
	For $j = 0 To UBound($aBook2) - 1
		If $sName = $aBook2[$j][0] Then
			$iCena = $aBook1[$i][3]
			_ExcelWriteCell($oWorkbook2, $iCena, $j + 1, 5)
		EndIf
	Next

	;ConsoleWrite($sName & @CRLF)
Next

_Excel_BookSave($oWorkbook2)
_Excel_BookClose($oWorkbook2)
_Excel_Close($oExcel)

; Функция записи значения в таблицу Excel со старой UDF (мне так удобнее)
Func _ExcelWriteCell($oExcel, $sValue, $sRangeOrRow, $iColumn = 1)
	If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
	If Not StringRegExp($sRangeOrRow, "[A-Z,a-z]", 0) Then
		If $sRangeOrRow < 1 Then Return SetError(2, 0, 0)
		If $iColumn < 1 Then Return SetError(2, 1, 0)
		$oExcel.Activesheet.Cells($sRangeOrRow, $iColumn).Value = $sValue
		Return 1
	Else
		$oExcel.Activesheet.Range($sRangeOrRow).Value = $sValue
		Return 1
	EndIf
EndFunc   ;==>_ExcelWriteCell
 
Верх