comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Clase para crear y modificar un archivo Excel desde PHP

  • 0 Respuestas
  • 1907 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5401
  • Actividad:
    30%
  • Reputación 31
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« en: Febrero 24, 2010, 11:42:44 am »
Clase para crear y modificar un archivo Excel desde PHP

Esta clase de PHP permite crear, cargar, leer, escribir y grabar en libros y hojas de Microsoft Excel.
 

Código: PHP
  1. <?php
  2. /* Class for use with PHP4 scripts only*/
  3. /*
  4. * This is an Excel class to create,load,read,write,save and use some of the internal
  5. * functionalities of workbooks and sheets.
  6. * Tested with Windows 98 - MS Office 2000
  7. * Apache 1.3.9 PHP4.02 Running as CGI
  8. * (c) Alain M. Samoun 09/2000.
  9. * alain @sonic.net
  10. * Gnu GPL code (see www.fsf.org for more information).
  11. */
  12.  
  13. class Excel {
  14. /* variables */
  15. var $ex;
  16. var $pathin;
  17. var $pathout;
  18. var $workbook;
  19. var $sheet;
  20. var $visible;
  21. var $fformatin;
  22. var $fformatout;
  23. var $cell;
  24. var $rangesens;
  25. var $range;
  26. var $ext;
  27. var $oext;
  28. var $error = 0;
  29. var $msg_error;
  30.  
  31. /* Constructor */
  32. function excel()
  33. {
  34. #Instantiate Excel
  35. $this->ex = new COM("Excel.Application") or $this->error = 1;
  36. if ($this->get_error()==0)
  37. return true;
  38. else
  39. return false;
  40. }
  41.  
  42. function XL($workbook,$pathin="",$sheet="Hoja1")
  43. {
  44. if ($workbook != "")
  45. {
  46. #Load the workbook
  47. $wkb =  @$this->ex->application->Workbooks->Open($pathin.$workbook) or $this->error = 2;
  48. }else{
  49. #New workbook
  50. $wkb =  @$this->ex->application->Workbooks->Add or $this->error = 3;
  51. }
  52. if ($this->error==0)
  53. if ($sheet != "")
  54. {
  55. #Activate the sheet
  56. $sheets =  @$wkb->Worksheets($sheet) or $this->error = 4;
  57. }else{
  58. #new sheet
  59. $sheet = "Hoja1" ;
  60. }
  61. #Excel Won't prompt the user when replacing or closing workbooks
  62. #Comment the line below if you want Excel to prompt
  63. // $this->ex->application->DisplayAlerts = "False";
  64. if ($this->get_error()==0)
  65. return true;
  66. else
  67. return false;
  68. }
  69.  
  70. function readrange($sheet="Hoja1",$range)
  71. {
  72. #Read all the cells in the range to $result and return it
  73. No tienes permisos para ver links. Registrate o Entra con tu cuenta ($result);
  74. $range = No tienes permisos para ver links. Registrate o Entra con tu cuenta($range);
  75. #Determine start and end of range
  76. $tokstart = No tienes permisos para ver links. Registrate o Entra con tu cuenta($range,":");
  77. $tokend = No tienes permisos para ver links. Registrate o Entra con tu cuenta(":");
  78. if ($tokend =="")
  79. {
  80. #Read one single cell
  81. $sheets = $this->ex->Application->Worksheets($sheet);
  82. $sheets->activate;
  83. #Select the cell
  84. $selcell = $sheets->No tienes permisos para ver links. Registrate o Entra con tu cuenta($range);
  85. $selcell->activate;
  86. return $selcell->value;
  87. }
  88. #Read a range of cells
  89. #determine column and row numbers
  90. $sheets = $this->ex->Application->Worksheets($sheet);
  91. $sheets->activate;
  92. $rgstart = $sheets->No tienes permisos para ver links. Registrate o Entra con tu cuenta($tokstart);
  93. $colstart = $rgstart->column;
  94. $rowstart = $rgstart->row;
  95. $rgend = $sheets->No tienes permisos para ver links. Registrate o Entra con tu cuenta($tokend);
  96. $colend = $rgend->column;
  97. $rowend = $rgend->row;
  98. if ($colstart>$colend or $rowstart>$rowend)
  99. {
  100. Print ("Notation Error! Cell Column/Row should be increasing.");
  101. return;
  102. }
  103. #Now read each cell
  104. if ($colstart == $colend)
  105. {
  106. #Read Vertically
  107. $j=0;
  108. For ($i= $rowstart; $i<=$rowend; $i++)
  109. {
  110. $selcell = $sheets->cells($i,$colstart);
  111. $selcell->activate;
  112. $result[$j] = $selcell->value;
  113. $j++;
  114. }
  115. }else
  116. {
  117. #Read horizontally
  118. $j=0;
  119. For ($i= $colstart; $i<=$colend; $i++)
  120. {
  121. $selcell = $sheets->cells($rowstart,$i);
  122. $selcell->activate;
  123. $result[$j] = $selcell->value;
  124. $j++;
  125. }
  126. }
  127. return $result;
  128. }
  129.  
  130. function writerange($sheet="Hoja1",$range,$value)
  131. {
  132. #Fill up all the cells in the range with array
  133. $range = No tienes permisos para ver links. Registrate o Entra con tu cuenta($range);
  134. #Determine start and end of range
  135. $tokstart = No tienes permisos para ver links. Registrate o Entra con tu cuenta($range,":");
  136. $tokend = No tienes permisos para ver links. Registrate o Entra con tu cuenta(":");
  137. if ($tokend =="")
  138. {
  139. # Write to a single cell in the active sheet
  140. $cell = No tienes permisos para ver links. Registrate o Entra con tu cuenta($range);
  141. #Select the sheet
  142. $sheets = $this->ex->Application->Worksheets($sheet);
  143. $sheets->activate;
  144. #Select the cell
  145. $selcell = $sheets->No tienes permisos para ver links. Registrate o Entra con tu cuenta($cell);
  146. $selcell->activate;
  147. $selcell->value = $value;
  148. return;
  149. }
  150. #determine column and row numbers
  151. $sheets = $this->ex->Application->Worksheets($sheet);
  152. $sheets->activate;
  153. $rgstart = $sheets->No tienes permisos para ver links. Registrate o Entra con tu cuenta($tokstart);
  154. $colstart = $rgstart->column;
  155. $rowstart = $rgstart->row;
  156. $rgend = $sheets->No tienes permisos para ver links. Registrate o Entra con tu cuenta($tokend);
  157. $colend = $rgend->column;
  158. $rowend = $rgend->row;
  159. if ($colstart>$colend or $rowstart>$rowend)
  160. {
  161. Print ("Notation Error! Cell Column/Row should be increasing.");
  162. return;
  163. }
  164. #Now write each cell
  165. if ($colstart == $colend)
  166. {
  167. #write Vertically
  168. $j=0;
  169. For ($i= $rowstart; $i<=$rowend; $i++)
  170. {
  171. $selcell = $sheets->cells($i,$colstart);
  172. $selcell->activate;
  173. $selcell->value = $value[$j];
  174. $j++;
  175. }
  176. }else
  177. {
  178. #Write horizontally
  179. $j=0;
  180. For ($i= $colstart; $i<=$colend; $i++)
  181. {
  182. $selcell = $sheets->cells($rowstart,$i);
  183. $selcell->activate;
  184. $selcell->value = $value[$j];
  185. $j++;
  186. }
  187. }
  188. return 1;
  189. }
  190. function saveas($workbook,$pathout,$ext)
  191. {
  192.  
  193. #First get the file format code for the extension $ext
  194. $code = $this->fileformater($ext);
  195. $basefile = No tienes permisos para ver links. Registrate o Entra con tu cuenta($workbook,".");
  196. $newworkbook = $basefile."."."$ext";
  197.  
  198. #If no prompt and file exists it will be replaced.
  199.  
  200. #Save the current workbook as new workbook
  201. #The following line will work for converting spreadsheets file to xls
  202. #but if the original is an excel file and the new file another format
  203. #then it may not work because limitations of excel.(See excel doc)
  204. $this->ex->Application->ActiveWorkbook->SaveAS($pathout.$newworkbook,$code);
  205.  
  206. return 1;
  207. }
  208.  
  209. function fileformater($ext)
  210. {
  211. switch(No tienes permisos para ver links. Registrate o Entra con tu cuenta($ext))
  212. {
  213. case "slk":
  214. return 2;
  215. break;
  216. case "xlt":
  217. return -4143;
  218. break;
  219. case "txt":
  220. return -4158;
  221. break;
  222. case "csv":
  223. return 6;
  224. break;
  225. case "xlw":
  226. return 35;
  227. break;
  228. case "w4k":
  229. return 38;
  230. break;
  231. case "wq1":
  232. return 34;
  233. break;
  234. case "prn":
  235. return -4158;
  236. break;
  237. case "dif":
  238. return 9;
  239. break;
  240. case "xla":
  241. return -4143;
  242. break;
  243. case "wk3":
  244. return 32;
  245. break;
  246. case "xls":
  247. return -4143;
  248. break;
  249. case "htm":
  250. return 44;
  251. break;
  252. case "wks":
  253. return 4;
  254. break;
  255. default:
  256. return -4143;
  257.  
  258. }
  259. }
  260. function XLTranslate($pathin,$pathout,$oext,$ext,$kill=0)
  261. {
  262. #This function will translate automatically all spreadsheets files, with the
  263. #$oext extension, in the $pathin directory, to another spreadsheet file,
  264. #with the $ext extension, to the $pathout directory.
  265. #It will erase the original file if $kill switch = 1.
  266. #Limitations: Will work always when translating none excel files to
  267. #excel files(Extension=xl*) and with the translation xls->htm . It will
  268. #not generally work when translating excel files to other formats because
  269. #the questions asked by the excel program stop the script.
  270. #Get all files in the source directory $pathin to the $filelist array
  271. No tienes permisos para ver links. Registrate o Entra con tu cuenta($pathin);
  272. $dir=No tienes permisos para ver links. Registrate o Entra con tu cuenta (".");
  273. $i=1;
  274. while($file=$dir->read())
  275. {
  276. $filelist [$i] = $file;
  277. $i++;
  278. }
  279. $dir->close;
  280. #Translate each file, with the original extension $oext, in the $filelist
  281. #to the needed extension $ext.
  282. for ($i=1;$i<= No tienes permisos para ver links. Registrate o Entra con tu cuenta($filelist); $i++)
  283. {
  284. $file = $filelist[$i];
  285. $basefile = No tienes permisos para ver links. Registrate o Entra con tu cuenta($file,".");
  286. $extension = No tienes permisos para ver links. Registrate o Entra con tu cuenta(".");
  287.  
  288. if (No tienes permisos para ver links. Registrate o Entra con tu cuenta($extension) == No tienes permisos para ver links. Registrate o Entra con tu cuenta($oext))
  289. {
  290. echo "<BR> $file";
  291. $this->XL($file,$pathin,$sheet="");
  292. $this->saveas($file,$pathout,$ext,"");
  293. #Erase the original file if $kill=1
  294. if ($kill)
  295. {
  296. No tienes permisos para ver links. Registrate o Entra con tu cuenta ($file,0777);
  297. No tienes permisos para ver links. Registrate o Entra con tu cuenta ($pathin.$file);
  298. }
  299. #Close the new workbook
  300. $this->closeXL();
  301. }
  302. }
  303. return 1;
  304. }
  305.  
  306. function closexl()
  307. {
  308. #Close active workbook without prompt from Excel
  309. $this->ex->application->ActiveWorkbook->Close("False");
  310. return 1;
  311. }
  312. function runfunction($funct,$arrayparam)
  313. {
  314. #Run and return value of an excel function
  315. $params = No tienes permisos para ver links. Registrate o Entra con tu cuenta(",",$arrayparam);
  316. No tienes permisos para ver links. Registrate o Entra con tu cuenta ("$result = $this->ex->application->$funct($params);");
  317. return $result;
  318. }
  319. Function runmacro($workbook,$macroname)
  320. {
  321. $this->ex->application->Run("$workbook!$macroname");
  322. return 1;
  323. }
  324. Function createhyperlink($sheet="Hoja1",$cell,$hyperl)
  325. {
  326. #Not working as 9/2/00 4:57PM
  327. print "<br>link = $hyperl <br>";
  328. $sheets = $this->ex->Application->Worksheets($sheet);
  329. $sheets->activate;
  330. #Select the cell
  331. $selcell = $sheets->No tienes permisos para ver links. Registrate o Entra con tu cuenta($cell);
  332. $sheets->hyperlinks->add($selcell,$hyperl);
  333.  
  334. return 1;
  335. }
  336. function calculate($sheet="Hoja1")
  337. {
  338. #Calculate (update) the current sheet
  339. $sheets = $this->ex->Application->Worksheets($sheet); #Select the sheet
  340. $sheets->activate;
  341. $sheets->Calculate;
  342. return 1;
  343. }
  344.  
  345. function get_error()
  346. {
  347. return $this->error;
  348. }
  349.  
  350. function set_error($id_error)
  351. {
  352. $this->error = $id_error;
  353. }
  354.  
  355. function get_msg_error($id_error)
  356. {
  357. switch($id_error)
  358. {
  359. // case 1: return "Did not instantiate Excel";
  360. case 1: return "No se puede abrir el fichero Excel";
  361. // case 2: return "Did not open $pathin $workbook";
  362. case 2: return "No se puede abrir el fichero Excel seleccionado";
  363. // case 3: return "Unable to add a workbook";
  364. case 3: return "Unable to add a workbook";
  365. // case 4: return "Unable to activate $sheet";
  366. case 4: return "No se puede abrir el fichero Excel seleccionado";
  367. }
  368. }
  369. } /* end of Excel class */
  370. ?>
« Última modificación: Marzo 27, 2014, 06:14:13 pm por Expermicid »


 

¿Te gustó el post? COMPARTILO!



[APORTE] edPDF - "Libreria" para edicion y creacion de PDFs

Iniciado por kid_goth

Respuestas: 4
Vistas: 1065
Último mensaje Marzo 10, 2014, 07:15:31 pm
por kid_goth
Script para convertir planos cartograficos de OPENJUMP a AMCHARTS SVG JSON

Iniciado por graphixx

Respuestas: 0
Vistas: 1446
Último mensaje Septiembre 21, 2015, 11:18:27 pm
por graphixx
[Tutorial] Utilizar el método GET para simplificar páginas [Xt3mP]

Iniciado por Xt3mP

Respuestas: 0
Vistas: 1320
Último mensaje Marzo 19, 2010, 01:15:53 am
por Xt3mP
Script php para generar thumbnails (console line)

Iniciado por kid_goth

Respuestas: 0
Vistas: 969
Último mensaje Abril 13, 2013, 10:31:46 pm
por kid_goth
[Tutorial] Utilizando localhost para visualizar .php by Subzer [PHP]

Iniciado por Subzer

Respuestas: 2
Vistas: 1617
Último mensaje Noviembre 14, 2012, 09:57:49 pm
por Subzer