您的位置:首页 > 其它

用perl生成带格式的excel(跨平台)

2011-07-09 16:07 302 查看
本文介绍如何用perl生成excel,而且excel的样式可以自己事先设计好,不需要在windows下生成。
1.创建一个模板excel
新建一个test.xls文件,打开
自己设计样式如下:





2.把test.xls另存为xml表格 test.xml





3.用文本编辑器打开test.xml,我要介绍要用代码操作的地方





4.代码操作完后的结果,注意生成完后的文件的后缀必须改为.xls,这样就可以用excel直接打开了,只要有了模板excel之后,就可以在linux下把文件生成了。





5.代码,下面的代码使用时,注意:若是不是在web下使用,请把第1,2个print注释掉。使用时需要把代码保存为UTF-8格式,下面的m***cel="ms"+"excel",至于为什么,你懂的



my $filename="test.xls";

@data=([12,8,98],[9,16,99],[7,4,67],[2,64,99],[3,16,67],[1,64,78]);

$RowCount=scalar(@data)+1;

print "Content-type: Application/m***cel\n";

print "Content-Disposition: attachment; filename='$filename'\n\n";

#输出excel格式

print <<EOFEXCELHEAD;

<?xml version="1.0"?>

<?mso-application progid="Excel.Sheet"?>

<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"

xmlns:o="urn:schemas-microsoft-com:office:office"

xmlns:x="urn:schemas-microsoft-com:office:excel"

xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"

xmlns:html="http://www.w3.org/TR/REC-html40">

<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">

<Created>1996-12-17T01:32:42Z</Created>

<LastSaved>2000-11-18T06:53:49Z</LastSaved>

<Version>11.9999</Version>

</DocumentProperties>

<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">

<RemovePersonalInformation/>

</OfficeDocumentSettings>

<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">

<WindowHeight>4530</WindowHeight>

<WindowWidth>8505</WindowWidth>

<WindowTopX>480</WindowTopX>

<WindowTopY>120</WindowTopY>

<AcceptLabelsInFormulas/>

<ProtectStructure>False</ProtectStructure>

<ProtectWindows>False</ProtectWindows>

</ExcelWorkbook>

<Styles>

<Style ss:ID="Default" ss:Name="Normal">

<Alignment ss:Vertical="Bottom"/>

<Borders/>

<Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>

<Interior/>

<NumberFormat/>

<Protection/>

</Style>

<Style ss:ID="s23">

<Font ss:FontName="宋体" x:CharSet="134" ss:Size="12" ss:Color="#FFFFFF"

ss:Bold="1"/>

<Interior ss:Color="#000000" ss:Pattern="Solid"/>

</Style>

<Style ss:ID="s26">

<Borders>

<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>

<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>

<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>

<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>

</Borders>

</Style>

<Style ss:ID="s27">

<Borders>

<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>

<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>

<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>

<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>

</Borders>

<Interior ss:Color="#CCFFCC" ss:Pattern="Solid"/>

</Style>

</Styles>

<Worksheet ss:Name="Sheet1">

<Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="$RowCount" x:FullColumns="1"

x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">

<Column ss:AutoFitWidth="0" ss:Width="99.75"/>

<Column ss:AutoFitWidth="0" ss:Width="82.5"/>

<Column ss:AutoFitWidth="0" ss:Width="99"/>

<Row>

<Cell ss:StyleID="s23"><Data ss:Type="String">响应时间(ms)</Data></Cell>

<Cell ss:StyleID="s23"><Data ss:Type="String">带宽(Mbps)</Data></Cell>

<Cell ss:StyleID="s23"><Data ss:Type="String">成功率(%)</Data></Cell>

</Row>

EOFEXCELHEAD

my $i=0;

for$i(0..$#data){

if($i % 2 == 0){

print <<EOFROW

<Row>

<Cell ss:StyleID="s26"><Data ss:Type="Number">$data[$i][0]</Data></Cell>

<Cell ss:StyleID="s26"><Data ss:Type="Number">$data[$i][1]</Data></Cell>

<Cell ss:StyleID="s26"><Data ss:Type="Number">$data[$i][2]</Data></Cell>

</Row>

EOFROW

}else{

print <<EOFROW

<Row>

<Cell ss:StyleID="s27"><Data ss:Type="Number">$data[$i][0]</Data></Cell>

<Cell ss:StyleID="s27"><Data ss:Type="Number">$data[$i][1]</Data></Cell>

<Cell ss:StyleID="s27"><Data ss:Type="Number">$data[$i][2]</Data></Cell>

</Row>

EOFROW

}

}

print <<EOFEXCELTAIL;

</Table>

<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">

<Print>

<ValidPrinterInfo/>

<PaperSizeIndex>9</PaperSizeIndex>

<HorizontalResolution>300</HorizontalResolution>

<VerticalResolution>300</VerticalResolution>

</Print>

<Selected/>

<Panes>

<Pane>

<Number>3</Number>

<ActiveRow>1</ActiveRow>

</Pane>

</Panes>

<ProtectObjects>False</ProtectObjects>

<ProtectScenarios>False</ProtectScenarios>

</WorksheetOptions>

</Worksheet>

</Workbook>

EOFEXCELTAIL


本文出自 “一方有” 博客,请务必保留此出处http://yifangyou.blog.51cto.com/900206/607077
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: