使用 Perl 在 Excel 2010 工作表上保存 AsXMLData
Posted
技术标签:
【中文标题】使用 Perl 在 Excel 2010 工作表上保存 AsXMLData【英文标题】:Using Perl to SaveAsXMLData on Excel 2010 Worksheet 【发布时间】:2013-01-28 10:50:41 【问题描述】:我有一个 Excel 2010 电子表格,其中定义了 XML 映射。使用 Perl 我想将工作表保存为 XML 数据。我不需要导出 XML 映射文件。在 Excel 中,我可以选择“文件 > 另存为 > 另存为类型:XML 数据”。这是我要创建的输出,但来自我的 Perl 脚本。
我可以使用带有枚举 6 的 SaveAs
命令以 CSV 格式输出工作表。我还可以使用带有枚举 46 的 SaveAs
以 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();
【问题讨论】:
【参考方案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");
【讨论】:
以上是关于使用 Perl 在 Excel 2010 工作表上保存 AsXMLData的主要内容,如果未能解决你的问题,请参考以下文章
直接在 Excel 工作表上使用 ActiveX 控件的必要条件和充分条件是啥?
Access VBA:将表导出到 Excel 2010 数据透视表