<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> User+System Time = 73.22391 Seconds<br>Exclusive Times<br>%Time ExclSec CumulS #Calls sec/call Csec/c Name<br> 49.5 36.30 35.375 564737 0.0001 0.0001 Win32::OLE::Dispatch<br> 34.2 25.08 25.082 169420 0.0000 0.0000 Win32::OLE::Tie::Fetch<br> 21.1 15.49 14.763 564735 0.0000 0.0000 Win32::OLE::DESTROY<br> 15.3 11.22 93.547 1 11.221 93.546 main::parse_excel<br> 2.42 1.773 36.731 564736 0.0000 0.0001 Win32::OLE::AUTOLOAD<br> 1.95 1.427 5.844 87786 0.0000 0.0001 Win32::OLE::Variant::new<br> 1.21 0.888 0.888 131679 0.0000 0.0000 Win32::OLE::Variant::Date<br> 1.04 0.764 0.764 43893 0.0000 0.0000 Win32::OLE::Variant::Number<br> 0.87 0.639 25.721 169420 0.0000 0.0000 Win32::OLE::Tie::FETCH<br> 0.49 0.360 0.360 43893 0.0000 0.0000 Win32::OLE::Variant::As<br> 0.08 0.059 0.059 131679 0.0000 0.0000 Win32::OLE::Variant::DESTROY<br> 0.06 0.047 0.047 43893 0.0000 0.0000 Win32::OLE::Variant::VT_R8<br> 0.02 0.018 0.018 43893 0.0000 0.0000 Win32::OLE::Variant::VT_DATE<br> 0.02 0.017 0.314 43893 0.0000 0.0000 Win32::OLE::Variant::__ANON__<br> 0.02 0.016 0.016 1 0.0160 0.0160 Win32::OLE::new<br><br>READING EVERYTHING AT ONCE AND LOOP OVER ARRAYS REFS<br><br>Total Elapsed Time = 11.57211 Seconds<br> User+System Time = 6.802119 Seconds<br>Exclusive Times<br>%Time ExclSec CumulS #Calls sec/call Csec/c Name<br> 43.1 2.938 2.938 16 0.1836 0.1836 Win32::OLE::Tie::Fetch<br> 41.2 2.803 9.004 1 2.8028 9.0038 main::parse_excel<br> 19.6 1.339 1.437 87786 0.0000 0.0000 Win32::OLE::Variant::new<br> 15.1 1.030 1.030 131679 0.0000 0.0000 Win32::OLE::Variant::Date<br> 13.1 0.893 0.893 43893 0.0000 0.0000 Win32::OLE::Variant::Number<br> 5.12 0.348 0.348 43893 0.0000 0.0000 Win32::OLE::Variant::As<br> 2.19 0.149 0.149 219710 0.0000 0.0000 Win32::OLE::Variant::DESTROY<br> 0.47 0.032 0.032 3 0.0107 0.0106 ActivePerl::Config::BEGIN<br> 0.24 0.016 0.016 1 0.0160 0.0160 Win32::OLE::Uninitialize<br> 0.24 0.016 0.016 3 0.0053 0.0053 vars::BEGIN<br> 0.22 0.015 0.015 1 0.0150 0.0150 Win32::OLE::new<br> 0.22 0.015 0.015 1 0.0150 0.0150 warnings::BEGIN<br> 0.22 0.015 0.077 5 0.0030 0.0155 main::BEGIN<br> 0.00 0.000 0.000 1 0.0000 0.0000 Config::launcher<br> 0.00 0.000 0.000 1 0.0000 0.0000 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>