PDA

Показать полную графическую версию : [решено] Excel. Закрепить области из Perl


sergvg
30-07-2009, 15:38
Приветствую, уважаемые участники!

Имею: самописный Perl-скрипт по созданию и заполнению книги Excel данными.
Задача: добавить в скрипт автоматическое закрепление области, так чтобы при прокручивании книги вправо, первых два столбца оставались видимыми.

Пробовал: открыл сгенерированный файл, включил запись макроса, выделил ячейку C1, включил закрепление областей, остановил запись макроса, залез в VBA (Alt+F11), в коде макроса увидел код:


Range("C1").Select
ActiveWindow.FreezePanes = True


Делаю в Perl:

my $excel = Win32::OLE -> GetActiveObject( 'Excel.Application' ) || Win32::OLE -> new( 'Excel.Application', '' );
my $workbook = $excel -> Workbooks -> Add();
my $sheet = $workbook->Worksheets(1);
#................
$sheet->Range("C1")->Select;
$excel -> ActiveWindow -> {FreezePanes} = "True";


В итоге, после выполнения скрипта, область не закрепляется... что я делаю не так ?

amel27
30-07-2009, 17:08
sergvg, попробуй вместо "ActiveWindow" поставить "Windows(1)"

sergvg
31-07-2009, 07:49
amel27, не помогло

amel27
31-07-2009, 09:52
sergvg, так вроде работает:
use Win32::OLE;

my $excel = Win32::OLE -> GetActiveObject('Excel.Application') || Win32::OLE -> new( 'Excel.Application', '' );
my $workbook = $excel -> Workbooks -> Add();
my $sheet = $workbook->Worksheets(1);
#................
$sheet->Range("C1")->Select;
$excel -> ActiveWindow -> {'FreezePanes'} = (1 == 1);

sergvg
31-07-2009, 11:14
о, спасибо, заработало.

достаточно просто 1 присвоить... Смутило меня ещё то, что такой вот код работает:

with ($excel -> ActiveWindow, "FreezePanes" => "True", SplitColumn => 2, SplitRow => 0);


Только делает немного не то.




© OSzone.net 2001-2012