De excel o pdf a base de datos MySQL

  • Autor Autor giulichajari
  • Fecha de inicio Fecha de inicio
giulichajari

giulichajari

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Estoy desarrollando un modulo de actualizacion masiva de precios en mi aplicacion PHP y MySQL.
Como es sabido muchos provedores mandan los listados de precios en .xlsx o .pdf.
De momento desarrolle un datatable de Jquery que lo cargo con el archivo excel. Para luego hacer update del precio de acuerdo al codigo del articulo.
El caso es que mi script funciona pero solo si dejo 4 columnas con titulos codigo, nombre, precio y final respectivamente.
No saben si es posible definir la celda donde comienza la informacion desde php? O de que otra manera se podria hacer.
Para los archivos pdf lo que voy a hacer es cargarlos en el DOM en el navegador digamos.

Alguien ha implementado algo asi?
 
Yo implementé varios sistemas de importación de Excel. Siempre usé la librería PhpSpreadsheet.

Puedes ver algunos ejemplos de uso aquí.

Por el tema del PDF puede ser algo más complejo... una librería que puedes usar es pdfParser.

Consúltame si te quedan dudas 😉
 
Hasta ahora habia hecho algo en JQUERY:

JavaScript:
 $("body").on("click", "#upload", function () {
if ($.fn.DataTable.isDataTable('#artip')) {
    $('#artip').DataTable().destroy();
}

            //Reference the FileUpload element.
            var fileUpload = $("#fileUpload")[0];

            //Validate whether File is valid Excel file.
            var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.xls|.xlsx)$/;
            if (regex.test(fileUpload.value.toLowerCase())) {
                if (typeof (FileReader) != "undefined") {
                    var reader = new FileReader();

                    //For Browsers other than IE.
                    if (reader.readAsBinaryString) {
                        reader.onload = function (e) {
                            ProcessExcel(e.target.result);
                        };
                        reader.readAsBinaryString(fileUpload.files[0]);
                    } else {
                        //For IE Browser.
                        reader.onload = function (e) {
                            var data = "";
                            var bytes = new Uint8Array(e.target.result);
                            for (var i = 0; i < bytes.byteLength; i++) {
                                data += String.fromCharCode(bytes[i]);
                            }
                            ProcessExcel(data);
                        };
                        reader.readAsArrayBuffer(fileUpload.files[0]);
                    }
                } else {
                    alert("This browser does not support HTML5.");
                }
            } else {
                alert("Por favor suba un archivo que sea de excel.");
            }
        });
        function ProcessExcel(data) {
            //Read the Excel File data.
            var workbook = XLSX.read(data, {
                type: 'binary'
            });

            //Fetch the name of First Sheet.
            var firstSheet = workbook.SheetNames[0];

            //Read all rows from First Sheet into an JSON array.
            excelRows = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[firstSheet]);

       let IVA=$("#IVA").val();
       let ganancia=$("#GAN").val();
       let aplicar= parseFloat(IVA) +parseFloat(ganancia);
    let P;
       t=  $('#artip').DataTable({

    data:excelRows,

como veras subo un archivo y le paso la data al DataTable, no se si usaste este plugin alguna vez(https://datatables.net)
Pero bueno de ultima que acomode los titulos de las columnas como te dije.

Y el pdf se puede pasar a excel y luego procesarlo.
 
Otra cuestion por ej son los aceites(dado que es de un lubricentro), un articulo que viene en el excel(un registro mejor dicho) vale 10000 por ejemplo, pero son 5 envases x 4litros que se venden cerrados. en cambio vienen tambores x 1 unidad de 200 litros. En el primer caso debo dividir los 10 000 pesos por 5 envases para obtener el costo individual y aplicarle IVA y utilidad etc. Pero el dato "5" lo tengo en un campo de la base de datos, dado que en el archivo de excel viene en una sola columna "5x4lts". Ya me tome el trabajo de editar los nombres de los articulos.
Pero ahora deberia a cada articulo que hay en el excel buscar en la base de datos cuantas unidades trae.

Igual dudo que muchos programadores se agarren semejante problema de desarrollo, no se los otros lubricentros que sistema tienen je.
 
@giulichajari el requerimiento que tienes es más común de lo que te imaginas, puedes ahorrarte mucho trabajo usando una librería como ya te recomendaron, la que yo uso para excel es: SimpleXLSX
Saludos
 
Atrás
Arriba