En este tutorial les mostrare como crear un reporte en Excel con PHP y una base de datos MySQL, para ello utilizaremos la librería PHPExcel.
¿Qué es PHPExcel?
Es un proyecto de proporciona un conjunto de clases para el lenguaje de programación PHP, que le permiten escribir y leer de diferentes formatos de archivo de hoja de cálculo , como Excel ( BIFF ) .xls , Excel 2007 ( .xlsx ) OfficeOpenXML , CSV, Libre / .ods OpenOffice Calc , Gnumeric , PDF , HTML , … Este proyecto se basa en estándar OpenXML de Microsoft y PHP .
¿Qué haremos?
En este ejemplo extraeremos de una base de datos MySQL un listado de países ordenados por nombre del país, dichos datos serán presentados en una hoja de cálculo de Excel, para mostrar información relacionad al país, como lo es: el código del país, nombre, el código de la moneda, capital y el continente al que pertenece.
Base de datos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 |
-- phpMyAdmin SQL Dump -- version 4.2.11 -- http://www.phpmyadmin.net -- -- Servidor: 127.0.0.1 -- Tiempo de generación: 12-06-2015 a las 19:06:10 -- Versión del servidor: 5.6.21 -- Versión de PHP: 5.6.3 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Base de datos: `test` -- -- -------------------------------------------------------- -- -- Estructura de tabla para la tabla `countries` -- CREATE TABLE IF NOT EXISTS `countries` ( `id` int(5) NOT NULL, `countryCode` char(2) NOT NULL DEFAULT '', `countryName` varchar(45) NOT NULL DEFAULT '', `currencyCode` char(3) DEFAULT NULL, `capital` varchar(30) DEFAULT NULL, `continentName` varchar(15) DEFAULT NULL ) ENGINE=MyISAM AUTO_INCREMENT=251 DEFAULT CHARSET=utf8; -- -- Volcado de datos para la tabla `countries` -- INSERT INTO `countries` (`id`, `countryCode`, `countryName`, `currencyCode`, `capital`, `continentName`) VALUES (1, 'AD', 'Andorra', 'EUR', 'Andorra la Vella', 'Europe'), (2, 'AE', 'United Arab Emirates', 'AED', 'Abu Dhabi', 'Asia'), (3, 'AF', 'Afghanistan', 'AFN', 'Kabul', 'Asia'), (4, 'AG', 'Antigua and Barbuda', 'XCD', 'St. John''s', 'North America'), (5, 'AI', 'Anguilla', 'XCD', 'The Valley', 'North America'), (6, 'AL', 'Albania', 'ALL', 'Tirana', 'Europe'), (7, 'AM', 'Armenia', 'AMD', 'Yerevan', 'Asia'), (8, 'AO', 'Angola', 'AOA', 'Luanda', 'Africa'), (9, 'AQ', 'Antarctica', '', '', 'Antarctica'), (10, 'AR', 'Argentina', 'ARS', 'Buenos Aires', 'South America'), (11, 'AS', 'American Samoa', 'USD', 'Pago Pago', 'Oceania'), (12, 'AT', 'Austria', 'EUR', 'Vienna', 'Europe'), (13, 'AU', 'Australia', 'AUD', 'Canberra', 'Oceania'), (14, 'AW', 'Aruba', 'AWG', 'Oranjestad', 'North America'), (15, 'AX', 'Åland', 'EUR', 'Mariehamn', 'Europe'), (16, 'AZ', 'Azerbaijan', 'AZN', 'Baku', 'Asia'), (17, 'BA', 'Bosnia and Herzegovina', 'BAM', 'Sarajevo', 'Europe'), (18, 'BB', 'Barbados', 'BBD', 'Bridgetown', 'North America'), (19, 'BD', 'Bangladesh', 'BDT', 'Dhaka', 'Asia'), (20, 'BE', 'Belgium', 'EUR', 'Brussels', 'Europe'), (21, 'BF', 'Burkina Faso', 'XOF', 'Ouagadougou', 'Africa'), (22, 'BG', 'Bulgaria', 'BGN', 'Sofia', 'Europe'), (23, 'BH', 'Bahrain', 'BHD', 'Manama', 'Asia'), (24, 'BI', 'Burundi', 'BIF', 'Bujumbura', 'Africa'), (25, 'BJ', 'Benin', 'XOF', 'Porto-Novo', 'Africa'), (26, 'BL', 'Saint Barthélemy', 'EUR', 'Gustavia', 'North America'), (27, 'BM', 'Bermuda', 'BMD', 'Hamilton', 'North America'), (28, 'BN', 'Brunei', 'BND', 'Bandar Seri Begawan', 'Asia'), (29, 'BO', 'Bolivia', 'BOB', 'Sucre', 'South America'), (30, 'BQ', 'Bonaire', 'USD', '', 'North America'), (31, 'BR', 'Brazil', 'BRL', 'Brasília', 'South America'), (32, 'BS', 'Bahamas', 'BSD', 'Nassau', 'North America'), (33, 'BT', 'Bhutan', 'BTN', 'Thimphu', 'Asia'), (34, 'BV', 'Bouvet Island', 'NOK', '', 'Antarctica'), (35, 'BW', 'Botswana', 'BWP', 'Gaborone', 'Africa'), (36, 'BY', 'Belarus', 'BYR', 'Minsk', 'Europe'), (37, 'BZ', 'Belize', 'BZD', 'Belmopan', 'North America'), (38, 'CA', 'Canada', 'CAD', 'Ottawa', 'North America'), (39, 'CC', 'Cocos [Keeling] Islands', 'AUD', 'West Island', 'Asia'), (40, 'CD', 'Democratic Republic of the Congo', 'CDF', 'Kinshasa', 'Africa'), (41, 'CF', 'Central African Republic', 'XAF', 'Bangui', 'Africa'), (42, 'CG', 'Republic of the Congo', 'XAF', 'Brazzaville', 'Africa'), (43, 'CH', 'Switzerland', 'CHF', 'Berne', 'Europe'), (44, 'CI', 'Ivory Coast', 'XOF', 'Yamoussoukro', 'Africa'), (45, 'CK', 'Cook Islands', 'NZD', 'Avarua', 'Oceania'), (46, 'CL', 'Chile', 'CLP', 'Santiago', 'South America'), (47, 'CM', 'Cameroon', 'XAF', 'Yaoundé', 'Africa'), (48, 'CN', 'China', 'CNY', 'Beijing', 'Asia'), (49, 'CO', 'Colombia', 'COP', 'Bogotá', 'South America'), (50, 'CR', 'Costa Rica', 'CRC', 'San José', 'North America'), (51, 'CU', 'Cuba', 'CUP', 'Havana', 'North America'), (52, 'CV', 'Cape Verde', 'CVE', 'Praia', 'Africa'), (53, 'CW', 'Curacao', 'ANG', 'Willemstad', 'North America'), (54, 'CX', 'Christmas Island', 'AUD', 'The Settlement', 'Asia'), (55, 'CY', 'Cyprus', 'EUR', 'Nicosia', 'Europe'), (56, 'CZ', 'Czech Republic', 'CZK', 'Prague', 'Europe'), (57, 'DE', 'Germany', 'EUR', 'Berlin', 'Europe'), (58, 'DJ', 'Djibouti', 'DJF', 'Djibouti', 'Africa'), (59, 'DK', 'Denmark', 'DKK', 'Copenhagen', 'Europe'), (60, 'DM', 'Dominica', 'XCD', 'Roseau', 'North America'), (61, 'DO', 'Dominican Republic', 'DOP', 'Santo Domingo', 'North America'), (62, 'DZ', 'Algeria', 'DZD', 'Algiers', 'Africa'), (63, 'EC', 'Ecuador', 'USD', 'Quito', 'South America'), (64, 'EE', 'Estonia', 'EUR', 'Tallinn', 'Europe'), (65, 'EG', 'Egypt', 'EGP', 'Cairo', 'Africa'), (66, 'EH', 'Western Sahara', 'MAD', 'El Aaiún', 'Africa'), (67, 'ER', 'Eritrea', 'ERN', 'Asmara', 'Africa'), (68, 'ES', 'Spain', 'EUR', 'Madrid', 'Europe'), (69, 'ET', 'Ethiopia', 'ETB', 'Addis Ababa', 'Africa'), (70, 'FI', 'Finland', 'EUR', 'Helsinki', 'Europe'), (71, 'FJ', 'Fiji', 'FJD', 'Suva', 'Oceania'), (72, 'FK', 'Falkland Islands', 'FKP', 'Stanley', 'South America'), (73, 'FM', 'Micronesia', 'USD', 'Palikir', 'Oceania'), (74, 'FO', 'Faroe Islands', 'DKK', 'Tórshavn', 'Europe'), (75, 'FR', 'France', 'EUR', 'Paris', 'Europe'), (76, 'GA', 'Gabon', 'XAF', 'Libreville', 'Africa'), (77, 'GB', 'United Kingdom', 'GBP', 'London', 'Europe'), (78, 'GD', 'Grenada', 'XCD', 'St. George''s', 'North America'), (79, 'GE', 'Georgia', 'GEL', 'Tbilisi', 'Asia'), (80, 'GF', 'French Guiana', 'EUR', 'Cayenne', 'South America'), (81, 'GG', 'Guernsey', 'GBP', 'St Peter Port', 'Europe'), (82, 'GH', 'Ghana', 'GHS', 'Accra', 'Africa'), (83, 'GI', 'Gibraltar', 'GIP', 'Gibraltar', 'Europe'), (84, 'GL', 'Greenland', 'DKK', 'Nuuk', 'North America'), (85, 'GM', 'Gambia', 'GMD', 'Banjul', 'Africa'), (86, 'GN', 'Guinea', 'GNF', 'Conakry', 'Africa'), (87, 'GP', 'Guadeloupe', 'EUR', 'Basse-Terre', 'North America'), (88, 'GQ', 'Equatorial Guinea', 'XAF', 'Malabo', 'Africa'), (89, 'GR', 'Greece', 'EUR', 'Athens', 'Europe'), (90, 'GS', 'South Georgia and the South Sandwich Islands', 'GBP', 'Grytviken', 'Antarctica'), (91, 'GT', 'Guatemala', 'GTQ', 'Guatemala City', 'North America'), (92, 'GU', 'Guam', 'USD', 'Hagåtña', 'Oceania'), (93, 'GW', 'Guinea-Bissau', 'XOF', 'Bissau', 'Africa'), (94, 'GY', 'Guyana', 'GYD', 'Georgetown', 'South America'), (95, 'HK', 'Hong Kong', 'HKD', 'Hong Kong', 'Asia'), (96, 'HM', 'Heard Island and McDonald Islands', 'AUD', '', 'Antarctica'), (97, 'HN', 'Honduras', 'HNL', 'Tegucigalpa', 'North America'), (98, 'HR', 'Croatia', 'HRK', 'Zagreb', 'Europe'), (99, 'HT', 'Haiti', 'HTG', 'Port-au-Prince', 'North America'), (100, 'HU', 'Hungary', 'HUF', 'Budapest', 'Europe'), (101, 'ID', 'Indonesia', 'IDR', 'Jakarta', 'Asia'), (102, 'IE', 'Ireland', 'EUR', 'Dublin', 'Europe'), (103, 'IL', 'Israel', 'ILS', '', 'Asia'), (104, 'IM', 'Isle of Man', 'GBP', 'Douglas', 'Europe'), (105, 'IN', 'India', 'INR', 'New Delhi', 'Asia'), (106, 'IO', 'British Indian Ocean Territory', 'USD', '', 'Asia'), (107, 'IQ', 'Iraq', 'IQD', 'Baghdad', 'Asia'), (108, 'IR', 'Iran', 'IRR', 'Tehran', 'Asia'), (109, 'IS', 'Iceland', 'ISK', 'Reykjavik', 'Europe'), (110, 'IT', 'Italy', 'EUR', 'Rome', 'Europe'), (111, 'JE', 'Jersey', 'GBP', 'Saint Helier', 'Europe'), (112, 'JM', 'Jamaica', 'JMD', 'Kingston', 'North America'), (113, 'JO', 'Jordan', 'JOD', 'Amman', 'Asia'), (114, 'JP', 'Japan', 'JPY', 'Tokyo', 'Asia'), (115, 'KE', 'Kenya', 'KES', 'Nairobi', 'Africa'), (116, 'KG', 'Kyrgyzstan', 'KGS', 'Bishkek', 'Asia'), (117, 'KH', 'Cambodia', 'KHR', 'Phnom Penh', 'Asia'), (118, 'KI', 'Kiribati', 'AUD', 'Tarawa', 'Oceania'), (119, 'KM', 'Comoros', 'KMF', 'Moroni', 'Africa'), (120, 'KN', 'Saint Kitts and Nevis', 'XCD', 'Basseterre', 'North America'), (121, 'KP', 'North Korea', 'KPW', 'Pyongyang', 'Asia'), (122, 'KR', 'South Korea', 'KRW', 'Seoul', 'Asia'), (123, 'KW', 'Kuwait', 'KWD', 'Kuwait City', 'Asia'), (124, 'KY', 'Cayman Islands', 'KYD', 'George Town', 'North America'), (125, 'KZ', 'Kazakhstan', 'KZT', 'Astana', 'Asia'), (126, 'LA', 'Laos', 'LAK', 'Vientiane', 'Asia'), (127, 'LB', 'Lebanon', 'LBP', 'Beirut', 'Asia'), (128, 'LC', 'Saint Lucia', 'XCD', 'Castries', 'North America'), (129, 'LI', 'Liechtenstein', 'CHF', 'Vaduz', 'Europe'), (130, 'LK', 'Sri Lanka', 'LKR', 'Colombo', 'Asia'), (131, 'LR', 'Liberia', 'LRD', 'Monrovia', 'Africa'), (132, 'LS', 'Lesotho', 'LSL', 'Maseru', 'Africa'), (133, 'LT', 'Lithuania', 'LTL', 'Vilnius', 'Europe'), (134, 'LU', 'Luxembourg', 'EUR', 'Luxembourg', 'Europe'), (135, 'LV', 'Latvia', 'EUR', 'Riga', 'Europe'), (136, 'LY', 'Libya', 'LYD', 'Tripoli', 'Africa'), (137, 'MA', 'Morocco', 'MAD', 'Rabat', 'Africa'), (138, 'MC', 'Monaco', 'EUR', 'Monaco', 'Europe'), (139, 'MD', 'Moldova', 'MDL', 'Chişinău', 'Europe'), (140, 'ME', 'Montenegro', 'EUR', 'Podgorica', 'Europe'), (141, 'MF', 'Saint Martin', 'EUR', 'Marigot', 'North America'), (142, 'MG', 'Madagascar', 'MGA', 'Antananarivo', 'Africa'), (143, 'MH', 'Marshall Islands', 'USD', 'Majuro', 'Oceania'), (144, 'MK', 'Macedonia', 'MKD', 'Skopje', 'Europe'), (145, 'ML', 'Mali', 'XOF', 'Bamako', 'Africa'), (146, 'MM', 'Myanmar [Burma]', 'MMK', 'Nay Pyi Taw', 'Asia'), (147, 'MN', 'Mongolia', 'MNT', 'Ulan Bator', 'Asia'), (148, 'MO', 'Macao', 'MOP', 'Macao', 'Asia'), (149, 'MP', 'Northern Mariana Islands', 'USD', 'Saipan', 'Oceania'), (150, 'MQ', 'Martinique', 'EUR', 'Fort-de-France', 'North America'), (151, 'MR', 'Mauritania', 'MRO', 'Nouakchott', 'Africa'), (152, 'MS', 'Montserrat', 'XCD', 'Plymouth', 'North America'), (153, 'MT', 'Malta', 'EUR', 'Valletta', 'Europe'), (154, 'MU', 'Mauritius', 'MUR', 'Port Louis', 'Africa'), (155, 'MV', 'Maldives', 'MVR', 'Malé', 'Asia'), (156, 'MW', 'Malawi', 'MWK', 'Lilongwe', 'Africa'), (157, 'MX', 'Mexico', 'MXN', 'Mexico City', 'North America'), (158, 'MY', 'Malaysia', 'MYR', 'Kuala Lumpur', 'Asia'), (159, 'MZ', 'Mozambique', 'MZN', 'Maputo', 'Africa'), (160, 'NA', 'Namibia', 'NAD', 'Windhoek', 'Africa'), (161, 'NC', 'New Caledonia', 'XPF', 'Noumea', 'Oceania'), (162, 'NE', 'Niger', 'XOF', 'Niamey', 'Africa'), (163, 'NF', 'Norfolk Island', 'AUD', 'Kingston', 'Oceania'), (164, 'NG', 'Nigeria', 'NGN', 'Abuja', 'Africa'), (165, 'NI', 'Nicaragua', 'NIO', 'Managua', 'North America'), (166, 'NL', 'Netherlands', 'EUR', 'Amsterdam', 'Europe'), (167, 'NO', 'Norway', 'NOK', 'Oslo', 'Europe'), (168, 'NP', 'Nepal', 'NPR', 'Kathmandu', 'Asia'), (169, 'NR', 'Nauru', 'AUD', '', 'Oceania'), (170, 'NU', 'Niue', 'NZD', 'Alofi', 'Oceania'), (171, 'NZ', 'New Zealand', 'NZD', 'Wellington', 'Oceania'), (172, 'OM', 'Oman', 'OMR', 'Muscat', 'Asia'), (173, 'PA', 'Panama', 'PAB', 'Panama City', 'North America'), (174, 'PE', 'Peru', 'PEN', 'Lima', 'South America'), (175, 'PF', 'French Polynesia', 'XPF', 'Papeete', 'Oceania'), (176, 'PG', 'Papua New Guinea', 'PGK', 'Port Moresby', 'Oceania'), (177, 'PH', 'Philippines', 'PHP', 'Manila', 'Asia'), (178, 'PK', 'Pakistan', 'PKR', 'Islamabad', 'Asia'), (179, 'PL', 'Poland', 'PLN', 'Warsaw', 'Europe'), (180, 'PM', 'Saint Pierre and Miquelon', 'EUR', 'Saint-Pierre', 'North America'), (181, 'PN', 'Pitcairn Islands', 'NZD', 'Adamstown', 'Oceania'), (182, 'PR', 'Puerto Rico', 'USD', 'San Juan', 'North America'), (183, 'PS', 'Palestine', 'ILS', '', 'Asia'), (184, 'PT', 'Portugal', 'EUR', 'Lisbon', 'Europe'), (185, 'PW', 'Palau', 'USD', 'Melekeok - Palau State Capital', 'Oceania'), (186, 'PY', 'Paraguay', 'PYG', 'Asunción', 'South America'), (187, 'QA', 'Qatar', 'QAR', 'Doha', 'Asia'), (188, 'RE', 'Réunion', 'EUR', 'Saint-Denis', 'Africa'), (189, 'RO', 'Romania', 'RON', 'Bucharest', 'Europe'), (190, 'RS', 'Serbia', 'RSD', 'Belgrade', 'Europe'), (191, 'RU', 'Russia', 'RUB', 'Moscow', 'Europe'), (192, 'RW', 'Rwanda', 'RWF', 'Kigali', 'Africa'), (193, 'SA', 'Saudi Arabia', 'SAR', 'Riyadh', 'Asia'), (194, 'SB', 'Solomon Islands', 'SBD', 'Honiara', 'Oceania'), (195, 'SC', 'Seychelles', 'SCR', 'Victoria', 'Africa'), (196, 'SD', 'Sudan', 'SDG', 'Khartoum', 'Africa'), (197, 'SE', 'Sweden', 'SEK', 'Stockholm', 'Europe'), (198, 'SG', 'Singapore', 'SGD', 'Singapore', 'Asia'), (199, 'SH', 'Saint Helena', 'SHP', 'Jamestown', 'Africa'), (200, 'SI', 'Slovenia', 'EUR', 'Ljubljana', 'Europe'), (201, 'SJ', 'Svalbard and Jan Mayen', 'NOK', 'Longyearbyen', 'Europe'), (202, 'SK', 'Slovakia', 'EUR', 'Bratislava', 'Europe'), (203, 'SL', 'Sierra Leone', 'SLL', 'Freetown', 'Africa'), (204, 'SM', 'San Marino', 'EUR', 'San Marino', 'Europe'), (205, 'SN', 'Senegal', 'XOF', 'Dakar', 'Africa'), (206, 'SO', 'Somalia', 'SOS', 'Mogadishu', 'Africa'), (207, 'SR', 'Suriname', 'SRD', 'Paramaribo', 'South America'), (208, 'SS', 'South Sudan', 'SSP', 'Juba', 'Africa'), (209, 'ST', 'São Tomé and Príncipe', 'STD', 'São Tomé', 'Africa'), (210, 'SV', 'El Salvador', 'USD', 'San Salvador', 'North America'), (211, 'SX', 'Sint Maarten', 'ANG', 'Philipsburg', 'North America'), (212, 'SY', 'Syria', 'SYP', 'Damascus', 'Asia'), (213, 'SZ', 'Swaziland', 'SZL', 'Mbabane', 'Africa'), (214, 'TC', 'Turks and Caicos Islands', 'USD', 'Cockburn Town', 'North America'), (215, 'TD', 'Chad', 'XAF', 'N''Djamena', 'Africa'), (216, 'TF', 'French Southern Territories', 'EUR', 'Port-aux-Français', 'Antarctica'), (217, 'TG', 'Togo', 'XOF', 'Lomé', 'Africa'), (218, 'TH', 'Thailand', 'THB', 'Bangkok', 'Asia'), (219, 'TJ', 'Tajikistan', 'TJS', 'Dushanbe', 'Asia'), (220, 'TK', 'Tokelau', 'NZD', '', 'Oceania'), (221, 'TL', 'East Timor', 'USD', 'Dili', 'Oceania'), (222, 'TM', 'Turkmenistan', 'TMT', 'Ashgabat', 'Asia'), (223, 'TN', 'Tunisia', 'TND', 'Tunis', 'Africa'), (224, 'TO', 'Tonga', 'TOP', 'Nuku''alofa', 'Oceania'), (225, 'TR', 'Turkey', 'TRY', 'Ankara', 'Asia'), (226, 'TT', 'Trinidad and Tobago', 'TTD', 'Port of Spain', 'North America'), (227, 'TV', 'Tuvalu', 'AUD', 'Funafuti', 'Oceania'), (228, 'TW', 'Taiwan', 'TWD', 'Taipei', 'Asia'), (229, 'TZ', 'Tanzania', 'TZS', 'Dodoma', 'Africa'), (230, 'UA', 'Ukraine', 'UAH', 'Kyiv', 'Europe'), (231, 'UG', 'Uganda', 'UGX', 'Kampala', 'Africa'), (232, 'UM', 'U.S. Minor Outlying Islands', 'USD', '', 'Oceania'), (233, 'US', 'United States', 'USD', 'Washington', 'North America'), (234, 'UY', 'Uruguay', 'UYU', 'Montevideo', 'South America'), (235, 'UZ', 'Uzbekistan', 'UZS', 'Tashkent', 'Asia'), (236, 'VA', 'Vatican City', 'EUR', 'Vatican', 'Europe'), (237, 'VC', 'Saint Vincent and the Grenadines', 'XCD', 'Kingstown', 'North America'), (238, 'VE', 'Venezuela', 'VEF', 'Caracas', 'South America'), (239, 'VG', 'British Virgin Islands', 'USD', 'Road Town', 'North America'), (240, 'VI', 'U.S. Virgin Islands', 'USD', 'Charlotte Amalie', 'North America'), (241, 'VN', 'Vietnam', 'VND', 'Hanoi', 'Asia'), (242, 'VU', 'Vanuatu', 'VUV', 'Port Vila', 'Oceania'), (243, 'WF', 'Wallis and Futuna', 'XPF', 'Mata-Utu', 'Oceania'), (244, 'WS', 'Samoa', 'WST', 'Apia', 'Oceania'), (245, 'XK', 'Kosovo', 'EUR', 'Pristina', 'Europe'), (246, 'YE', 'Yemen', 'YER', 'Sanaa', 'Asia'), (247, 'YT', 'Mayotte', 'EUR', 'Mamoutzou', 'Africa'), (248, 'ZA', 'South Africa', 'ZAR', 'Pretoria', 'Africa'), (249, 'ZM', 'Zambia', 'ZMW', 'Lusaka', 'Africa'), (250, 'ZW', 'Zimbabwe', 'ZWL', 'Harare', 'Africa'); -- -- Índices para tablas volcadas -- -- -- Indices de la tabla `countries` -- ALTER TABLE `countries` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT de las tablas volcadas -- -- -- AUTO_INCREMENT de la tabla `countries` -- ALTER TABLE `countries` MODIFY `id` int(5) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=251; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; |
Archivo HTML
El index.html, servirá para colocar un hipervínculo para poder realizar la descarga de nuestro reporte en Excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Reporte de excel con PHP y MySQL</title> </head> <body> <div> <h1>REPORTE DE EXCEL CON PHP Y MYSQL</h1> <div> <a href="exportar.php"> Generar reporte en Excel</a> </div> </div> </body> </html> |
Archivo PHP
Finalmente crearemos nuestro archivo llamado exportar.php donde hemos colocado el código necesario para general el archivo excel. Explicaré que es lo que hace cada segmento de código a continuación
El siguiente código comprueba si se está accediento al archivo vía HTTP
1 2 |
if (PHP_SAPI == 'cli') die('Este ejemplo sólo se puede ejecutar desde un navegador Web'); |
Se inicia con el proceso de creación del reporte en excel
1 2 3 4 |
/** Incluye PHPExcel */ require_once dirname(__FILE__) . '/Classes/PHPExcel.php'; // Crear nuevo objeto PHPExcel $objPHPExcel = new PHPExcel(); |
Colocamos la propiedades del documento
1 2 3 4 5 6 7 8 |
// Propiedades del documento $objPHPExcel->getProperties()->setCreator("Obed Alvarado") ->setLastModifiedBy("Obed Alvarado") ->setTitle("Office 2010 XLSX Documento de prueba") ->setSubject("Office 2010 XLSX Documento de prueba") ->setDescription("Documento de prueba para Office 2010 XLSX, generado usando clases de PHP.") ->setKeywords("office 2010 openxml php") ->setCategory("Archivo con resultado de prueba"); |
Crearemos los encabezados que contendrá el reporte
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Combino las celdas desde A1 hasta E1 $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:E1'); $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', 'REPORTE DE PAISES') ->setCellValue('A2', 'CODIGO') ->setCellValue('B2', 'NOMBRE') ->setCellValue('C2', 'MONEDA') ->setCellValue('D2', 'CAPITAL') ->setCellValue('E2', 'CONTINENTE'); // Fuente de la primera fila en negrita $boldArray = array('font' => array('bold' => true,),'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER)); $objPHPExcel->getActiveSheet()->getStyle('A1:E2')->applyFromArray($boldArray); |
El ancho de una columna se puede ajustar mediante el siguiente código:
1 2 3 4 5 6 |
//Ancho de las columnas $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(30); $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15); $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20); $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15); |
Extraer los datos de MySQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
/*Extraer datos de MYSQL*/ # conectare la base de datos $con=@mysqli_connect('localhost', 'root', 'root', 'test'); if(!$con){ die("imposible conectarse: ".mysqli_error($con)); } if (@mysqli_connect_errno()) { die("Connect failed: ".mysqli_connect_errno()." : ". mysqli_connect_error()); } $sql="SELECT * FROM countries order by countryName"; $query=mysqli_query($con,$sql); $cel=3;//Numero de fila donde empezara a crear el reporte while ($row=mysqli_fetch_array($query)){ $countryCode=$row['countryCode']; $countryName=$row['countryName']; $currencyCode=$row['currencyCode']; $capital=$row['capital']; $continentName=$row['continentName']; $a="A".$cel; $b="B".$cel; $c="C".$cel; $d="D".$cel; $e="E".$cel; // Agregar datos $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($a, $countryCode) ->setCellValue($b, $countryName) ->setCellValue($c, $currencyCode) ->setCellValue($d, $capital) ->setCellValue($e, $continentName); $cel+=1; } /*Fin extracion de datos MYSQL*/ |
A continuación se procede a darle formato a la celdas
1 2 3 4 5 |
$rango="A2:$e"; $styleArray = array('font' => array( 'name' => 'Arial','size' => 10), 'borders'=>array('allborders'=>array('style'=> PHPExcel_Style_Border::BORDER_THIN,'color'=>array('argb' => 'FFF'))) ); $objPHPExcel->getActiveSheet()->getStyle($rango)->applyFromArray($styleArray); |
Agregamos unos detalles más: nombre de la hoja de cálculo y activamos la primera hoja
1 2 3 4 5 6 |
// Cambiar el nombre de hoja de cálculo $objPHPExcel->getActiveSheet()->setTitle('Reporte de paises'); // Establecer índice de hoja activa a la primera hoja , por lo que Excel abre esto como la primera hoja $objPHPExcel->setActiveSheetIndex(0); |
Finalmente agregamos el código para que el usuario pueda descargar el archivo excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Redirigir la salida al navegador web de un cliente ( Excel5 ) header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="reporte.xls"'); header('Cache-Control: max-age=0'); // Si usted está sirviendo a IE 9 , a continuación, puede ser necesaria la siguiente header('Cache-Control: max-age=1'); // Si usted está sirviendo a IE a través de SSL , a continuación, puede ser necesaria la siguiente header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header ('Pragma: public'); // HTTP/1.0 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit; |
Uniendolo todo: a continuación se muestra como deberá de quedar el archivo exportar.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
<?php if (PHP_SAPI == 'cli') die('Este ejemplo sólo se puede ejecutar desde un navegador Web'); /** Incluye PHPExcel */ require_once dirname(__FILE__) . '/Classes/PHPExcel.php'; // Crear nuevo objeto PHPExcel $objPHPExcel = new PHPExcel(); // Propiedades del documento $objPHPExcel->getProperties()->setCreator("Obed Alvarado") ->setLastModifiedBy("Obed Alvarado") ->setTitle("Office 2010 XLSX Documento de prueba") ->setSubject("Office 2010 XLSX Documento de prueba") ->setDescription("Documento de prueba para Office 2010 XLSX, generado usando clases de PHP.") ->setKeywords("office 2010 openxml php") ->setCategory("Archivo con resultado de prueba"); // Combino las celdas desde A1 hasta E1 $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:E1'); $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', 'REPORTE DE PAISES') ->setCellValue('A2', 'CODIGO') ->setCellValue('B2', 'NOMBRE') ->setCellValue('C2', 'MONEDA') ->setCellValue('D2', 'CAPITAL') ->setCellValue('E2', 'CONTINENTE'); // Fuente de la primera fila en negrita $boldArray = array('font' => array('bold' => true,),'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER)); $objPHPExcel->getActiveSheet()->getStyle('A1:E2')->applyFromArray($boldArray); //Ancho de las columnas $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(30); $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15); $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20); $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15); /*Extraer datos de MYSQL*/ # conectare la base de datos $con=@mysqli_connect('localhost', 'root', 'root', 'test'); if(!$con){ die("imposible conectarse: ".mysqli_error($con)); } if (@mysqli_connect_errno()) { die("Connect failed: ".mysqli_connect_errno()." : ". mysqli_connect_error()); } $sql="SELECT * FROM countries order by countryName"; $query=mysqli_query($con,$sql); $cel=3;//Numero de fila donde empezara a crear el reporte while ($row=mysqli_fetch_array($query)){ $countryCode=$row['countryCode']; $countryName=$row['countryName']; $currencyCode=$row['currencyCode']; $capital=$row['capital']; $continentName=$row['continentName']; $a="A".$cel; $b="B".$cel; $c="C".$cel; $d="D".$cel; $e="E".$cel; // Agregar datos $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($a, $countryCode) ->setCellValue($b, $countryName) ->setCellValue($c, $currencyCode) ->setCellValue($d, $capital) ->setCellValue($e, $continentName); $cel+=1; } /*Fin extracion de datos MYSQL*/ $rango="A2:$e"; $styleArray = array('font' => array( 'name' => 'Arial','size' => 10), 'borders'=>array('allborders'=>array('style'=> PHPExcel_Style_Border::BORDER_THIN,'color'=>array('argb' => 'FFF'))) ); $objPHPExcel->getActiveSheet()->getStyle($rango)->applyFromArray($styleArray); // Cambiar el nombre de hoja de cálculo $objPHPExcel->getActiveSheet()->setTitle('Reporte de paises'); // Establecer índice de hoja activa a la primera hoja , por lo que Excel abre esto como la primera hoja $objPHPExcel->setActiveSheetIndex(0); // Redirigir la salida al navegador web de un cliente ( Excel5 ) header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="reporte.xls"'); header('Cache-Control: max-age=0'); // Si usted está sirviendo a IE 9 , a continuación, puede ser necesaria la siguiente header('Cache-Control: max-age=1'); // Si usted está sirviendo a IE a través de SSL , a continuación, puede ser necesaria la siguiente header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header ('Pragma: public'); // HTTP/1.0 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit; |
Con toda ésta información terminamos el tutorial, si el ejemplo te ha sido de utilidad, no olvides comentar 🙂