﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-纸质笔记本-随笔分类-Python</title><link>http://www.cppblog.com/zhaoyg/category/20143.html</link><description>记录点滴，成就未来</description><language>zh-cn</language><lastBuildDate>Sun, 28 Oct 2012 11:29:22 GMT</lastBuildDate><pubDate>Sun, 28 Oct 2012 11:29:22 GMT</pubDate><ttl>60</ttl><item><title>关于编写Excel脚本的一点收获</title><link>http://www.cppblog.com/zhaoyg/archive/2012/10/28/193980.html</link><dc:creator>zhaoyg</dc:creator><author>zhaoyg</author><pubDate>Sun, 28 Oct 2012 10:15:00 GMT</pubDate><guid>http://www.cppblog.com/zhaoyg/archive/2012/10/28/193980.html</guid><wfw:comment>http://www.cppblog.com/zhaoyg/comments/193980.html</wfw:comment><comments>http://www.cppblog.com/zhaoyg/archive/2012/10/28/193980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zhaoyg/comments/commentRss/193980.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zhaoyg/services/trackbacks/193980.html</trackback:ping><description><![CDATA[为帮助他人统计excel中的数据，我用python写了一个读写excel文件的脚本。<br />虽然最终功能实现了但是速度却很慢，处理一个7列，4K行数据的excel文件用了3分钟左右的时间，后来了解到是我把接口用错了。<br /><br />脚本在读取excel文件时是以 行 为单位读取的，而我在实现读取整行时是一个单元格一个单元格的读取，然后将这些单元格在拼成一行，如下面代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">ValidRowCount&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;self.m_xlsSheet.UsedRange.Rows.Count<br />ValidColCount&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;self.m_xlsSheet.UsedRange.Columns.Count<br />indexRow&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(indexRow&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;ValidRowCount):<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;indexCol&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;rowData&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;[];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;indexCol&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;ValidColCount:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;self.m_xlsSheet.Cells(indexRow&nbsp;,&nbsp;indexCol).Value<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;val:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowData.append(val)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rowData.append(</span><span style="color: #800000; ">''</span><span style="color: #000000; ">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexCol&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;</span></div><br />后来了解到可以<span id="nsrTitle">通过<strong>Sheets</strong></span><span id="nsrTitle"><strong>.Range</strong></span> 一次性读取一个区域的数据，于是代码改成了：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(indexRow&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;ValidRowCount):<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;indexCol&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;rowData&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;[];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;first&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;self.m_xlsSheet.Cells(indexRow&nbsp;,&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;self.m_xlsSheet.Cells(indexRow&nbsp;,&nbsp;ValidColCount);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;rowDatas&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;list(self.m_xlsSheet.Range(first&nbsp;,&nbsp;end).Value)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;indexCol&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span></div><br /><div>用修改后的再测了下，同样的文件只用了50秒左右，比原先的省了2/3的时间。<br />后来又增加了每次的读取亮，速度又快了不少。<br /> </div><img src ="http://www.cppblog.com/zhaoyg/aggbug/193980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zhaoyg/" target="_blank">zhaoyg</a> 2012-10-28 18:15 <a href="http://www.cppblog.com/zhaoyg/archive/2012/10/28/193980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>