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

PHP + Excel + Copilot => Gambiarra


Frank K Hosaka

Pergunta

O PHP é o único recurso que eu conheço que conecta o MySQL com o HTML, e o Excel é o único recurso que o meu irmão Jorge conhece.

Eu ainda não tenho a menor ideia de como fazer o pedido de compra, então decidi usar o PHP para exportar a tabela tbprod, assim:

listagem parcial do produto.php
function exportar() {
        $filename = "tbprod.csv";
        header('Content-Type: text/csv');
        header('Content-Disposition: attachment;filename="' . $filename . '"');
        header('Pragma: no-cache');
        header('Expires: 0');
        $file = fopen('php://output', "w");
        fputcsv($file, array('codprod', 'un', 'prod','custo','marg',
            'codbar','loc','emb','cf','codforn','estoque','venda','cfop'), ',', '"', "\\");
        $result = (new conn)->select("* from tbprod where loc <> 'a24' order by prod");
        if ($result && count($result) > 0) {
            foreach($result as $row) {
                fputcsv($file, (array)$row, ',', '"', "\\");
            }
        require('menuView.php');
        echo "Dados exportados com sucesso para " . $filename;
        } else {
        echo "Nenhum registro encontrado na tabela tbprod.";
        }
        fclose($file);
    }

Para o meu irmão usar o arquivo tbprod.csv, eu criei a planilha SoFuncionaNoPC.xlms, com o seguinte código VBA
 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    ' Adicione o código que você deseja executar ao dar duplo clique na célula
    If Not Intersect(Target, Me.Range("A1:Z100")) Is Nothing Then
        Dim valorProcurado As String
        Dim csvFilePath As String
        Dim csvFile As Workbook
        Dim csvSheet As Worksheet
        Dim activeSheet As Worksheet
        Dim found As Range
        Dim linhaAtual As Long
        Dim colunaAtual As Long

        ' Define o valor a ser procurado
        valorProcurado = ActiveCell.Value
        linhaAtual = ActiveCell.Row
        colunaAtual = ActiveCell.Column


        ' Caminho relativo para o arquivo CSV (no mesmo diretório da planilha atual)
        csvFilePath = ThisWorkbook.Path & "\tbprod.csv"

        ' Abre o arquivo CSV de forma oculta
        Application.ScreenUpdating = False
        Set csvFile = Workbooks.Open(csvFilePath)
        Set csvSheet = csvFile.Sheets(1)
        csvFile.Windows(1).Visible = False
        Set activeSheet = ThisWorkbook.activeSheet

        ' Procura pelo valor na coluna A (primeira coluna)
        Set found = csvSheet.Columns(1).Find(What:=valorProcurado, LookIn:=xlValues, LookAt:=xlWhole)

        ' Se encontrar o valor, copia a linha correspondente para a planilha ativa
        If Not found Is Nothing Then
            activeSheet.Cells(linhaAtual, colunaAtual + 1).Value = found.Offset(0, 2).Value

        Else
            MsgBox "Valor " & valorProcurado & " não encontrado no arquivo CSV.", vbExclamation
        End If

        ' Fecha o arquivo CSV
        csvFile.Close SaveChanges:=False
        Cancel = True ' Cancela a edição padrão de célula ao dar duplo clique
    End If
End Sub

Esse código vai no painel do código da planilha ativa.
Por enquanto o programa é bem inútil, mas eu gostei.

O meu irmão vai em uma célula qualquer, digita um valor, e ao dar um duplo clique na célula, o VBA vai até o tbprod.csv e traz a descrição do produto, se ele encontrar e coloca do lado da célula ativa.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

O grande problema do Excel com macro é que ele só funciona no PC.

Busquei uma alternativa na planilho do Google, eu e o Copilot perdemos o dia todo tentando fazer a planilha consultar o arquivo tbprod.csv, mas no final eu pedi para o Copilot copiar todo o arquivo na página2 da planilha ativa, e usar a página1 do mesmo jeito que no Excel:

Apps Script
function copiarConteudoCSVParaPlanilha() {
  var idArquivoCSV = '1wwN8Z-SR0t0pFhrQOyx9YFYpgSiwaQo_'; // Substitua pelo ID do seu arquivo tbprod.csv
  
  try {
    var arquivo = DriveApp.getFileById(idArquivoCSV);
    var conteudo = arquivo.getBlob().getDataAsString();
    var linhas = Utilities.parseCsv(conteudo);
    
    var planilha = SpreadsheetApp.getActiveSpreadsheet();
    var folha = planilha.getActiveSheet();
    
    // Limpar qualquer conteúdo existente na planilha
    folha.clear();
    
    // Copiar o conteúdo do CSV para a planilha
    folha.getRange(1, 1, linhas.length, linhas[0].length).setValues(linhas);
    
    SpreadsheetApp.getUi().alert('Conteúdo do arquivo CSV copiado para a planilha com sucesso!');
  } catch (erro) {
    Logger.log('Erro: ' + erro);
    SpreadsheetApp.getUi().alert('Ocorreu um erro: ' + erro);
  }
}

function onEdit(e) {
  var folhaAtiva = e.source.getActiveSheet();
  var celulaEditada = e.range;
  var valorCelula = celulaEditada.getValue();
  
  if (folhaAtiva.getSheetName() == 'Página1') {
    var planilha = SpreadsheetApp.getActiveSpreadsheet();
    var folhaBusca = planilha.getSheetByName('Página2');
    
    if (!folhaBusca) {
      SpreadsheetApp.getUi().alert('A planilha "Página2" não foi encontrada.');
      return;
    }
    
    var intervaloBusca = folhaBusca.getRange('A:D').getValues();
    
    for (var i = 0; i < intervaloBusca.length; i++) {
      if (intervaloBusca[i][0] == valorCelula) {
        var valorCorrespondente = intervaloBusca[i][3]; // Valor da coluna D
        
        // Colocar o valor da coluna D ao lado do valor digitado na Página1
        celulaEditada.offset(0, 1).setValue(valorCorrespondente);
        
        // Opcional: Exibir um alerta com o valor digitado e o valor correspondente
        SpreadsheetApp.getUi().alert('O valor digitado é: ' + valorCelula + '. O valor correspondente é: ' + valorCorrespondente);
        
        return;
      }
    }
    
    // Se nenhum valor correspondente for encontrado
    SpreadsheetApp.getUi().alert('Nenhum valor correspondente encontrado para: ' + valorCelula);
  }
}

 

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
      152,4k
    • Posts
      652,1k
×
×
  • Criar Novo...