Что нового

Excel Как скопировать область, чтобы сохранились размеры строк/столбцов

pvnn

Осваивающий
Сообщения
305
Репутация
32
Помогите разобраться с _Excel_RangeCopyPaste
Что я делаю не так

Вставляются данные без учета форматирования
Код:
#include <Excel.au3>
Local $oAppl = _Excel_Open()
$oWorkbook1=_Excel_BookOpen($oAppl, @ScriptDir & "\1.xlsx")
_Excel_RangeCopyPaste($oWorkbook1.ActiveSheet, "A1:D3", 'H1', False, $xlPasteColumnWidths)
 

Вложения

  • 1.zip
    8.2 КБ · Просмотры: 15

edyapd

Осваивающий
Сообщения
380
Репутация
30
У меня как-то так получилось
Код:
$oWorkbook1.ActiveSheet.range("A1:D3").copy
$oWorkbook1.ActiveSheet.range("H1").PasteSpecial($xlPasteColumnWidths)
$oWorkbook1.ActiveSheet.range("H1").PasteSpecial
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
edyapd спасибо, так действительно работает
Интересно, а почему встроенная функция _Excel_RangeCopyPaste все же не работает?
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Не знаю. У меня старая библиотека, а в ней этой функции нет.
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
Так никто и не знает?
 

СН3СН2ОН

Знающий
Сообщения
78
Репутация
12
Да кто его знает. Вот переделал функцию (заменить в UDF)
Код:
Func _Excel_RangeCopyPaste($oWorksheet, $vSourceRange, $vTargetRange = Default, $bCut = Default, $iPaste = Default, $iOperation = Default, $bSkipBlanks = Default, $bTranspose = Default)
	If Not IsObj($oWorksheet) Or ObjName($oWorksheet, 1) <> "_Worksheet" Then Return SetError(1, 0, 0)
	If $bCut = Default Then $bCut = False
	If $vSourceRange = Default And $vTargetRange = Default Then Return SetError(7, 0, 0)
	If Not IsObj($vSourceRange) And $vSourceRange <> Default Then
		$vSourceRange = $oWorksheet.Range($vSourceRange)
		If @error Then Return SetError(2, @error, 0)
	EndIf
	If Not IsObj($vTargetRange) And $vTargetRange <> Default Then
		$vTargetRange = $oWorksheet.Range($vTargetRange)
		If @error Then Return SetError(3, @error, 0)
	EndIf
	If $vSourceRange = Default Then ; Paste from the clipboard
		If $bSkipBlanks = Default Then $bSkipBlanks = False
		If $bTranspose = Default Then $bTranspose = False
		$vTargetRange.PasteSpecial($iPaste, $iOperation, $bSkipBlanks, $bTranspose)
		If @error Then Return SetError(4, @error, 0)
	Else
		If $bCut Then
			$vSourceRange.Cut()
			If $bSkipBlanks = Default Then $bSkipBlanks = False
			If $bTranspose = Default Then $bTranspose = False
			$vTargetRange.PasteSpecial($iPaste, $iOperation, $bSkipBlanks, $bTranspose)
			$vTargetRange.PasteSpecial
			If @error Then Return SetError(5, @error, 0)
		Else
			$vSourceRange.Copy()
			If $bSkipBlanks = Default Then $bSkipBlanks = False
			If $bTranspose = Default Then $bTranspose = False
			$vTargetRange.PasteSpecial($iPaste, $iOperation, $bSkipBlanks, $bTranspose)
			$vTargetRange.PasteSpecial
			If @error Then Return SetError(6, @error, 0)
		EndIf
	EndIf
	If $vTargetRange <> Default Then
		Return $vTargetRange
	Else
		Return 1
	EndIf
EndFunc   ;==>_Excel_RangeCopyPaste
 
Верх