[RESOLVIDO] Update no bd com importação de excel pelo PhpSpreadsheet

Gente, estou com problemas em usar essa lib, construi esse código através do onValidate do meu controle com algumas pesquisas. Eu preciso fazer alguma instalação antes? Se sim, como?

Esse é o principal video que eu usei como base: https://www.youtube.com/watch?v=YYP8iFjotDs

$rota = $this->Ini->path_doc."/".{arquivo} // esse é o nome do meu campo do controle que faz upload
include sc_url_library(“prj”, “spreadsheet”, “vendor/autoload.php”);
$libexcel = \PhpOffice\PhpSpreadsheet\IOFactory::load($rota);

$excel = $libexcel->getSheet(0);

$linhas = $excel->getHighestDataRow();

sc_begin_trans();

for ($linha = 2; $linha <= $linhas; $linha++) {

$colunaA = $excel->getCellByColumnAndRow(1, $linha);
$codigo = $colunaA->getValue();

$colunaB = $excel->getCellByColumnAndRow(2, $linha);
$refcliente = $colunaB->getValue();

$colunaC = $excel->getCellByColumnAndRow(3, $linha);
$descpt = $colunaC->getValue();

$colunaG = $excel->getCellByColumnAndRow(7, $linha);
$qty = $colunaG->getValue();

// Validação dos dados antes de realizar o update
if (empty($codigo) || empty($refcliente) || empty($descpt) || empty($qty)) {
    // Se algum valor estiver vazio, exibe um alerta
    sc_alert("Erro: Todos os campos devem ser preenchidos. Linha: $linha");
    sc_commit_trans(); // Garante que a transação seja salva mesmo que não tenha update
    continue; // Pula para a próxima linha
}

// A quantidade deve ser numerica
if (!is_numeric($qty)) {
    sc_alert("Erro: A quantidade deve ser um número válido. Linha: $linha");
    sc_commit_trans();
    continue;
}

// Atualiza o banco de dados se as validações passarem
$update = "UPDATE ORDERSALES_Itens SET RefCliente = '" . addslashes($refcliente) . "', Desc_Produto = '" . addslashes($descpt) . "', Qty_Order = '" . addslashes($qty) . "' WHERE CODIGO = '" . addslashes($codigo) . "'";
sc_exec_sql($update);

}

// Finaliza a transação
sc_commit_trans();

https://forum.scriptcase.com.br/search?q=PhpSpreadsheet%20

Oi, Haroldo!

Agradeço a resposta, mas já havia feito pesquisas aqui e assim até descobri que seria melhor substituir o phpexcel pelo phpspreadsheet.

Mesmo assim não encontrei nada que me desse uma luz no que posso melhorar para fazer o import e assim dar update nos campos em questão que são iguais aos do banco.

Ainda sou aprendiz, tenho 19 anos e então não tenho nem um terço da sua experiência por aqui, nem com a plataforma e nem com o php, por isso procuro ajuda aqui no forúm depois de pesquisar bastante.

Criou a biblioteca externa?

Primeiro passo é esse.

Na verdade, a biblioteca já existe no Scriptcase. Coloque esta linha no início:

sc_include_lib("phpspreadsheet");

$spreadsheet = new PhpOffice\PhpSpreadsheet\Spreadsheet();
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(false);
$spreadsheet = $reader->load($arq);

Onde $arq é a variável com a rota do teu arquivo (no teu caso $rota).

Espero que ajude

1 Curtida

Agradeço demais, Kleyber! Isso me ajudou a resolver o problema. Acabei descobrindo a rota da pasta prod e lá já estavam todas as libs do phpoffice mesmo. Deus te abençoe

2 Curtidas

Essa lib aparentemente já estava lá e eu estava inicializando ela de forma ruim no inicio do codigo, acabei de resolver! Agradeço bastante.

2 Curtidas