• Inicio
  • Programas
  • Excel
  • Pasar datos de Excel directamente a una página web (php, mysql) con macros (vba)

Pasar datos de Excel directamente a una página web (php, mysql) con macros (vba)

Sumamente práctico cuando se desea publicar indicadores, presentar gráficos en tiempo real, plasmar ventas, o crear un simple directorio telefónico desde una hoja Excel utilizando macros (vba).
Para realizar este procedimiento es necesario tener en cuenta que se utilizará otros lenguajes de programación como php, sql (mysql), html, javascript entre otros.

En este ejemplo se creará una página web de manera muy simple utilizando php, html y mysql para poder enviar datos directamente desde una hoja Excel mediante macros.

Parte 1.  Crear la base de datos en mysql

Aclaro que para realizar este ejemplo se utilicé en parte un emulador web con php y mysql (easyphp), por lo tanto deberán buscar un hosting gratuito o de pago que soporte php y mysql.
Para crear una tabla debemos seguir como lo indican las imágenes (no necesariamente es el mismo administrador para todos los servicios de alojamiento web):

creartabla1

creartabla2

creartabla3

Al terminar de crear la tabla guardaremos los valores necesarios (muy importantes) para continuar con este ejemplo, los cuales son:

  • host de la base de datos (por lo general “localhost”)
  • usuario de la base de datos
  • contraseña para acceder a la base de datos
  • nombre de la tabla (en nuestro caso “xcl”)

Parte 2. Crear los archivos php

Necesitamos tres archivos para nuestro ejemplo, solamente tienen que crear un nuevo archivo de texto y renombrarlo.

archivo de conexion (conexion.php)

Para los que recién comienzan recomiendo un estupendo curso en vídeo para iniciar rápidamente en la programación php

<?php
$conexion = mysql_connect("localhost", "usuario", "contraseña");
mysql_select_db("nombredebasededatos", $conexion);
?>

No olviden colocar los 4 datos extraídos de la creación de la tabla en la base de datos

archivo enviar (enviar.php)
<?php
require("conexion.php");
if (isset($_GET["nombre"])) {
$nombre = $_GET["nombre"];
$telefono = $_GET["telefono"];
$direccion = $_GET["direccion"];
$sql = "INSERT INTO xcl (nombre, telefono, direccion) ";
$sql.= "VALUES ('".$nombre."', '".$telefono."', '".$direccion."')";
mysql_query($sql, $conexion);
}
?>
archivo mostrar (index.php)

El código a continuación es una mezcla de php y html (un script jquery mobile) extraido de esta página y re-acomodado para funcionar interactuando con nuestra base de datos.

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Directorio</title>
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.1/jquery.mobile-1.4.1.min.css">
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.1/jquery.mobile-1.4.1.min.js"></script>
</head>
<body>

<div data-role="page" id="pageone">
<div data-role="main" class="ui-content">
<h2>Directorio</h2>
<form class="ui-filterable">
<input id="myFilter" data-type="search">
</form>
<ul data-role="listview" data-filter="true" data-input="#myFilter" data-inset="true">
<?php
require("conexion.php");
$query_select = "SELECT * FROM xcl";
$result_select = mysql_query($query_select) or die(mysql_error());
while($row = mysql_fetch_array($result_select)) {
$nombre = stripslashes($row['nombre']);
$telefono = stripslashes($row['telefono']);
$direccion = stripslashes($row['direccion']);
echo '<li><a href="tel:' . $telefono . '"><h4>' . $nombre . '</h4><p>' . $direccion . '</p><h1>' . $telefono . '</h1></a></li>';
}
?>
</ul>
</div>
</div>

</body>
</html>

archivosphp

Luego de haber creado los archivos, estos deberán ser subidos al hosting a utilizar.

Parte 3. Crear y preparar la hoja Excel

Al correr el siguiente macro, Excel abrira una página web en modo silencioso ejecutando una dirección web que tiene el siguiente formato:

http://tupaginaweb.com/enviar.php?nombre=manuel&telefono=55555555&direccion=calle los changuitos 123

El contenido de las variables ‘nombre’,’telefono’ y ‘direccion’ se envían a través del archivo enviar.php que a su vez lo envía a la tabla “xcl” de la base de datos en mysql.
Tomamos los datos de las celdas A1, A2, A3.

A continuación colocamos el siguiente macro en nuestra hoja Excel insertando un nuevo módulo en la ventana de Programador/Visual Basic:

Sub enviaraweb()
Dim ie As Object
Dim PaginaWeb As String

enombre = hoja1.cells(1,1)
etelefono = hoja1.cells(2,1)
edireccion = hoja1.cells(3,1)

PaginaWeb = "http://tupaginaweb.com/enviar.php?nombre=" & enombre & "&telefono=" & etelefono & "&direccion=" & edireccion

Set ie = CreateObject("InternetExplorer.Application")
ie.navigate PaginaWeb
Do While Not ie.busy
DoEvents
Loop
ie.Visible = False

Do
'Nothing
Loop Until ie.readyState = 4

Set ie = Nothing
End Sub

Para completar este ejercicio dejo un vídeo de prueba.

 Tengan buen día, cualquier duda lo escriben en los comentarios, trataré de responder en la brevedad posible.

Etiquetas:, , , , , ,

"Trackback" Enlace desde tu web.

M. Vizcarra

Ing. Industrial, egresado de la Facultad de Ingeniería Industrial y de Sistemas de la Universidad Nacional Hermilio Valdizán de Huánuco, Perú.

Comentarios (14)

  • Jose Ricardo Sauceda

    |

    Gracias as sido de mucha ayuda

    Reply

  • Daniel Ampudia

    |

    Interesante post, otra manera es exportanto a .csv e importanto por phpmyadmin.

    Salu2

    Reply

  • Benjamin

    |

    Hola, te quería pedir ayuda, ya que seguí los pasos y todo queda bien pero al final no me hace la importación de datos.
    De verdad agradecería su ayuda

    Reply

  • Luis

    |

    gracias por este aporte me ayudado mucho, sin embargo podrían ayudar ya que no puedo mandar una fecha de esta forma me envia unicamente eso (0000-00-00) y en mi archivo de excel le di ese formato (yyyy-mm-dd) pero no entiendo. de antemano muchas gracias

    Reply

  • Manuel

    |

    Hola, gracias por el dato, solo una pregunta, ¿Como lo harías de forma inversa? es decir, que de un formulario de una pagina web lo vacíes a un archivo de excel.

    Reply

  • Martín

    |

    Buen día.
    Espero te sirva. Aunque le des formato a la celda el valor no cambiará. Lo que necesitas para insertar dicha fecha es aplicar la fórmula de Excel =texto(aquí va el valor osea la celda, aquí el formato “AAAA-MM-DD”).
    Y listo convierte la fecha en texto lo cual obliga a que se respete dicha fecha.
    Cualquier duda me avisas

    Reply

  • Orbany

    |

    Luis en la tabla sql tiene que darle el mismo formato al campo fecha que le tiene en la celda excel.

    Reply

  • Manuel

    |

    excelente pero quisiera saber como hacer para subir no un dato sino varios datos simultáneamente osea una tabla de excel.
    donde se coloca el bucle el for para generar el ciclo de guardado

    Reply

  • neosant

    |

    Excelente tu programa en Excel. Pero ahora quisiera saber si puedes hacer el proceso a la inversa, es decir, tienes una DB SQL y con macros de excel permitas traer información al excel una tabla completa con un boton, espero tu rpta.

    Reply

  • Martin Alonso

    |

    Hola, muy bueno tu ejercicio..aun cuando para serte sincero, no lo he podido hacer correr.. ya que la idea mia es que corra sobre todos los exploradores posibles ya que mi plataforma asi lo exige.. te agradeceria me tiraras ese dato ya que la verdad me urge.. otra cosa que pasaria si lo que requiero es que me recorra una hoja completa algo asi como datos desde la columna A a la Z y desde la fila 1 hasta la 120..
    En Verdad te agradeceria la info y la ayuda..

    Reply

  • eri

    |

    se podria ser viseversa de php a excel

    Reply

  • Rafael

    |

    Hola Martín, me pareció muy bueno el post. Estoy tratando de adecuarlo para rellenar datos en una página web existente (que es una de las consultas que le hicieron anteriormente). Aquí en Argentina se hacen muchas facturas electrónicas en una página de la autoridad fiscal y que se hacen manualmente o sea, rellenando los datos (con copiar y pegar también, pero es casi lo mismo). La agradecería su comentario. Reciba un cordial saludo. Rafael

    Reply

  • iguaque

    |

    Gracias! fue de mucha ayuda

    Reply

Deja un comentario