使用 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 控件的必要条件和充分条件是啥?

COM 自动化 Excel 2010 冻结

Access VBA:将表导出到 Excel 2010 数据透视表

如何在保留所有其他工作表的同时覆盖现有 Excel 工作表上的数据?

VSTO:在 Excel 工作表上绘图

实际物理长度与Excel工作表上的点/像素