<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Do Know Evil - A Blog by Tyler Mulligan &#187; Excel</title>
	<atom:link href="http://www.doknowevil.net/category/computers/software/microsoft/excel/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.doknowevil.net</link>
	<description>Tips and Tricks About Computers, Web Development, Linux, the Internet and the Like</description>
	<lastBuildDate>Thu, 29 Jul 2010 03:37:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Using PHP to Make Excel Easier</title>
		<link>http://www.doknowevil.net/2007/05/12/using-php-to-make-excel-easier/</link>
		<comments>http://www.doknowevil.net/2007/05/12/using-php-to-make-excel-easier/#comments</comments>
		<pubDate>Sat, 12 May 2007 15:38:39 +0000</pubDate>
		<dc:creator>Tyler Mulligan</dc:creator>
				<category><![CDATA[Excel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.doknowevil.net/?p=12</guid>
		<description><![CDATA[Recently, I was presented with the task of counting the number times filenames repeated in an excel document. Being a 16,000+ row file, with well over 500 unique filenames, there was no simple solution in excel. Having some experience exporting excel documents using PHP, I knew importing them wouldn’t be too hard. A few google]]></description>
			<content:encoded><![CDATA[<p>Recently, I was presented with the task of counting the number times filenames repeated in an excel document.  Being a 16,000+ row file, with well over 500 unique filenames, there was no simple solution in excel.</p>
<p>Having some experience exporting excel documents using PHP, I knew importing them wouldn’t be too hard.  A few google searches later and I came across <a href="http://sourceforge.net/projects/xlreader" target="_blank">Excel Reader</a> which fit the bill perfectly.</p>
<p>After sorting my excel document by filename, I created a loop in PHP that would read the first filename, count the number of times it repeated until it changed, then append that data to a string that would be exported to a new excel document once it was done reading the data.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="co1">// Starting at 2 to skip the headers | +1 so it compares the last row</span>
<span class="kw1">for</span> <span class="br0">&#40;</span><span class="re0">$i</span> <span class="sy0">=</span> <span class="nu0">2</span><span class="sy0">;</span> <span class="re0">$i</span> <span class="sy0">&lt;=</span> <span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">sheets</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'numRows'</span><span class="br0">&#93;</span><span class="sy0">+</span><span class="nu0">1</span><span class="sy0">;</span> <span class="re0">$i</span><span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">sheets</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'cells'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy0">==</span><span class="re0">$curFileName</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="re0">$curFileCount</span><span class="sy0">++;</span>
	<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
		<span class="co1">// Output the data line:</span>
<span class="st0">&quot;Device&quot;</span><span class="sy0">,</span><span class="st0">&quot;User&quot;</span><span class="sy0">,</span><span class="st0">&quot;Filename&quot;</span><span class="sy0">,</span><span class="st0">&quot;Filecount&quot;</span>
		<span class="re0">$stringData</span> <span class="sy0">=</span>
<span class="st0">&quot;<span class="es1">\&quot;</span>&quot;</span><span class="sy0">.</span><span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">sheets</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'cells'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\&quot;</span>,<span class="es1">\&quot;</span>&quot;</span><span class="sy0">.</span><span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">sheets</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'cells'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span>
<span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\&quot;</span>,<span class="es1">\&quot;</span>&quot;</span><span class="sy0">.</span><span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">sheets</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'cells'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\&quot;</span>,<span class="es1">\&quot;</span>&quot;</span><span class="sy0">.</span><span class="re0">$curFileCount</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\&quot;</span><span class="es1">\
</span>n&quot;</span><span class="sy0">;</span>
		<a href="http://www.php.net/fwrite"><span class="kw3">fwrite</span></a><span class="br0">&#40;</span><span class="re0">$fh</span><span class="sy0">,</span> <span class="re0">$stringData</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
		<span class="co1">// Reset the count and update the curFileName</span>
		<span class="re0">$curFileName</span> <span class="sy0">=</span> <span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">sheets</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'cells'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy0">;</span>
		<span class="re0">$curFileCount</span><span class="sy0">=</span><span class="nu0">1</span><span class="sy0">;</span>
	<span class="br0">&#125;</span>
	<span class="kw1">echo</span> <span class="st0">&quot;Row: &quot;</span><span class="sy0">.</span><span class="re0">$i</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div>

<p>Of course&#8230; I didn&#8217;t have just one of these files but 6 and manually entering each filename would be a waste of my time.  My software solution for this was to create an &#8220;Input&#8221; and &#8220;Output&#8221; folder and have PHP cycle through the &#8220;Input&#8221; folder.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="co1">// For every file in the dir &quot;Input&quot;, generate a report</span>
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$handle</span> <span class="sy0">=</span> <a href="http://www.php.net/opendir"><span class="kw3">opendir</span></a><span class="br0">&#40;</span><span class="st_h">'Input'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	<span class="kw1">while</span> <span class="br0">&#40;</span><span class="kw4">false</span> <span class="sy0">!==</span> <span class="br0">&#40;</span><span class="re0">$orgFileName</span> <span class="sy0">=</span> <a href="http://www.php.net/readdir"><span class="kw3">readdir</span></a><span class="br0">&#40;</span><span class="re0">$handle</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$orgFileName</span> <span class="sy0">!=</span> <span class="st_h">'..'</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$orgFileName</span> <span class="sy0">!=</span> <span class="st_h">'.'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
			<span class="co1">// Echo the file we're reading, then read that file</span>
			<span class="kw1">echo</span> <span class="re0">$orgFileName</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
			<span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">read</span><span class="br0">&#40;</span><span class="st0">&quot;Input/&quot;</span><span class="sy0">.</span><span class="re0">$orgFileName</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>

<p>Eventually it all came together as such:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="kw2">&lt;?php</span>
&nbsp;
<span class="co1">// Don't change any of this</span>
<span class="kw1">require_once</span> <span class="st_h">'Excel/reader.php'</span><span class="sy0">;</span>
<span class="re0">$data</span> <span class="sy0">=</span> <span class="kw2">new</span> Spreadsheet_Excel_Reader<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">setOutputEncoding</span><span class="br0">&#40;</span><span class="st_h">'CP1251'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// For every file in the dir &quot;Input&quot;, generate a report</span>
<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$handle</span> <span class="sy0">=</span> <a href="http://www.php.net/opendir"><span class="kw3">opendir</span></a><span class="br0">&#40;</span><span class="st_h">'Input'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
	<span class="kw1">while</span> <span class="br0">&#40;</span><span class="kw4">false</span> <span class="sy0">!==</span> <span class="br0">&#40;</span><span class="re0">$orgFileName</span> <span class="sy0">=</span> <a href="http://www.php.net/readdir"><span class="kw3">readdir</span></a><span class="br0">&#40;</span><span class="re0">$handle</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$orgFileName</span> <span class="sy0">!=</span> <span class="st_h">'..'</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$orgFileName</span> <span class="sy0">!=</span> <span class="st_h">'.'</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
			<span class="co1">// Echo the file we're reading</span>
			<span class="kw1">echo</span> <span class="re0">$orgFileName</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
			<span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">read</span><span class="br0">&#40;</span><span class="st0">&quot;Input/&quot;</span><span class="sy0">.</span><span class="re0">$orgFileName</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
			<span class="co1">// Set the first filename to compare</span>
			<span class="re0">$curFileName</span> <span class="sy0">=</span>
<span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">sheets</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'cells'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy0">==</span><span class="re0">$curFileName</span><span class="sy0">;</span>
			<span class="re0">$curFileCount</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp;
			<span class="co1">// Create a file and open it for writing</span>
			<span class="re0">$myFile</span> <span class="sy0">=</span>
<span class="st0">&quot;Output/File_Count-&quot;</span><span class="sy0">.</span><a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;.xls&quot;</span><span class="sy0">,</span><span class="st0">&quot;.csv&quot;</span><span class="sy0">,</span><span class="re0">$orgFileName</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="re0">$fh</span> <span class="sy0">=</span> <a href="http://www.php.net/fopen"><span class="kw3">fopen</span></a><span class="br0">&#40;</span><span class="re0">$myFile</span><span class="sy0">,</span> <span class="st_h">'w'</span><span class="br0">&#41;</span> or <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&quot;can't open file&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
			<span class="co1">// Starting at 2 to skip the headers | +1 so it</span>
compares the last row
			<span class="kw1">for</span> <span class="br0">&#40;</span><span class="re0">$i</span> <span class="sy0">=</span> <span class="nu0">2</span><span class="sy0">;</span> <span class="re0">$i</span> <span class="sy0">&lt;=</span> <span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">sheets</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'numRows'</span><span class="br0">&#93;</span><span class="sy0">+</span><span class="nu0">1</span><span class="sy0">;</span>
<span class="re0">$i</span><span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
				<span class="kw1">if</span>
<span class="br0">&#40;</span><span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">sheets</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'cells'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy0">==</span><span class="re0">$curFileName</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
					<span class="re0">$curFileCount</span><span class="sy0">++;</span>
				<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span>
					<span class="co1">// Output the data line:</span>
<span class="st0">&quot;Device&quot;</span><span class="sy0">,</span><span class="st0">&quot;User&quot;</span><span class="sy0">,</span><span class="st0">&quot;Filename&quot;</span><span class="sy0">,</span><span class="st0">&quot;Filecount&quot;</span>
					<span class="re0">$stringData</span> <span class="sy0">=</span>
<span class="st0">&quot;<span class="es1">\&quot;</span>&quot;</span><span class="sy0">.</span><span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">sheets</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'cells'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\&quot;</span>,<span class="es1">\&quot;</span>&quot;</span><span class="sy0">.</span><span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">sheets</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'cells'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span>
<span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\&quot;</span>,<span class="es1">\&quot;</span>&quot;</span><span class="sy0">.</span><span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">sheets</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'cells'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\&quot;</span>,<span class="es1">\&quot;</span>&quot;</span><span class="sy0">.</span><span class="re0">$curFileCount</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\&quot;</span><span class="es1">\
</span>n&quot;</span><span class="sy0">;</span>
					<a href="http://www.php.net/fwrite"><span class="kw3">fwrite</span></a><span class="br0">&#40;</span><span class="re0">$fh</span><span class="sy0">,</span> <span class="re0">$stringData</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
					<span class="co1">// Reset the count and update the</span>
curFileName
					<span class="re0">$curFileName</span> <span class="sy0">=</span>
<span class="re0">$data</span><span class="sy0">-&gt;</span><span class="me1">sheets</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st_h">'cells'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy0">;</span>
					<span class="re0">$curFileCount</span><span class="sy0">=</span><span class="nu0">1</span><span class="sy0">;</span>
				<span class="br0">&#125;</span>
				<span class="kw1">echo</span> <span class="st0">&quot;Row: &quot;</span><span class="sy0">.</span><span class="re0">$i</span><span class="sy0">.</span><span class="st0">&quot;<span class="es1">\n</span>&quot;</span><span class="sy0">;</span>
			<span class="br0">&#125;</span>
			<span class="co1">// Close file</span>
			<a href="http://www.php.net/fclose"><span class="kw3">fclose</span></a><span class="br0">&#40;</span><span class="re0">$fh</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="br0">&#125;</span>
	<span class="br0">&#125;</span>
<span class="br0">&#125;</span>
<span class="sy1">?&gt;</span></pre></div></div>

<p>My apologies for the less than perfect code, I was on a deadline and perfect code wasn&#8217;t a requirement <img src='http://www.doknowevil.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Here are some screenshots of the script in action.</p>
<p><a href="http://www.doknowevil.net/wp-content/uploads/2007/05/php_filecount-11.png" rel="shadowbox[post-12];player=img;" title="PHP Excel File Count - Screenshot 1"><img src="http://www.doknowevil.net/wp-content/uploads/2007/05/php_filecount-11.png" alt="PHP Excel File Count - Screenshot 1" border="0" width="50%" height="50%" /></a></p>
<p><a href="http://www.doknowevil.net/wp-content/uploads/2007/05/php_filecount-21.png" rel="shadowbox[post-12];player=img;" title="PHP Excel File Count - Screenshot 2"><img src="http://www.doknowevil.net/wp-content/uploads/2007/05/php_filecount-21.png" alt="PHP Excel File Count - Screenshot 2" border="0" width="50%" height="50%" /></a></p>
<p><a href="http://www.doknowevil.net/wp-content/uploads/2007/05/php_filecount-31.png" rel="shadowbox[post-12];player=img;" title="PHP Excel File Count - Screenshot 3"><img src="http://www.doknowevil.net/wp-content/uploads/2007/05/php_filecount-31.png" alt="PHP Excel File Count - Screenshot 3" border="0" /></a></p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.doknowevil.net/2007/05/12/using-php-to-make-excel-easier/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
