另类方法实现对excel的操作
前一段因为数据提取的需要,需要在linux下对数据进行提取,并导出为execl格式。诚然,在linux下实现对excel文件的生成的方法很多。比较常见的就是利用perl和php语言及其扩展模块实现对excel文件的格式化操作及数据的写入、更改。不过这种现方式实现起来都比较复杂,一般都需要先安装相关的模块,再写复杂的格式化的语句,然后才是数据的操作。后来在网上查看到一篇关于利于excel的xml格式实现对excel文件的数据操作的方法。感觉很新颖,现拿来一块学习下。
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”,至于为什么,你懂的。
1my $filename="test.xls";
2@data=([12,8,98],[9,16,99],[7,4,67],[2,64,99],[3,16,67],[1,64,78]);
3
4$RowCount=scalar(@data)+1;
5
6print "Content-type: Application/m***celn";
7print "Content-Disposition: attachment; filename='$filename'nn";
8
9#输出excel格式
10
11print <<EOFEXCELHEAD;
12
13<?xml version="1.0"?>
14<?mso-application progid="Excel.Sheet"?>
15<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
16 xmlns:o="urn:schemas-microsoft-com:office:office"
17 xmlns:x="urn:schemas-microsoft-com:office:excel"
18 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
19 xmlns:html="http://www.w3.org/TR/REC-html40">
20 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
21 <Created>1996-12-17T01:32:42Z</Created>
22 <LastSaved>2000-11-18T06:53:49Z</LastSaved>
23 <Version>11.9999</Version>
24 </DocumentProperties>
25 <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
26 <RemovePersonalInformation/>
27 </OfficeDocumentSettings>
28 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
29 <WindowHeight>4530</WindowHeight>
30 <WindowWidth>8505</WindowWidth>
31 <WindowTopX>480</WindowTopX>
32 <WindowTopY>120</WindowTopY>
33 <AcceptLabelsInFormulas/>
34 <ProtectStructure>False</ProtectStructure>
35 <ProtectWindows>False</ProtectWindows>
36 </ExcelWorkbook>
37 <Styles>
38 <Style ss:ID="Default" ss:Name="Normal">
39 <Alignment ss:Vertical="Bottom"/>
40 <Borders/>
41 <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>
42 <Interior/>
43 <NumberFormat/>
44 <Protection/>
45 </Style>
46 <Style ss:ID="s23">
47 <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12" ss:Color="#FFFFFF"
48 ss:Bold="1"/>
49 <Interior ss:Color="#000000" ss:Pattern="Solid"/>
50 </Style>
51 <Style ss:ID="s26">
52 <Borders>
53 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
54 <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
55 <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
56 <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
57 </Borders>
58 </Style>
59 <Style ss:ID="s27">
60 <Borders>
61 <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
62 <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
63 <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
64 <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
65 </Borders>
66 <Interior ss:Color="#CCFFCC" ss:Pattern="Solid"/>
67 </Style>
68 </Styles>
69 <Worksheet ss:Name="Sheet1">
70 <Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="$RowCount" x:FullColumns="1"
71 x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
72 <Column ss:AutoFitWidth="0" ss:Width="99.75"/>
73 <Column ss:AutoFitWidth="0" ss:Width="82.5"/>
74 <Column ss:AutoFitWidth="0" ss:Width="99"/>
75 <Row>
76 <Cell ss:StyleID="s23"><Data ss:Type="String">响应时间(ms)</Data></Cell>
77 <Cell ss:StyleID="s23"><Data ss:Type="String">带宽(Mbps)</Data></Cell>
78 <Cell ss:StyleID="s23"><Data ss:Type="String">成功率(%)</Data></Cell>
79 </Row>
80
81EOFEXCELHEAD
82
83my $i=0;
84for$i(0..$#data){
85
86
87if($i % 2 == 0){
88print <<EOFROW
89 <Row>
90 <Cell ss:StyleID="s26"><Data ss:Type="Number">$data[$i][0]</Data></Cell>
91 <Cell ss:StyleID="s26"><Data ss:Type="Number">$data[$i][1]</Data></Cell>
92 <Cell ss:StyleID="s26"><Data ss:Type="Number">$data[$i][2]</Data></Cell>
93 </Row>
94
95EOFROW
96
97 }else{
98print <<EOFROW
99 <Row>
100 <Cell ss:StyleID="s27"><Data ss:Type="Number">$data[$i][0]</Data></Cell>
101 <Cell ss:StyleID="s27"><Data ss:Type="Number">$data[$i][1]</Data></Cell>
102 <Cell ss:StyleID="s27"><Data ss:Type="Number">$data[$i][2]</Data></Cell>
103 </Row>
104
105EOFROW
106
107 }
108}
109
110print <<EOFEXCELTAIL;
111</Table>
112 <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
113 <Print>
114 <ValidPrinterInfo/>
115 <PaperSizeIndex>9</PaperSizeIndex>
116 <HorizontalResolution>300</HorizontalResolution>
117 <VerticalResolution>300</VerticalResolution>
118 </Print>
119 <Selected/>
120 <Panes>
121 <Pane>
122 <Number>3</Number>
123 <ActiveRow>1</ActiveRow>
124 </Pane>
125 </Panes>
126 <ProtectObjects>False</ProtectObjects>
127 <ProtectScenarios>False</ProtectScenarios>
128 </WorksheetOptions>
129 </Worksheet>
130</Workbook>
131
132EOFEXCELTAIL
当然上面后一部分提供的对代码的操作是基于perl实现的,个人认为。其是作者帮我们提供了一种新颖的实现方法,利于xml文件导出并且形成格式后。后面的数据部分的操作就是对xml文件的修改罢了。这时候通过shell、perl、php、c、java、vb、甚至是bat批处理任意方式去处理后面的数据都无所谓了。
最后,懒一点,具体perl下对excel下的操作不再写了,给几个参照资源看下吧!
perl平台下exel的模块:http://search.cpan.org/search?m=all&q=excel&s=1
CPAN提供的Spreadsheet::WriteExcel操作的说明:http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel-2.37/
perl下对excel操作的示例:http://liang573728.itpub.net/post/37715/485310
perl连结数据库对excel操作的示例:http://liang573728.itpub.net/post/37715/511396
感觉提供新颖思路的那位仁兄,其原文为:http://blog.chinaunix.net/uid-11121450-id-193355.html
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/linglei-excel/783.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.