{"id":690,"date":"2025-07-16T13:10:44","date_gmt":"2025-07-16T13:10:44","guid":{"rendered":"https:\/\/sienna-manatee-218967.hostingersite.com\/blogs\/creacion-y-lectura-de-archivos-xls\/"},"modified":"2026-05-04T03:54:36","modified_gmt":"2026-05-04T03:54:36","slug":"creacion-y-lectura-de-archivos-xls","status":"publish","type":"post","link":"https:\/\/exdoo.mx\/blogs\/creacion-y-lectura-de-archivos-xls\/","title":{"rendered":"Creaci\u00f3n y lectura de archivos XLS"},"content":{"rendered":"<div style=\"background:linear-gradient(135deg,#0A7099 0%,#0d8db8 100%);color:#fff;padding:28px 26px;border-radius:16px;margin:0 0 28px;box-shadow:0 4px 16px rgba(10,112,153,.2);\">\n<div style=\"display:inline-block;background:rgba(255,255,255,.18);padding:6px 14px;border-radius:20px;font-size:12px;font-weight:700;letter-spacing:.5px;margin-bottom:12px;color:#fff;\">\ud83d\udcd8 ART\u00cdCULO T\u00c9CNICO<\/div>\n<p style=\"font-size:16px;line-height:1.6;margin:0;color:#fff;opacity:.95;\">Los archivos de Excel (XLS\/XLSX) son un est\u00e1ndar universal en el an\u00e1lisis y gesti\u00f3n de datos, gracias a su compatibilidad, flexibilidad y facilidad de uso. Cuando combinas esta capacidad con Odoo, obtienes beneficios clave como:<\/p>\n<\/div>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/xls-b-AoPJbOEy7EszoPqr-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<div style=\"background:linear-gradient(135deg,#0A7099 0%,#0d8db8 100%);color:#fff;padding:28px 26px;border-radius:16px;margin:0 0 28px;box-shadow:0 4px 16px rgba(10,112,153,.2);\">\n<div style=\"display:inline-block;background:rgba(255,255,255,.18);padding:6px 14px;border-radius:20px;font-size:12px;font-weight:700;letter-spacing:.5px;margin-bottom:12px;color:#fff;\">\ud83d\udcd8 ART\u00cdCULO T\u00c9CNICO<\/div>\n<\/div>\n<p class=\"body\" dir=\"auto\"><span>\u00b7 <strong>Automatizaci\u00f3n de reportes<\/strong> (ventas, inventario, contabilidad)<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>\u00b7 <strong>Intercambio de datos simplificado<\/strong> con clientes, proveedores y otros sistemas.<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>\u00b7 <strong>Migraci\u00f3n y actualizaci\u00f3n masiva<\/strong> de informaci\u00f3n sin errores manuales.<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>\u00b7 <strong>Personalizaci\u00f3n avanzada<\/strong> de documentos comerciales (cotizaciones, \u00f3rdenes de compra, facturas)<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span>\u00b7<strong>Integraci\u00f3n con procesos existentes<\/strong> que ya dependen de Excel.<\/span><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>En este art\u00edculo, exploraremos <strong>c\u00f3mo generar archivos XLS directamente desde Odoo<\/strong>, tomando como ejemplo un m\u00f3dulo que <strong>exporta autom\u00e1ticamente los datos de una orden de venta<\/strong> (cliente, n\u00famero de pedido, fecha y l\u00edneas de productos) y los adjunta al documento; adem\u00e1s, mostraremos c\u00f3mo crear un asistente para leer un archivo XLS y, con base en \u00e9l, crear las l\u00edneas de venta con los datos de los productos que contenga.<\/span><\/h3>\n<p class=\"body\" dir=\"auto\"><span> Para realizar este ejemplo utilizaremos la librer\u00eda xlwt (<a href=\"https:\/\/pypi.org\/project\/xlwt\/\" class=\"qbe-widget\" rel=\"noopener noreferrer\" target=\"_blank\">https:\/\/pypi.org\/project\/xlwt\/<\/a>); se puede consultar su documentaci\u00f3n para una mayor comprensi\u00f3n y uso de esta librer\u00eda.<\/span><\/p>\n<p class=\"body\" dir=\"auto\"><span> Agregaremos 2 botones en el formulario de ventas, uno para crear el archivo XLSX y otro para leerlo y crear las l\u00edneas de productos en la venta.<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/1-mjEGb32BR9TXXXpO-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Comenzaremos importando la librer\u00eda xlwt<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/2-mxBXbq7J44f7GP5d-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Crearemos el libro, la p\u00e1gina y asignamos estilos.<\/span><\/h3>\n<p dir=\"auto\" class=\"body\"><span>Para dar formato tanto a la celda como al contenido, usaremos 2 m\u00e9todos, <strong>easyxf y XFStyle.<\/strong><\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span><strong> easyxf<\/strong><\/span><\/p>\n<p dir=\"auto\" class=\"body\"><span>Para darle el formato necesitado, tanto en contenido como en la celda, establecen diferentes atributos agregados al m\u00e9todo, donde podremos indicar el tama\u00f1o de letra, el tipo de letra, color, contorno de celda, etc.<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/3-mp8JbxW2llTeNBrr-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span><strong>XFStyle<\/strong><\/span><\/h3>\n<p class=\"body\" dir=\"auto\"><span>Tambi\u00e9n es posible crear estilos con <strong>XFStyle<\/strong> de la siguiente manera, utilizando cada uno de los atributos que se contienen dentro de xlwt, como Font, Alignment, Borders, Pattern, etc.<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/4-Yg2yQD4JDjHE2lxw-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Es posible ajustar el ancho de una columna con el atributo <strong><em>width<\/em><\/strong>, indicando la columna a modificar.<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/5-AzGN46PRyBIG20vV-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Para escribir dentro del archivo, se escribe por celda utilizando el m\u00e9todo <strong><em>write,<\/em><\/strong> indicando la fila y columna donde se quiere escribir, as\u00ed tambi\u00e9n el estilo que se le quiere dar. Este m\u00e9todo recibe write(fila, columna, contenido, estilo).<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/6-m5KnkNQge3SZO6eL-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>As\u00ed se mostrar\u00eda el resultado en el archivo Excel con la fecha de la venta y el estilo de formato de fecha.<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/7-YrDJbj5R7kFV2xlR-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Ahora agregaremos la tabla con los productos de la venta.<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/8-mP4MWj833Jt3pLGV-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><br \/>\n<img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/9-A1a597v4lqhnonXZ-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Iteramos las l\u00edneas de venta para obtener la informaci\u00f3n necear\u00eda para agregar al archivo XLS<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/1-YrDJbjrjMjSL63Dl-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>As\u00ed es como se mostrar\u00eda nuestro archivo exportando los datos a un XLS.<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/2-AR03WExr5wclqk0g-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Utilizando el archivo que generamos, vamos a crear un asistente para leer este formato y crearemos las l\u00edneas de la venta.<\/span><\/h3>\n<p dir=\"auto\" class=\"body\"><span> Creamos un asistente agregando como campo el <em>Id de la venta (sale_id)<\/em> y el campo <em>binario para cargar el archivo (spreadsheet_file).<\/em><\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/3-AMq8WO0Lwli8a0yW-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Agregamos una acci\u00f3n para leer el archivo y cargar las l\u00edneas desde el XLS. Usando el m\u00e9todo <em>row<\/em>_<em>values(row), <\/em>obtenemos todos los datos del n\u00famero de fila enviado como par\u00e1metro.<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/4-YanJQ4rxX1HNzvDJ-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>El asistente queda de la siguiente manera.<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/5-YanJQkerV1sJyjky-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><br \/>\n<img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/6-m7Vb91L2qytXxJkM-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Al cargar el archivo, crear\u00e1 las l\u00edneas dentro de la venta.<\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/exdoo.mx\/blogs\/wp-content\/uploads\/2026\/05\/7-AoPJbrkvnVsE0xad-1.png\" alt=\"\"  style=\"max-width:100%;height:auto;border-radius:10px;box-shadow:0 2px 8px rgba(0,0,0,0.12);display:block;margin:14px auto;\" \/><\/p>\n<h3 style=\"color:#0A7099;margin-top:24px;\"><span>Hemos llegado al final del desarrollo de nuestro m\u00f3dulo para <strong>generar y leer archivos XLS en Odoo v18<\/strong>, una soluci\u00f3n que puede transformar la manera en que gestionas datos, compartes informaci\u00f3n y optimizas procesos comerciales.<\/span><\/h3>\n<p class=\"body\" dir=\"auto\"><span> Si tiene dudas, no dude en ponerse en contacto con nosotros a trav\u00e9s del correo: <a href=\"mailto:info@exdoo.mx\" class=\"qbe-widget\" rel=\"noopener noreferrer\" target=\"_blank\">info@exdoo.mx<\/a>.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udcd8 ART\u00cdCULO T\u00c9CNICO Los archivos de Excel (XLS\/XLSX) son un est\u00e1ndar universal en el an\u00e1lisis y gesti\u00f3n de datos, gracias a su compatibilidad, flexibilidad y facilidad de uso.\u2026<\/p>\n","protected":false},"author":5,"featured_media":672,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"class_list":["post-690","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development"],"_links":{"self":[{"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/posts\/690","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/comments?post=690"}],"version-history":[{"count":3,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/posts\/690\/revisions"}],"predecessor-version":[{"id":1978,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/posts\/690\/revisions\/1978"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/media\/672"}],"wp:attachment":[{"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/media?parent=690"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/categories?post=690"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/exdoo.mx\/blogs\/wp-json\/wp\/v2\/tags?post=690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}