2

XML マップが定義された Excel 2010 スプレッドシートがあります。Perl を使用して、ワークシートを XML データとして保存したいと考えています。XML マップ ファイルをエクスポートする必要はありません。Excel 内から、[ファイル] > [名前を付けて保存] > [ファイルの種類: XML データ] を選択できます。これは私が作成したい出力ですが、私の Perl スクリプトからのものです。

SaveAsenum 6 のコマンドを使用してワークシートを CSV 形式で出力できますSaveAs。enum 46 を使用して XML 形式でスプレッドシートを出力することもできますが、これは私が望むものではありません。XMLデータだけが欲しい..

機能があるようですが、SaveAsXMLData機能させることができません。どんな助けでも感謝します。

use strict;
use warnings;

use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Excel';
use Win32::OLE::Variant;
use Win32::OLE::NLS qw(:LOCALE :DATE);

$Win32::OLE::Warn = 3; # Die on Errors.

my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
            || Win32::OLE->new('Excel.Application', 'Quit');

$Excel->{DisplayAlerts}=0;

my $excel_file = 'c:\\temp\\master.xlsx';
my $csv_file   = 'c:\\temp\\master.csv';
my $xml_file   = 'c:\\temp\\master.xml';

my $workbook = $Excel->Workbooks->Open($excel_file);

# Alt+F11 in Excel to start VBA and after that F2 to start Object browser.
# 6 is CSV format
# 46 is XML spreadsheet
$workbook->SaveAs( $csv_file, 6 );

# Now just the XML Data
# The map is called MDBAC_Map
my $objMapToExport = $Excel->Workbooks->XmlMaps("MDBAC_Map");
$workbook->SaveAsXMLData( $xml_file, $objMapToExport );

$workbook->Close();
$Excel->Quit();
4

1 に答える 1

1

これを自分で修正しました(私は99%そこにいました!)。Excel 内でマクロ レコーダーを使用して、必要な関数呼び出しを次のように確認しました。

ChDir "C:\temp"
ActiveWorkbook.SaveAsXMLData Filename:="C:\temp\master.xml", Map:= _
        ActiveWorkbook.XmlMaps("MDBAC_Map")

XML マップをエクスポートするためのコード行が間違っています。上記のコードを次のように変更すると、スクリプトは正常に動作します。

my $objMapToExport  = $workbook->XmlMaps("MDBAC_Map");
于 2013-01-28T12:14:28.827 に答える