<html>
<head>
<style>
P
{
margin:0px;
padding:0px
}
body
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body><blockquote><hr id="EC_stopSpelling">Date: Thu, 28 Jun 2007 11:39:27 -0300<br>From: roanbrasil@gmail.com<br><br>Outra dúvida galera, esse módulo <a href="http://search.cpan.org/%7Eszabgab/Spreadsheet-ParseExcel-0.32/lib/Spreadsheet/ParseExcel.pm" target="_blank">http://search.cpan.org/~szabgab/Spreadsheet-ParseExcel-0.32/lib/Spreadsheet/ParseExcel.pm
</a> tem para windows tbm?<br>Posi eu uso na minha máquina linux, já até instalei ele. Mas gostaria de saber se para Windows ou como faço para saber pois nunca mexi no Windows e apesar de meu ambiente de desenvolvimento ser linux ele rodará no windows. Então gostaria de um bem comum entre os dois 
S.O. Como faço para saber isso?<br><br></blockquote>Eu acho que a resposta é um pouco mais complexa. Se você está em ambiente não-Microsoft, você não vai ter opções diferentes de usar o Spreadsheet-ParseExcel e derivados.<br><br>Se você está em ambiente Windows, talvez seja melhor você usar o módulo Win32::OLE. Se sua planilha tem dados "simples" para serem extraídos e a planilha é muito grande, você não terá problemas. Do contrário, melhor usar o OLE, principalmente se você precisa verificar/manipular campos de datas e moeda.<br><br>Eu tentei usar o Spreadsheet-ParseExcel em planilhas com dados suficientes para estourar a capacidade de um arquivo Excel e o script começou a utilizar memória como se ela não fosse mais acabar... eu tive que matar o processo. Depois fiz uma tentativa usando Win32::OLE, lendo linha a linha, célula à célula... funcionou, mas ficou muito lento. Acabei por utilizar leitura de uma vez só selecionando o intervalo todo das células e jogando tudo em mémoria... agora o programa chega nos 100MB (!), mas mantem isso por apenas alguns segundos antes de copiar o conteúdo para um arquivo texto e voltar a trabalhar de forma mais "racional".<br><br>De lambuja vai o profiling que eu fiz e guardei de curiosidade:<br><br>"READING EACH CELL BY USING OLE<br><br>Total Elapsed Time = 263.6139 Seconds<br>&nbsp; User+System Time = 73.22391 Seconds<br>Exclusive Times<br>%Time ExclSec CumulS #Calls sec/call Csec/c&nbsp; Name<br>&nbsp;49.5&nbsp;&nbsp; 36.30 35.375 564737&nbsp;&nbsp; 0.0001 0.0001&nbsp; Win32::OLE::Dispatch<br>&nbsp;34.2&nbsp;&nbsp; 25.08 25.082 169420&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::Tie::Fetch<br>&nbsp;21.1&nbsp;&nbsp; 15.49 14.763 564735&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::DESTROY<br>&nbsp;15.3&nbsp;&nbsp; 11.22 93.547&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; 11.221 93.546&nbsp; main::parse_excel<br>&nbsp;2.42&nbsp;&nbsp; 1.773 36.731 564736&nbsp;&nbsp; 0.0000 0.0001&nbsp; Win32::OLE::AUTOLOAD<br>&nbsp;1.95&nbsp;&nbsp; 1.427&nbsp; 5.844&nbsp; 87786&nbsp;&nbsp; 0.0000 0.0001&nbsp; Win32::OLE::Variant::new<br>&nbsp;1.21&nbsp;&nbsp; 0.888&nbsp; 0.888 131679&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::Variant::Date<br>&nbsp;1.04&nbsp;&nbsp; 0.764&nbsp; 0.764&nbsp; 43893&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::Variant::Number<br>&nbsp;0.87&nbsp;&nbsp; 0.639 25.721 169420&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::Tie::FETCH<br>&nbsp;0.49&nbsp;&nbsp; 0.360&nbsp; 0.360&nbsp; 43893&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::Variant::As<br>&nbsp;0.08&nbsp;&nbsp; 0.059&nbsp; 0.059 131679&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::Variant::DESTROY<br>&nbsp;0.06&nbsp;&nbsp; 0.047&nbsp; 0.047&nbsp; 43893&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::Variant::VT_R8<br>&nbsp;0.02&nbsp;&nbsp; 0.018&nbsp; 0.018&nbsp; 43893&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::Variant::VT_DATE<br>&nbsp;0.02&nbsp;&nbsp; 0.017&nbsp; 0.314&nbsp; 43893&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::Variant::__ANON__<br>&nbsp;0.02&nbsp;&nbsp; 0.016&nbsp; 0.016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; 0.0160 0.0160&nbsp; Win32::OLE::new<br><br>READING EVERYTHING AT ONCE AND LOOP OVER ARRAYS REFS<br><br>Total Elapsed Time = 11.57211 Seconds<br>&nbsp; User+System Time = 6.802119 Seconds<br>Exclusive Times<br>%Time ExclSec CumulS #Calls sec/call Csec/c&nbsp; Name<br>&nbsp;43.1&nbsp;&nbsp; 2.938&nbsp; 2.938&nbsp;&nbsp;&nbsp;&nbsp; 16&nbsp;&nbsp; 0.1836 0.1836&nbsp; Win32::OLE::Tie::Fetch<br>&nbsp;41.2&nbsp;&nbsp; 2.803&nbsp; 9.004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; 2.8028 9.0038&nbsp; main::parse_excel<br>&nbsp;19.6&nbsp;&nbsp; 1.339&nbsp; 1.437&nbsp; 87786&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::Variant::new<br>&nbsp;15.1&nbsp;&nbsp; 1.030&nbsp; 1.030 131679&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::Variant::Date<br>&nbsp;13.1&nbsp;&nbsp; 0.893&nbsp; 0.893&nbsp; 43893&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::Variant::Number<br>&nbsp;5.12&nbsp;&nbsp; 0.348&nbsp; 0.348&nbsp; 43893&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::Variant::As<br>&nbsp;2.19&nbsp;&nbsp; 0.149&nbsp; 0.149 219710&nbsp;&nbsp; 0.0000 0.0000&nbsp; Win32::OLE::Variant::DESTROY<br>&nbsp;0.47&nbsp;&nbsp; 0.032&nbsp; 0.032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp; 0.0107 0.0106&nbsp; ActivePerl::Config::BEGIN<br>&nbsp;0.24&nbsp;&nbsp; 0.016&nbsp; 0.016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; 0.0160 0.0160&nbsp; Win32::OLE::Uninitialize<br>&nbsp;0.24&nbsp;&nbsp; 0.016&nbsp; 0.016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp; 0.0053 0.0053&nbsp; vars::BEGIN<br>&nbsp;0.22&nbsp;&nbsp; 0.015&nbsp; 0.015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; 0.0150 0.0150&nbsp; Win32::OLE::new<br>&nbsp;0.22&nbsp;&nbsp; 0.015&nbsp; 0.015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; 0.0150 0.0150&nbsp; warnings::BEGIN<br>&nbsp;0.22&nbsp;&nbsp; 0.015&nbsp; 0.077&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp; 0.0030 0.0155&nbsp; main::BEGIN<br>&nbsp;0.00&nbsp;&nbsp; 0.000&nbsp; 0.000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; 0.0000 0.0000&nbsp; Config::launcher<br>&nbsp;0.00&nbsp;&nbsp; 0.000&nbsp; 0.000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp; 0.0000 0.0000&nbsp; Config::fetch_string"<br><br>Esse artigo é introdutório, então não deixe de testar alguns módulos novos que já existem no CPAN: http://www.ibm.com/developerworks/library/l-pexcel/<br><br>Mas se você vai operar em planilhas com dados complexos ou muitos dados, eu recomendo utilizar Win32::OLE. A Microsoft já tem bugs demais em seus produtos e utilizar sistemas que TEM que praticamente usar de engenharia reversa para chegar num resultado aceitável é meio arriscado.<br><br>[]'s<br>Alceu<br><blockquote></blockquote><br /><hr />Change is good. See what's different about Windows Live Hotmail. <a href='http://www.windowslive-hotmail.com/learnmore/default.html?locale=en-us&ocid=RMT_TAGLM_HMWL_reten_changegood_0607' target='_new'>Check it out!</a></body>
</html>