Сохранение диапазона ячеек в Excel в формате HTML с использованием модуля Win32::OLE Perl

Я хочу сохранить диапазон ячеек на листе XLS в виде файла HTML, используя сценарий Perl. Я погуглил решения этой проблемы. Но так и не нашел.

Однако есть решение, подобное этому, с использованием Excel VBA:

With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _
"C:\Documents and Settings\Tim\Desktop\Page.htm", _
Selection.Parent.Name, _
Selection.Address(), _
xlHtmlStatic, "divExcelExport", _
"TestTitle")
.Publish (True)
.AutoRepublish = False
End With

Итак, я попытался преобразовать это в код Perl, но это дает мне следующие ошибки:

H:\test_code\data>perl a.pl Win32::OLE(0.1702) ошибка 0x800a03ec в METHOD/PROPERTYGET "Добавить" H:\test_code\data>

use strict;
use warnings "all";
use Win32::OLE;
my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || 
            Win32::OLE->new('Excel.Application','Quit');
my $Book = $Excel->Workbooks->Open("H:\\test_code\\data\\test.xls");
my $Sheet = $Book->Worksheets(1);
$Book->PublishObjects->Add({SourceType=>5, # int value for xlSourceRange
                            FileName => "H:\\test_code\\data\\test2.html",
                            Source => $Sheet->Range("A1:B2")->Address,
                            HtmlType => 0, # xlHtmlStatic s int value.
                           });
print Win32::OLE->LastError();
$Book->Close(0);
exit();

Может кто-нибудь предложить решение этой проблемы.

Обратите внимание, что я хочу сохранить все форматирование столбцов (десятичное число, количество цифр, знак $, цвет и т. д.). Приветствуется любое решение, не связанное с использованием коммерческой библиотеки.

Спасибо, Ризван.


person rizwanhudda    schedule 29.03.2011    source источник


Ответы (1)


Это работает для меня, по крайней мере, файл HTML создается:

use strict; use warnings;
use Win32::OLE;
use Win32::OLE::Const 'Microsoft Excel';

my $Excel = Win32::OLE->new('Excel.Application','Quit');
my $Book  = $Excel->Workbooks->Open("C:\\test.xls");
$Book->PublishObjects->Add(xlSourceRange,
    "C:\\output_file.htm", 'Sheet1', '$C$3:$C$10', xlHtmlStatic
)->Publish(1);
$Book->Close(0);
$Excel->Quit;
person bvr    schedule 29.03.2011
comment
Спасибо bvr, похоже, это работает. Уловка заключается в использовании Win32::OLE::Const и прямом использовании константы вместо ее целочисленного значения. - person rizwanhudda; 31.03.2011