Ir para conteúdo
Fórum Script Brasil
  • 0

PHP + MS Excel (PHP buscando e escrevendo em planilhas) É possivel?


guisinho

Pergunta

Boas pessoal!!!!

Como estão?

Espero poder contar com o auxilio de vocês e espero poder trocar ainda mais muita informação e quem sabe poder ajudar alguém ainda com o pouco que sei como forma de agradecer os 'helps' que espero receber por aqui.

Bom, vamos a minha idéia problema...

Eu tenho uma lista de produtos em várias planilhas de Excel diferentes.

Fiz então um 'programa' em VBA que pega todas essas planilhas uma vez por mês (já que elas alteram) e juntam todas em uma só lista de materiais no Excel. (caso exista a possiblidade mais ao futuro, quero fazer no próprio PHP, que no momento que o usuário abra a aplicação via Browser e clique em gerar planilha, o php faria uma busca nas planilhas dentro da pasta 'x' no endereço 'w' e gere uma outra planilha com todos os materiais [copiando linha por linha de todas as planilhas numa mesma sheet])

A idéia é fazer um mecanismo de busca por palavras no PHP, para que uma pessoa com acesso a página via browser faça a busca na lista, então, ao marcar os produtos desejados escolhe a quantidade e escreve o valor unitário [no browser] e assim vai até terminar sua busca, acrescentando vários materiais, (buscando, marcando, respondendo as perguntas {valor unitário > quantidade} até marcarem o fim da busca e inserção) fazendo sua própria lista de materiais em cima da lista maior.

O PHP deverá conseguir acessar a planilha em excel, procurar os dados pelas colunas, mostrar as linhas no aplicativo PHP permitir que o usuário marque a opção correta encontrada na busca acrescente num campo no PHP o valor unitário e a quantidade, então ao dar OK para aquela inserção a mesma seria salva numa planilha excel nova e no fim quando ele terminar de acrescentar todos os campos e clicar em [FIM] o programa carrega a planilha em excel gerada na tela para que o usuário a salve ou imprima a mesma.

Isso é possivel?

É simples?

Teriam alguma dica? Algum "norte" para me dar?!

Seria obrigado a usar ASP ou .NET para fazer isso?

Abraços

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Existe uma classe que permite ler o conteúdo de arquivos XLS, não me lembro o nome agora, mas já vou te adiantar que isso dai não é a coisa mais simples do mundo, seria muito melhor que esses dados estivessem em algum BD, ai manipular isso seria muito mais prático.

Link para o comentário
Compartilhar em outros sites

  • 0
Existe uma classe que permite ler o conteúdo de arquivos XLS, não me lembro o nome agora, mas já vou te adiantar que isso dai não é a coisa mais simples do mundo, seria muito melhor que esses dados estivessem em algum BD, ai manipular isso seria muito mais prático.

Posso fazer o sistema buscar diretamente de um BD sim.

Mas ainda assim o PHP precisaria gravar em XLS na forma que eu falei como resposta final.

Posso fazer o seguinte:

um monte de planilhas em Excel -> vai pra um banco em mySQL -> o PHP usa ele para fazer a busca -> O PHP gerra no fim uma planilha em XLS padronizada como resultado, OU salva o resultado numa planilha pré definida eu monto todo o cabecalho antes ele escreve a partir da linha X respeitando o cabeçalho e no fim mostra ao usuário uma cópia.

Dá pra se fazer?

Link para o comentário
Compartilhar em outros sites

  • 0
Se tiver alguma classe que permita gerar XLS's, sim, nativamente o máximo que você vai conseguir é gerar arquivos CSV.

Mmmm essa foi uma boa dica.

Vou ter que ir a caça dessa classe.

Ou apelar pro ASP vamos ver o que vai ser melhor.

Queria me manter no PHP, até porque me identifico mais...

Bom, vou usar esse tópico (se me for permitido) como um diário de bordo, tudo que for achando e passar por vitórias e dificuldades vou postar aqui, inclusive as linhas de código e tal...

no fim espero ter uma vitória, agora vou é estudar um pouco pra ver por onde exatamente começar.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, talvez eu acabe indo para o Java nesse sistema, ou mesmo .NET.

A idéia na realidade é ir montando vários sistemas online com as necessidades práticas que tenho, para fazer um web service completo que abaixe a necessidade de processamento no cliente e a mantenha no servidor, acredito que assim economize dinheiro e ganhe em segurança no trabalho com os dados, além de ganhar mobilidade no trabalho.

Em casa, você tem a senha de acesso ao sistema, entra de seu EeePC e faz uso de ferramentas instaladas no servidor...

Esse é o objetivo fim, mas como todo fim antes tem uma estrada cheia de pedras.

E com as pedras, ou a gente chuta, ou a gente passa por cima.

Ou quando a pedra é muito grande temos duas opções ou contornamos ela, ou fazemos um Túnel!

Aí que está, ainda não tenho dimensão de tamanho dessa minha pedra atual (o programa em questão desse tópico).

Então o que fazer Macacada?

O Macaco em questão depois de muito pensar chegou numa idéia velha, mas que costuma funcionar.

Testar em um ambiente mais simples, verificar enquanto isso como funciona o problema assim não atraso a produção (quem usará o programa).

Ok, Let's start the Step By Step Monkeys:

1.1 Excel e VBA Help Us Please!

-> abro o excel e uso 3 sheets.

Segunda sheet: 'banco de dados', listagem de todos os materiais (uma macro captará as planilhas na pasta 'W' e as listará todas numa mesma sheet, visto que tem as mesmas colunas e formatação, o sistema preencherá a partir da quinta linha e buscará os dados também a partir da quinta linha, pois até a quinta linha é o cabeçalho da lista).

Terceira Sheet: Lista de materiais Buscada.

primeira sheet: Tela de busca em VBA, um menu de busca que vai buscar palavras semelhantes na Coluna 'X' da Sheet 2. então ao listar todos os nomes semelhantes com o buscado o usuário poderá clicar no que ele busca e informar QUANTIDADE e VALOR UNITÁRIO, logo que der um clique em [OK] o sistema adicionará na Terceira Sheet TODA a linha da palavra buscada a partir da quinta linha, adicionando ainda na antepenultima coluna: o valor unitário, na penúltima coluna: a quantidade e na última coluna o resultado da multiplicação entre [valor unitário]X[Quantidade].

Então o usuário clica em próximo['LOOP'] e re-iniciará o processo de busca, ...o usuário dá OK... e a linha inteira dessa nova busca é salva na Sheet 3, uma linha abaixo do salvamento anterior.

No momento que o usuário clicar no botão [FIM] o sistema de busca se encerra e escreverá uma mensagem para o usuário 'visitar' a terceira sheet da planilha Excel, ao abrir, ele lerá sua busca toda feita prontinha.

*Possivelmente farei na primeira Sheet um botão para que o próprio usuário ao abrir e clicar nele faça o sistema captar TODOS os dados da pasta 'W' como programado e enviar para a sheet 2.

Ok está funcionando e funcional?

Passarei enfim para a versão online.

- UM BD que capte dessas planilhas os dados (em mySQL)

- UM sistema via browser que faça a busca no BD do campo 'H' de nomes e no momento que o usuário seleciona a palavra buscada dentro da lista de possíveis palavras. O sistema então abre o questionário de perguntas como na versão em EXCEL no momento do clique em OK no fim do questionário, SE todas as respostas tiverem sido dadas o sistema salva a linha inteira do BD da palavra buscada no excel.

Quando o usuário terminar a busca e clicar em FIM o sistema gera abre então uma planilha para o usuário.

Vou ter de ver se só trabalhar em CLS como usar um sistema 'automatico' para fazer conversão

A idéia final ainda é dar uma senha e login para cada possível usuário para monitorar uso do mesmo em vezes logadas (por dia, hora. semana e mês) e tempo de uso por login.

Como minha idéia é a de aprender ao mesmo tempo que desenvolvo soluções no fim do processo pretendo disponibilizar para Download exemplos das soluções obtidas tanto em Excel quanto em PHP (se eu conseguir usando PHP, pois senão terei de usar JAVA ou .NET).

EDIT:

bom, já achei uma classe para leitura do XLS: http://sourceforge.net/projects/phpexcelreader/

Editado por guisinho
Link para o comentário
Compartilhar em outros sites

  • 0

Aí CARAMBA!!!!

ai-caramba.jpg

Que injeção de Ânimos!!!!!!

Achei um link salvador:

http://www.raelcunha.com/template.php#other_files

Criando XML, CSV e outros

O uso mais comum de templates é com arquivos HTML. Mas como essa biblioteca é direcionada ao uso de qualquer tipo de arquivo de texto, podemos usá-la com vários outros formatos de arquivo, como XMLs e arquivos CSVs.

Como fazer isso? Mais simples impossível: não muda nada, basta apenas ao invés de indicar um arquivo HTML para o Template, indicar qualquer outro arquivo de texto. E usar variáveis e blocos nele conforme já vimos, exibindo o conteúdo na tela, ou salvando em arquivos.

Criando arquivos do Office

Se você precisa elaborar um relatório que deve ser exibido em formato do Word (.doc) ou do Excel (.xls), também podemos usar a classe Template para isso.

Em primeiro lugar, crie normalmente no Office seu relatório. Após terminar, escolha a opção "Salvar como", e selecione o formato HTML. Feito isso, abra este arquivo HTML em seu editor PHP (não se assuste, é bastante poluído e cheio de tags estranhas) e use-o conforme visto até agora: crie variáveis, declare blocos, nada de diferente.

Se você for salvar o conteúdo em um arquivo, coloque neste arquivo a extensão .doc" (ou .xls no caso de uma planilha). O Office abrirá normalmente este arquivo, convertendo-o automaticamente de HTML para o formato desejado na primeira vez em que for aberto.

Se você for exibir o conteúdo no navegador ao invés de salvá-lo num arquivo, você precisa modificar o header para avisar o navegador que se trata de um documento do Office, forçando o navegador à interpretá-lo como tal (o Firefox irá fazer o download do arquivo, o IE irá abrir o Microsoft Office como um plugin e exibir o arquivo dentro do navegador mesmo). Faça isso com a instrução header() do PHP:

<?php

    require("Template.class.php");

    // Forçando o cabeçalho para o formato escolhido do Office
    header('Content-type: application/msword');
    header('Content-Disposition: attachment; filename="Relatorio.doc"');
    header("Pragma: no-cache");
    header("Expires: 0");
    
    // Arquivo relatorio.html, gerado no Word
    $tpl = new Template("relatorio.html");
    
    // Variáveis, blocos, etc
    $tpl->FULANO = "Rael";
    
    $tpl->show();
    
?>

Se isso funcionar vou beijar esse cara!!!

talvez terei de usar o http://www.smarty.net/ (que tem fama de ser complicado de trabalhar)

Vamos ver.

Link para o comentário
Compartilhar em outros sites

  • 0

Um exemplo de como está ficando.

<?php
class ToExcel{

var $header_http;
var $sql;
var $mensagem;

function ToExcel($sql, $nome_arquivo){

$this->sql = $sql;
$this->mensagem = new Mensagem();

$result = mysql_query($this->sql);

if(mysql_num_fields($result) >= 1){
for($i = 0; $i < mysql_num_fields($result); $i++) {
$this->header_http .= strtoupper(mysql_field_name($result, $i))."\t";
}

while($registro = mysql_fetch_row($result)) {
$line = '';
foreach($registro as $value) {
if ((empty($value))|| ($value == "")) $value = "\t";
else {
$value = str_replace('"', '""', $value);
$value = '"' . $value . '"' . "\t";
}
$line .= $value;
}
$data .= trim($line)."\n";
}
$data = str_replace("\r", "", $data);
if ($data == "") $this->mensagem->imprimeMensagem("A consulta não retornou nenhum registro!");
else{
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$nome_arquivo.".xls");
header("Pragma: no-cache");
header("Expires: 0");
print $this->header_http."\n".$data;
}
}
else $this->mensagem->imprimeMensagem("Erro. A consulta não foi executada.Contate o administrador do sistema e informe o ocorrido.");
}
}
?>

Editado por guisinho
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...