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

简介:




本文介绍如何用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",至于为什么,你懂的

 

 
  1. my $filename="test.xls";  
  2.  
  3. @data=([12,8,98],[9,16,99],[7,4,67],[2,64,99],[3,16,67],[1,64,78]);  
  4.  
  5.  
  6.  
  7. $RowCount=scalar(@data)+1;  
  8.  
  9.  
  10.  
  11. print "Content-type: Application/m***cel\n";  
  12.  
  13. print "Content-Disposition: attachment; filename='$filename'\n\n";  
  14.  
  15.  
  16.  
  17. #输出excel格式  
  18.  
  19.  
  20.  
  21. print <<EOFEXCELHEAD;   
  22.  
  23.  
  24.  
  25. <?xml version="1.0"?>  
  26.  
  27. <?mso-application progid="Excel.Sheet"?>  
  28.  
  29. <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
  30.  
  31.  xmlns:o="urn:schemas-microsoft-com:office:office" 
  32.  
  33.  xmlns:x="urn:schemas-microsoft-com:office:excel" 
  34.  
  35.  xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
  36.  
  37.  xmlns:html="http://www.w3.org/TR/REC-html40">  
  38.  
  39.  <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">  
  40.  
  41.   <Created>1996-12-17T01:32:42Z</Created>  
  42.  
  43.   <LastSaved>2000-11-18T06:53:49Z</LastSaved>  
  44.  
  45.   <Version>11.9999</Version>  
  46.  
  47.  </DocumentProperties>  
  48.  
  49.  <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">  
  50.  
  51.   <RemovePersonalInformation/>  
  52.  
  53.  </OfficeDocumentSettings>  
  54.  
  55.  <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">  
  56.  
  57.   <WindowHeight>4530</WindowHeight>  
  58.  
  59.   <WindowWidth>8505</WindowWidth>  
  60.  
  61.   <WindowTopX>480</WindowTopX>  
  62.  
  63.   <WindowTopY>120</WindowTopY>  
  64.  
  65.   <AcceptLabelsInFormulas/>  
  66.  
  67.   <ProtectStructure>False</ProtectStructure>  
  68.  
  69.   <ProtectWindows>False</ProtectWindows>  
  70.  
  71.  </ExcelWorkbook>  
  72.  
  73.  <Styles>  
  74.  
  75.   <Style ss:ID="Default" ss:Name="Normal">  
  76.  
  77.    <Alignment ss:Vertical="Bottom"/>  
  78.  
  79.    <Borders/>  
  80.  
  81.    <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>  
  82.  
  83.    <Interior/>  
  84.  
  85.    <NumberFormat/>  
  86.  
  87.    <Protection/>  
  88.  
  89.   </Style>  
  90.  
  91.   <Style ss:ID="s23">  
  92.  
  93.    <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12" ss:Color="#FFFFFF" 
  94.  
  95.     ss:Bold="1"/>  
  96.  
  97.    <Interior ss:Color="#000000" ss:Pattern="Solid"/>  
  98.  
  99.   </Style>  
  100.  
  101.   <Style ss:ID="s26">  
  102.  
  103.    <Borders>  
  104.  
  105.     <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>  
  106.  
  107.     <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>  
  108.  
  109.     <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>  
  110.  
  111.     <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>  
  112.  
  113.    </Borders>  
  114.  
  115.   </Style>  
  116.  
  117.   <Style ss:ID="s27">  
  118.  
  119.    <Borders>  
  120.  
  121.     <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>  
  122.  
  123.     <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>  
  124.  
  125.     <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>  
  126.  
  127.     <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>  
  128.  
  129.    </Borders>  
  130.  
  131.    <Interior ss:Color="#CCFFCC" ss:Pattern="Solid"/>  
  132.  
  133.   </Style>  
  134.  
  135.  </Styles>  
  136.  
  137.  <Worksheet ss:Name="Sheet1">   
  138.  
  139.   <Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="$RowCount" x:FullColumns="1" 
  140.  
  141.    x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">  
  142.  
  143.    <Column ss:AutoFitWidth="0" ss:Width="99.75"/>  
  144.  
  145.    <Column ss:AutoFitWidth="0" ss:Width="82.5"/>  
  146.  
  147.    <Column ss:AutoFitWidth="0" ss:Width="99"/>  
  148.  
  149.    <Row>  
  150.  
  151.     <Cell ss:StyleID="s23"><Data ss:Type="String">响应时间(ms)</Data></Cell>  
  152.  
  153.     <Cell ss:StyleID="s23"><Data ss:Type="String">带宽(Mbps)</Data></Cell>  
  154.  
  155.     <Cell ss:StyleID="s23"><Data ss:Type="String">成功率(%)</Data></Cell>  
  156.  
  157.    </Row>   
  158.  
  159.  
  160.  
  161. EOFEXCELHEAD  
  162.  
  163.  
  164.  
  165. my $i=0;  
  166.  
  167. for$i(0..$#data){  
  168.  
  169.  
  170.  
  171.  
  172.  
  173. if($i % 2 == 0){   
  174.  
  175. print <<EOFROW  
  176.  
  177.         <Row>  
  178.  
  179.     <Cell ss:StyleID="s26"><Data ss:Type="Number">$data[$i][0]</Data></Cell>  
  180.  
  181.     <Cell ss:StyleID="s26"><Data ss:Type="Number">$data[$i][1]</Data></Cell>  
  182.  
  183.     <Cell ss:StyleID="s26"><Data ss:Type="Number">$data[$i][2]</Data></Cell>  
  184.  
  185.    </Row>  
  186.  
  187.  
  188.  
  189. EOFROW  
  190.  
  191.  
  192.  
  193.     }else{  
  194.  
  195. print <<EOFROW  
  196.  
  197.         <Row>  
  198.  
  199.     <Cell ss:StyleID="s27"><Data ss:Type="Number">$data[$i][0]</Data></Cell>  
  200.  
  201.     <Cell ss:StyleID="s27"><Data ss:Type="Number">$data[$i][1]</Data></Cell>  
  202.  
  203.     <Cell ss:StyleID="s27"><Data ss:Type="Number">$data[$i][2]</Data></Cell>  
  204.  
  205.    </Row>  
  206.  
  207.  
  208.  
  209. EOFROW  
  210.  
  211.  
  212.  
  213.     }  
  214.  
  215. }  
  216.  
  217.  
  218.  
  219. print <<EOFEXCELTAIL;   
  220.  
  221. </Table>  
  222.  
  223.   <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">  
  224.  
  225.    <Print>  
  226.  
  227.     <ValidPrinterInfo/>  
  228.  
  229.     <PaperSizeIndex>9</PaperSizeIndex>  
  230.  
  231.     <HorizontalResolution>300</HorizontalResolution>  
  232.  
  233.     <VerticalResolution>300</VerticalResolution>  
  234.  
  235.    </Print>  
  236.  
  237.    <Selected/>  
  238.  
  239.    <Panes>  
  240.  
  241.     <Pane>  
  242.  
  243.      <Number>3</Number>  
  244.  
  245.      <ActiveRow>1</ActiveRow>  
  246.  
  247.     </Pane>  
  248.  
  249.    </Panes>  
  250.  
  251.    <ProtectObjects>False</ProtectObjects>  
  252.  
  253.    <ProtectScenarios>False</ProtectScenarios>  
  254.  
  255.   </WorksheetOptions>  
  256.  
  257.  </Worksheet>  
  258.  
  259. </Workbook>  
  260.  
  261.  
  262.  
  263. EOFEXCELTAIL  

      本文转自yifangyou 51CTO博客,原文链接:http://blog.51cto.com/yifangyou/607077,如需转载请自行联系原作者


相关文章
|
4月前
|
JSON JavaScript 数据格式
Node.js实现服务器端生成Excel文件(xls格式、xlsx格式文件)并弹出下载文件
Node.js实现服务器端生成Excel文件(xls格式、xlsx格式文件)并弹出下载文件
|
3月前
|
数据库
在Excel中将某一列的格式通过数据分列彻底变为文本格式
在Excel中将某一列的格式通过数据分列彻底变为文本格式
45 0
|
2月前
|
Java Linux 数据安全/隐私保护
Java【代码 16】将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
【2月更文挑战第3天】Java 将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
96 0
|
3月前
|
JSON 数据格式
将json格式的数据快速转换为excel,使用在线工具轻松搞定
将json格式的数据快速转换为excel,使用在线工具轻松搞定
117 0
|
4月前
|
Python
基于Python读取Excel表格文件数据并转换为字典dict格式
基于Python读取Excel表格文件数据并转换为字典dict格式
基于Python读取Excel表格文件数据并转换为字典dict格式
|
4月前
|
数据可视化 数据格式 索引
lindorm时序数据引擎可否将查询结果导成excel格式?
lindorm时序数据引擎可否将查询结果导成excel格式?
33 0
|
4月前
|
数据管理
宜搭流程中,数据管理批量发起如何成功导入 年-月-日 时:分格式数据 当前数据管理批量发起,Excel文本中编辑时间格式如2023-12-07 20:00,批量导入生成后显示为20231207 00:00,请问如何让时:分正确显示。
宜搭流程中,数据管理批量发起如何成功导入 年-月-日 时:分格式数据 当前数据管理批量发起,Excel文本中编辑时间格式如2023-12-07 20:00,批量导入生成后显示为20231207 00:00,请问如何让时:分正确显示。
61 2
|
5月前
|
存储 数据处理 Python
批量读取docx文件中的excel表格格式数据
批量读取docx文件中的excel表格格式数据
68 6
|
5月前
|
XML 测试技术 数据格式
推荐一个跨平台支持Word, Excel, CSV, Email等30多种格式的操作库
推荐一个跨平台支持Word, Excel, CSV, Email等30多种格式的操作库
31 0
|
5月前
|
C#
.net NPOI Excel导入:时间格式2022/5/26导入变成26-5月-2022
​ 1、问题由来 在做一个导入的需求时,测试导入模板,无论导入模板里的日期设置成何种日期格式到代码中都会提示有不正确的格式化数据,加断点调试发现,导入的日期如:Excel表格中是2022/5/26,断点看到的却是26-5月-2022。 2、解决方案 网上查询了几种解决方案,有导入的数据列格式判断转换,日期格式强转等等,都没什么效果,最后解决的方法如下: // NPOI导入日期格式处理 string mytime = dateStr.Trim(); // dateStr为Excel导入的日期值 IFormatProvider culture = new CultureInfo("zh-CN"
36 0