/excel.c

http://github.com/iliaal/php_excel · C · 6464 lines · 4790 code · 1017 blank · 657 comment · 564 complexity · fb1b521e7296e6cbbe4722a0016c6bbe MD5 · raw file

  1. /*
  2. +----------------------------------------------------------------------+
  3. | PHP Version 5 |
  4. +----------------------------------------------------------------------+
  5. | Copyright (c) 1997-2014 The PHP Group |
  6. +----------------------------------------------------------------------+
  7. | This source file is subject to version 3.01 of the PHP license, |
  8. | that is bundled with this package in the file LICENSE, and is |
  9. | available through the world-wide-web at the following url: |
  10. | http://www.php.net/license/3_01.txt |
  11. | If you did not receive a copy of the PHP license and are unable to |
  12. | obtain it through the world-wide-web, please send a note to |
  13. | license@php.net so we can mail you a copy immediately. |
  14. +----------------------------------------------------------------------+
  15. | Author: Ilia Alshanetsky <ilia@ilia.ws> |
  16. +----------------------------------------------------------------------+
  17. */
  18. #ifdef HAVE_CONFIG_H
  19. #include "config.h"
  20. #endif
  21. #include "libxl.h"
  22. #include <stdlib.h>
  23. #include "php.h"
  24. #include "php_ini.h"
  25. #include "ext/standard/info.h"
  26. #include "ext/date/php_date.h"
  27. #if defined(HAVE_XML) && defined(EXCEL_WITH_LIBXML)
  28. #include "ext/xml/php_xml.h"
  29. #endif
  30. #include "php_excel.h"
  31. #include "zend_exceptions.h"
  32. static long xlFormatBorder(FormatHandle f)
  33. {
  34. return 1;
  35. }
  36. static long xlFormatBorderColor(FormatHandle f)
  37. {
  38. return 1;
  39. }
  40. /* work-around for missing headers in LibXL */
  41. #ifndef LIBXL_VERSION
  42. #define xlSheetSetProtect xlSheetSetProtectA
  43. #ifndef HAVE_LIBXL_243_PLUS
  44. #define xlSheetProtect xlSheetProtectA
  45. #endif
  46. #endif
  47. #if LIBXL_VERSION >= 0x03020000
  48. #define xlBookSetRefR1C1 xlBookSetRefR1C1A
  49. #define xlBookRefR1C1 xlBookRefR1C1A
  50. #endif
  51. #if LIBXL_VERSION >= 0x03020000 && LIBXL_VERSION < 0x03050401
  52. enum libXLPictureType {PICTURETYPE_PNG, PICTURETYPE_JPEG, PICTURETYPE_WMF, PICTURETYPE_DIB, PICTURETYPE_EMF, PICTURETYPE_PICT, PICTURETYPE_TIFF, PICTURETYPE_ERROR = 0xFF};
  53. #endif
  54. #define PHP_EXCEL_DATE 1
  55. #define PHP_EXCEL_FORMULA 2
  56. #define PHP_EXCEL_NUMERIC_STRING 3
  57. #define PHP_EXCEL_VERSION "1.0.3dev"
  58. #ifdef COMPILE_DL_EXCEL
  59. ZEND_GET_MODULE(excel)
  60. #endif
  61. ZEND_DECLARE_MODULE_GLOBALS(excel)
  62. static PHP_GINIT_FUNCTION(excel);
  63. PHP_INI_BEGIN()
  64. #if defined(HAVE_LIBXL_SETKEY)
  65. STD_PHP_INI_ENTRY("excel.license_name", NULL, PHP_INI_ALL, OnUpdateString, ini_license_name, zend_excel_globals, excel_globals)
  66. STD_PHP_INI_ENTRY("excel.license_key", NULL, PHP_INI_ALL, OnUpdateString, ini_license_key, zend_excel_globals, excel_globals)
  67. #endif
  68. STD_PHP_INI_ENTRY("excel.skip_empty", "0", PHP_INI_ALL, OnUpdateLong, ini_skip_empty, zend_excel_globals, excel_globals)
  69. PHP_INI_END()
  70. /* {{{ OO init/structure stuff */
  71. #define REGISTER_EXCEL_CLASS(name, c_name, clone) \
  72. { \
  73. zend_class_entry ce; \
  74. INIT_CLASS_ENTRY(ce, "Excel" # name, excel_funcs_ ## c_name); \
  75. ce.create_object = excel_object_new_ ## c_name; \
  76. excel_ce_ ## c_name = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC); \
  77. memcpy(&excel_object_handlers_ ## c_name, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); \
  78. excel_object_handlers_ ## c_name.clone_obj = clone; \
  79. }
  80. zend_class_entry *excel_ce_book, *excel_ce_sheet, *excel_ce_format, *excel_ce_font;
  81. static zend_object_handlers excel_object_handlers_book;
  82. static zend_object_handlers excel_object_handlers_sheet;
  83. static zend_object_handlers excel_object_handlers_format;
  84. static zend_object_handlers excel_object_handlers_font;
  85. typedef struct _excel_book_object {
  86. zend_object std;
  87. BookHandle book;
  88. } excel_book_object;
  89. #define BOOK_FROM_OBJECT(book, object) \
  90. { \
  91. excel_book_object *obj = (excel_book_object*) zend_object_store_get_object(object TSRMLS_CC); \
  92. book = obj->book; \
  93. if (!book) { \
  94. php_error_docref(NULL TSRMLS_CC, E_WARNING, "The book wasn't initialized"); \
  95. RETURN_FALSE; \
  96. } \
  97. }
  98. typedef struct _excel_sheet_object {
  99. zend_object std;
  100. SheetHandle sheet;
  101. BookHandle book;
  102. } excel_sheet_object;
  103. #define SHEET_FROM_OBJECT(sheet, object) \
  104. { \
  105. excel_sheet_object *obj = (excel_sheet_object*) zend_object_store_get_object(object TSRMLS_CC); \
  106. sheet = obj->sheet; \
  107. if (!sheet) { \
  108. php_error_docref(NULL TSRMLS_CC, E_WARNING, "The sheet wasn't initialized"); \
  109. RETURN_FALSE; \
  110. } \
  111. }
  112. #define SHEET_AND_BOOK_FROM_OBJECT(sheet, book, object) \
  113. { \
  114. excel_sheet_object *obj = (excel_sheet_object*) zend_object_store_get_object(object TSRMLS_CC); \
  115. sheet = obj->sheet; \
  116. book = obj->book; \
  117. if (!sheet) { \
  118. php_error_docref(NULL TSRMLS_CC, E_WARNING, "The sheet wasn't initialized"); \
  119. RETURN_FALSE; \
  120. } \
  121. }
  122. #define FONT_FROM_OBJECT(font, object) \
  123. { \
  124. excel_font_object *obj = (excel_font_object*) zend_object_store_get_object(object TSRMLS_CC); \
  125. font = obj->font; \
  126. if (!font) { \
  127. php_error_docref(NULL TSRMLS_CC, E_WARNING, "The font wasn't initialized"); \
  128. RETURN_FALSE; \
  129. } \
  130. }
  131. typedef struct _excel_font_object {
  132. zend_object std;
  133. FontHandle font;
  134. BookHandle book;
  135. } excel_font_object;
  136. #define FORMAT_FROM_OBJECT(format, object) \
  137. { \
  138. excel_format_object *obj = (excel_format_object*) zend_object_store_get_object(object TSRMLS_CC); \
  139. format = obj->format; \
  140. if (!format) { \
  141. php_error_docref(NULL TSRMLS_CC, E_WARNING, "The format wasn't initialized"); \
  142. RETURN_FALSE; \
  143. } \
  144. }
  145. typedef struct _excel_format_object {
  146. zend_object std;
  147. FormatHandle format;
  148. BookHandle book;
  149. } excel_format_object;
  150. static void excel_book_object_free_storage(void *object TSRMLS_DC)
  151. {
  152. excel_book_object *intern = (excel_book_object *)object;
  153. zend_object_std_dtor(&intern->std TSRMLS_CC);
  154. if (intern->book) {
  155. xlBookRelease(intern->book);
  156. intern->book = NULL;
  157. }
  158. efree(object);
  159. }
  160. static zend_object_value excel_object_new_book(zend_class_entry *class_type TSRMLS_DC)
  161. {
  162. excel_book_object *intern;
  163. zend_object_value retval;
  164. intern = emalloc(sizeof(excel_book_object));
  165. memset(intern, 0, sizeof(excel_book_object));
  166. zend_object_std_init(&intern->std, class_type TSRMLS_CC);
  167. #ifdef ZEND_ENGINE_2_4
  168. object_properties_init(&intern->std, class_type);
  169. #else
  170. {
  171. zval *tmp;
  172. zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
  173. }
  174. #endif
  175. intern->book = xlCreateBook();
  176. (&retval)->handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) excel_book_object_free_storage, NULL TSRMLS_CC);
  177. (&retval)->handlers = &excel_object_handlers_book;
  178. return retval;
  179. }
  180. static void excel_sheet_object_free_storage(void *object TSRMLS_DC)
  181. {
  182. excel_sheet_object *intern = (excel_sheet_object *)object;
  183. zend_object_std_dtor(&intern->std TSRMLS_CC);
  184. efree(object);
  185. }
  186. static zend_object_value excel_object_new_sheet(zend_class_entry *class_type TSRMLS_DC)
  187. {
  188. excel_sheet_object *intern;
  189. zend_object_value retval;
  190. intern = emalloc(sizeof(excel_sheet_object));
  191. memset(intern, 0, sizeof(excel_sheet_object));
  192. zend_object_std_init(&intern->std, class_type TSRMLS_CC);
  193. #ifdef ZEND_ENGINE_2_4
  194. object_properties_init(&intern->std, class_type);
  195. #else
  196. {
  197. zval *tmp;
  198. zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
  199. }
  200. #endif
  201. (&retval)->handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) excel_sheet_object_free_storage, NULL TSRMLS_CC);
  202. (&retval)->handlers = &excel_object_handlers_sheet;
  203. return retval;
  204. }
  205. static void excel_font_object_free_storage(void *object TSRMLS_DC)
  206. {
  207. excel_font_object *intern = (excel_font_object *)object;
  208. zend_object_std_dtor(&intern->std TSRMLS_CC);
  209. efree(object);
  210. }
  211. #define REGISTER_EXCEL_CLASS_CONST_LONG(class_name, const_name, value) \
  212. zend_declare_class_constant_long(excel_ce_ ## class_name, const_name, sizeof(const_name)-1, (long)value TSRMLS_CC);
  213. static zend_object_value excel_object_new_font_ex(zend_class_entry *class_type, excel_font_object **ptr TSRMLS_DC)
  214. {
  215. excel_font_object *intern;
  216. zend_object_value retval;
  217. intern = emalloc(sizeof(excel_font_object));
  218. memset(intern, 0, sizeof(excel_font_object));
  219. if (ptr) {
  220. *ptr = intern;
  221. }
  222. zend_object_std_init(&intern->std, class_type TSRMLS_CC);
  223. #ifdef ZEND_ENGINE_2_4
  224. object_properties_init(&intern->std, class_type);
  225. #else
  226. {
  227. zval *tmp;
  228. zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
  229. }
  230. #endif
  231. (&retval)->handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) excel_font_object_free_storage, NULL TSRMLS_CC);
  232. (&retval)->handlers = &excel_object_handlers_font;
  233. return retval;
  234. }
  235. static zend_object_value excel_object_new_font(zend_class_entry *class_type TSRMLS_DC)
  236. {
  237. return excel_object_new_font_ex(class_type, NULL TSRMLS_CC);
  238. }
  239. static zend_object_value excel_font_object_clone(zval *this_ptr TSRMLS_DC)
  240. {
  241. excel_font_object *new_obj = NULL;
  242. excel_font_object *old_obj = (excel_font_object *) zend_object_store_get_object(this_ptr TSRMLS_CC);
  243. zend_object_value new_ov = excel_object_new_font_ex(old_obj->std.ce, &new_obj TSRMLS_CC);
  244. FontHandle font;
  245. font = xlBookAddFont(old_obj->book, old_obj->font);
  246. if (!font) {
  247. zend_throw_exception(NULL, "Failed to copy font", 0 TSRMLS_CC);
  248. } else {
  249. new_obj->book = old_obj->book;
  250. new_obj->font = font;
  251. }
  252. zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC);
  253. return new_ov;
  254. }
  255. static void excel_format_object_free_storage(void *object TSRMLS_DC)
  256. {
  257. excel_format_object *intern = (excel_format_object *)object;
  258. zend_object_std_dtor(&intern->std TSRMLS_CC);
  259. efree(object);
  260. }
  261. static zend_object_value excel_object_new_format_ex(zend_class_entry *class_type, excel_format_object **ptr TSRMLS_DC)
  262. {
  263. excel_format_object *intern;
  264. zend_object_value retval;
  265. intern = emalloc(sizeof(excel_format_object));
  266. memset(intern, 0, sizeof(excel_format_object));
  267. if (ptr) {
  268. *ptr = intern;
  269. }
  270. zend_object_std_init(&intern->std, class_type TSRMLS_CC);
  271. #ifdef ZEND_ENGINE_2_4
  272. object_properties_init(&intern->std, class_type);
  273. #else
  274. {
  275. zval *tmp;
  276. zend_hash_copy(intern->std.properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
  277. }
  278. #endif
  279. (&retval)->handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) excel_format_object_free_storage, NULL TSRMLS_CC);
  280. (&retval)->handlers = &excel_object_handlers_format;
  281. return retval;
  282. }
  283. static zend_object_value excel_object_new_format(zend_class_entry *class_type TSRMLS_DC)
  284. {
  285. return excel_object_new_format_ex(class_type, NULL TSRMLS_CC);
  286. }
  287. static zend_object_value excel_format_object_clone(zval *this_ptr TSRMLS_DC)
  288. {
  289. excel_format_object *new_obj = NULL;
  290. excel_format_object *old_obj = (excel_format_object *) zend_object_store_get_object(this_ptr TSRMLS_CC);
  291. zend_object_value new_ov = excel_object_new_format_ex(old_obj->std.ce, &new_obj TSRMLS_CC);
  292. FormatHandle format;
  293. format = xlBookAddFormat(old_obj->book, old_obj->format);
  294. if (!format) {
  295. zend_throw_exception(NULL, "Failed to copy format", 0 TSRMLS_CC);
  296. } else {
  297. new_obj->book = old_obj->book;
  298. new_obj->format = format;
  299. }
  300. zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC);
  301. return new_ov;
  302. }
  303. #if LIBXL_VERSION <= 0x03010000
  304. static wchar_t * _php_excel_to_wide(const char *string, size_t len, size_t *out_len)
  305. {
  306. wchar_t *buf = safe_emalloc(len, sizeof(wchar_t), 0);
  307. *out_len = mbstowcs(buf, string, len);
  308. if (*out_len == (size_t) -1) {
  309. efree(buf);
  310. return NULL;
  311. }
  312. return erealloc(buf, (*out_len + 1) * sizeof(wchar_t));
  313. }
  314. #endif
  315. #define EXCEL_METHOD(class_name, function_name) \
  316. PHP_METHOD(Excel ## class_name, function_name)
  317. /* {{{ proto bool ExcelBook::requiresKey()
  318. true if license key is required. */
  319. EXCEL_METHOD(Book, requiresKey)
  320. {
  321. #if defined(HAVE_LIBXL_SETKEY)
  322. RETURN_BOOL(1);
  323. #else
  324. RETURN_BOOL(0);
  325. #endif
  326. }
  327. /* }}} */
  328. /* {{{ proto bool ExcelBook::load(string data)
  329. Load Excel data string. */
  330. EXCEL_METHOD(Book, load)
  331. {
  332. BookHandle book;
  333. zval *object = getThis();
  334. char *data;
  335. int data_len;
  336. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &data, &data_len) == FAILURE) {
  337. RETURN_FALSE;
  338. }
  339. if (!data_len) {
  340. RETURN_FALSE;
  341. }
  342. BOOK_FROM_OBJECT(book, object);
  343. RETURN_BOOL(xlBookLoadRaw(book, data, data_len));
  344. }
  345. /* }}} */
  346. /* {{{ proto bool ExcelBook::loadFile(string filename)
  347. Load Excel from file. */
  348. EXCEL_METHOD(Book, loadFile)
  349. {
  350. BookHandle book;
  351. zval *object = getThis();
  352. char *filename;
  353. int filename_len;
  354. php_stream *stream;
  355. int len;
  356. char *contents;
  357. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, &filename_len) == FAILURE) {
  358. RETURN_FALSE;
  359. }
  360. if (!filename_len) {
  361. RETURN_FALSE;
  362. }
  363. BOOK_FROM_OBJECT(book, object);
  364. stream = php_stream_open_wrapper(filename, "rb", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
  365. if (!stream) {
  366. RETURN_FALSE;
  367. }
  368. len = php_stream_copy_to_mem(stream, &contents, PHP_STREAM_COPY_ALL, 0);
  369. php_stream_close(stream);
  370. if (len < 1) {
  371. RETURN_FALSE;
  372. }
  373. RETVAL_BOOL(xlBookLoadRaw(book, contents, len));
  374. efree(contents);
  375. }
  376. /* }}} */
  377. /* {{{ proto mixed ExcelBook::save([string filename])
  378. Save Excel file. */
  379. EXCEL_METHOD(Book, save)
  380. {
  381. BookHandle book;
  382. zval *object = getThis();
  383. char *filename = NULL;
  384. int filename_len;
  385. unsigned int len = 0;
  386. char *contents = NULL;
  387. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &filename, &filename_len) == FAILURE) {
  388. RETURN_FALSE;
  389. }
  390. BOOK_FROM_OBJECT(book, object);
  391. if (!xlBookSaveRaw(book, (const char **)&contents, &len)) {
  392. RETURN_FALSE;
  393. }
  394. if (filename) {
  395. int numbytes;
  396. php_stream *stream = php_stream_open_wrapper(filename, "wb", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
  397. if (!stream) {
  398. RETURN_FALSE;
  399. }
  400. if ((numbytes = php_stream_write(stream, contents, len)) != len) {
  401. php_stream_close(stream);
  402. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only %d of %d bytes written, possibly out of free disk space", numbytes, len);
  403. RETURN_FALSE;
  404. }
  405. php_stream_close(stream);
  406. RETURN_TRUE;
  407. } else {
  408. RETURN_STRINGL(contents, len, 1);
  409. }
  410. }
  411. /* }}} */
  412. /* {{{ proto ExcelSheet ExcelBook::getSheet([int sheet])
  413. Get an excel sheet. */
  414. EXCEL_METHOD(Book, getSheet)
  415. {
  416. BookHandle book;
  417. zval *object = getThis();
  418. long sheet = 0;
  419. SheetHandle sh;
  420. excel_sheet_object *fo;
  421. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &sheet) == FAILURE) {
  422. RETURN_FALSE;
  423. }
  424. if (sheet < 0) {
  425. RETURN_FALSE;
  426. }
  427. BOOK_FROM_OBJECT(book, object);
  428. if (!(sh = xlBookGetSheet(book, sheet))) {
  429. RETURN_FALSE;
  430. }
  431. Z_TYPE_P(return_value) = IS_OBJECT;
  432. object_init_ex(return_value, excel_ce_sheet);
  433. Z_SET_REFCOUNT_P(return_value, 1);
  434. Z_SET_ISREF_P(return_value);
  435. fo = (excel_sheet_object *) zend_object_store_get_object(return_value TSRMLS_CC);
  436. fo->sheet = sh;
  437. fo->book = book;
  438. }
  439. /* }}} */
  440. /* {{{ proto ExcelSheet ExcelBook::getSheetByName(string name [, bool case_insensitive])
  441. Get an excel sheet by name. */
  442. EXCEL_METHOD(Book, getSheetByName)
  443. {
  444. BookHandle book;
  445. zval *object = getThis();
  446. char *sheet_name;
  447. int sheet_name_len;
  448. long sheet;
  449. excel_sheet_object *fo;
  450. long sheet_count;
  451. zend_bool case_s = 0;
  452. const char *s;
  453. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &sheet_name, &sheet_name_len, &case_s) == FAILURE) {
  454. RETURN_FALSE;
  455. }
  456. if (sheet_name_len == 0) {
  457. RETURN_FALSE;
  458. }
  459. BOOK_FROM_OBJECT(book, object);
  460. sheet_count = xlBookSheetCount(book);
  461. for(sheet = 0; sheet < sheet_count; sheet++) {
  462. SheetHandle sh = xlBookGetSheet(book, sheet);
  463. if (sh) {
  464. s = xlSheetName(sh);
  465. if (s) {
  466. if ((case_s && !strcasecmp(s, sheet_name)) || (!case_s && !strcmp(s, sheet_name))) {
  467. Z_TYPE_P(return_value) = IS_OBJECT;
  468. object_init_ex(return_value, excel_ce_sheet);
  469. Z_SET_REFCOUNT_P(return_value, 1);
  470. Z_SET_ISREF_P(return_value);
  471. fo = (excel_sheet_object *) zend_object_store_get_object(return_value TSRMLS_CC);
  472. fo->sheet = sh;
  473. fo->book = book;
  474. return;
  475. }
  476. }
  477. }
  478. }
  479. RETURN_FALSE;
  480. }
  481. /* }}} */
  482. /* {{{ proto bool ExcelBook::deleteSheet(int sheet)
  483. Delete an excel sheet. */
  484. EXCEL_METHOD(Book, deleteSheet)
  485. {
  486. BookHandle book;
  487. zval *object = getThis();
  488. long sheet;
  489. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &sheet) == FAILURE) {
  490. RETURN_FALSE;
  491. }
  492. if (sheet < 0) {
  493. RETURN_FALSE;
  494. }
  495. BOOK_FROM_OBJECT(book, object);
  496. RETURN_BOOL(xlBookDelSheet(book, sheet));
  497. }
  498. /* }}} */
  499. /* {{{ proto int ExcelBook::activeSheet([int sheet])
  500. Get or set an active excel sheet. */
  501. EXCEL_METHOD(Book, activeSheet)
  502. {
  503. BookHandle book;
  504. zval *object = getThis();
  505. long sheet = -1;
  506. long res;
  507. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &sheet) == FAILURE) {
  508. RETURN_FALSE;
  509. }
  510. BOOK_FROM_OBJECT(book, object);
  511. if (sheet > -1) {
  512. xlBookSetActiveSheet(book, sheet);
  513. }
  514. res = xlBookActiveSheet(book);
  515. if (sheet == -1 || res == sheet) {
  516. RETURN_LONG(res);
  517. } else {
  518. RETURN_FALSE;
  519. }
  520. }
  521. /* }}} */
  522. /* {{{ proto ExcelSheet ExcelBook::addSheet(string name)
  523. Add an excel sheet. */
  524. EXCEL_METHOD(Book, addSheet)
  525. {
  526. BookHandle book;
  527. zval *object = getThis();
  528. SheetHandle sh;
  529. excel_sheet_object *fo;
  530. char *name;
  531. int name_len;
  532. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
  533. RETURN_FALSE;
  534. }
  535. BOOK_FROM_OBJECT(book, object);
  536. #ifdef LIBXL_VERSION
  537. sh = xlBookAddSheet(book, name, 0);
  538. #else
  539. sh = xlBookAddSheet(book, name);
  540. #endif
  541. if (!sh) {
  542. RETURN_FALSE;
  543. }
  544. Z_TYPE_P(return_value) = IS_OBJECT;
  545. object_init_ex(return_value, excel_ce_sheet);
  546. Z_SET_REFCOUNT_P(return_value, 1);
  547. Z_SET_ISREF_P(return_value);
  548. fo = (excel_sheet_object *) zend_object_store_get_object(return_value TSRMLS_CC);
  549. fo->sheet = sh;
  550. fo->book = book;
  551. }
  552. /* }}} */
  553. /* {{{ proto ExcelSheet ExcelBook::copySheet(string name, int sheet_number)
  554. Copy an excel sheet. */
  555. EXCEL_METHOD(Book, copySheet)
  556. {
  557. BookHandle book;
  558. zval *object = getThis();
  559. SheetHandle sh;
  560. excel_sheet_object *fo;
  561. char *name;
  562. int name_len;
  563. long num;
  564. #ifdef LIBXL_VERSION
  565. SheetHandle osh;
  566. #endif
  567. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &name, &name_len, &num) == FAILURE) {
  568. RETURN_FALSE;
  569. }
  570. if (num < 0) {
  571. RETURN_FALSE;
  572. }
  573. BOOK_FROM_OBJECT(book, object);
  574. #ifdef LIBXL_VERSION
  575. if (!(osh = xlBookGetSheet(book, num))) {
  576. RETURN_FALSE;
  577. }
  578. sh = xlBookAddSheet(book, name, osh);
  579. #else
  580. sh = xlBookCopySheet(book, name, num);
  581. #endif
  582. if (!sh) {
  583. RETURN_FALSE;
  584. }
  585. Z_TYPE_P(return_value) = IS_OBJECT;
  586. object_init_ex(return_value, excel_ce_sheet);
  587. Z_SET_REFCOUNT_P(return_value, 1);
  588. Z_SET_ISREF_P(return_value);
  589. fo = (excel_sheet_object *) zend_object_store_get_object(return_value TSRMLS_CC);
  590. fo->sheet = sh;
  591. fo->book = book;
  592. }
  593. /* }}} */
  594. /* {{{ proto int ExcelBook::sheetCount()
  595. Get the number of sheets inside a file. */
  596. EXCEL_METHOD(Book, sheetCount)
  597. {
  598. BookHandle book;
  599. zval *object = getThis();
  600. if (ZEND_NUM_ARGS()) {
  601. RETURN_FALSE;
  602. }
  603. BOOK_FROM_OBJECT(book, object);
  604. RETURN_LONG(xlBookSheetCount(book));
  605. }
  606. /* }}} */
  607. /* {{{ proto string ExcelBook::getError()
  608. Get Excel error string. */
  609. EXCEL_METHOD(Book, getError)
  610. {
  611. BookHandle book;
  612. zval *object = getThis();
  613. char *err;
  614. if (ZEND_NUM_ARGS()) {
  615. RETURN_FALSE;
  616. }
  617. BOOK_FROM_OBJECT(book, object);
  618. err = (char *)xlBookErrorMessage(book);
  619. if (err) {
  620. if (!strcmp(err, "ok")) {
  621. RETURN_FALSE;
  622. } else {
  623. RETURN_STRING(err, 1);
  624. }
  625. } else {
  626. RETURN_STRING("Unknown Error", 1);
  627. }
  628. }
  629. /* }}} */
  630. /* {{{ proto ExcelFont ExcelBook::addFont([ExcelFont font])
  631. Add or Copy ExcelFont object. */
  632. EXCEL_METHOD(Book, addFont)
  633. {
  634. BookHandle book;
  635. zval *object = getThis();
  636. FontHandle nfont;
  637. FontHandle font = NULL;
  638. excel_font_object *fo;
  639. zval *fob = NULL;
  640. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|O", &fob, excel_ce_font) == FAILURE) {
  641. RETURN_FALSE;
  642. }
  643. BOOK_FROM_OBJECT(book, object);
  644. if (fob) {
  645. FONT_FROM_OBJECT(font, fob);
  646. }
  647. nfont = xlBookAddFont(book, font);
  648. if (!nfont) {
  649. RETURN_FALSE;
  650. }
  651. Z_TYPE_P(return_value) = IS_OBJECT;
  652. object_init_ex(return_value, excel_ce_font);
  653. Z_SET_REFCOUNT_P(return_value, 1);
  654. Z_SET_ISREF_P(return_value);
  655. fo = (excel_font_object *) zend_object_store_get_object(return_value TSRMLS_CC);
  656. fo->font = nfont;
  657. fo->book = book;
  658. }
  659. /* }}} */
  660. /* {{{ proto ExcelFormat ExcelBook::addFormat([ExcelFormat format])
  661. Add or Copy ExcelFormat object. */
  662. EXCEL_METHOD(Book, addFormat)
  663. {
  664. BookHandle book;
  665. zval *object = getThis();
  666. FormatHandle nformat;
  667. FormatHandle format = NULL;
  668. excel_format_object *fo;
  669. zval *fob = NULL;
  670. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|O", &fob, excel_ce_format) == FAILURE) {
  671. RETURN_FALSE;
  672. }
  673. BOOK_FROM_OBJECT(book, object);
  674. if (fob) {
  675. FORMAT_FROM_OBJECT(format, fob);
  676. }
  677. nformat = xlBookAddFormat(book, format);
  678. if (!nformat) {
  679. RETURN_FALSE;
  680. }
  681. Z_TYPE_P(return_value) = IS_OBJECT;
  682. object_init_ex(return_value, excel_ce_format);
  683. Z_SET_REFCOUNT_P(return_value, 1);
  684. Z_SET_ISREF_P(return_value);
  685. fo = (excel_format_object *) zend_object_store_get_object(return_value TSRMLS_CC);
  686. fo->format = nformat;
  687. fo->book = book;
  688. }
  689. /* }}} */
  690. #ifdef HAVE_LIBXL_243_PLUS
  691. /* {{{ proto array ExcelBook::getAllFormats()
  692. Get an array of all ExcelFormat objects used inside a document. */
  693. EXCEL_METHOD(Book, getAllFormats)
  694. {
  695. BookHandle book;
  696. zval *object = getThis();
  697. unsigned short fc;
  698. unsigned short c;
  699. if (ZEND_NUM_ARGS()) {
  700. RETURN_FALSE;
  701. }
  702. BOOK_FROM_OBJECT(book, object);
  703. array_init(return_value);
  704. fc = xlBookFormatSize(book);
  705. if (!fc) {
  706. return;
  707. }
  708. for (c = 0; c < fc; c++) {
  709. FormatHandle format;
  710. if ((format = xlBookFormat(book, c))) {
  711. excel_format_object *fo;
  712. zval *value;
  713. MAKE_STD_ZVAL(value);
  714. Z_TYPE_P(value) = IS_OBJECT;
  715. object_init_ex(value, excel_ce_format);
  716. Z_SET_REFCOUNT_P(value, 1);
  717. Z_SET_ISREF_P(value);
  718. fo = (excel_format_object *) zend_object_store_get_object(value TSRMLS_CC);
  719. fo->format = format;
  720. fo->book = book;
  721. add_next_index_zval(return_value, value);
  722. }
  723. }
  724. }
  725. /* }}} */
  726. #endif
  727. /* {{{ proto int ExcelBook::addCustomFormat(string format)
  728. Create a custom cell format */
  729. EXCEL_METHOD(Book, addCustomFormat)
  730. {
  731. BookHandle book;
  732. zval *object = getThis();
  733. char *format;
  734. int format_len;
  735. int id;
  736. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &format, &format_len) == FAILURE) {
  737. RETURN_FALSE;
  738. }
  739. if (!format_len) {
  740. RETURN_FALSE;
  741. }
  742. BOOK_FROM_OBJECT(book, object);
  743. if (!(id = xlBookAddCustomNumFormat(book, format))) {
  744. RETURN_FALSE;
  745. }
  746. RETURN_LONG(id);
  747. }
  748. /* }}} */
  749. /* {{{ proto string ExcelBook::getCustomFormat(int id)
  750. Get a custom cell format */
  751. EXCEL_METHOD(Book, getCustomFormat)
  752. {
  753. BookHandle book;
  754. zval *object = getThis();
  755. long id;
  756. char *data;
  757. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &id) == FAILURE) {
  758. RETURN_FALSE;
  759. }
  760. if (id < 1) {
  761. RETURN_FALSE;
  762. }
  763. BOOK_FROM_OBJECT(book, object);
  764. if (!(data = (char *)xlBookCustomNumFormat(book, id))) {
  765. RETURN_FALSE;
  766. }
  767. RETURN_STRING(data, 1);
  768. }
  769. /* }}} */
  770. static double _php_excel_date_pack(BookHandle book, long ts)
  771. {
  772. struct tm tm;
  773. if (!php_localtime_r(&ts, &tm)) {
  774. return -1;
  775. }
  776. tm.tm_year += 1900;
  777. tm.tm_mon += 1;
  778. return xlBookDatePack(book, tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec
  779. #ifdef HAVE_LIBXL_243_PLUS
  780. , 0
  781. #endif
  782. );
  783. }
  784. /* {{{ proto float ExcelBook::packDate(int timestamp)
  785. Pack a unix timestamp into an Excel Double */
  786. EXCEL_METHOD(Book, packDate)
  787. {
  788. BookHandle book;
  789. zval *object = getThis();
  790. long ts;
  791. double dt;
  792. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &ts) == FAILURE) {
  793. RETURN_FALSE;
  794. }
  795. if (ts < 1) {
  796. RETURN_FALSE;
  797. }
  798. BOOK_FROM_OBJECT(book, object);
  799. if ((dt = _php_excel_date_pack(book, ts)) == -1) {
  800. RETURN_FALSE;
  801. }
  802. RETURN_DOUBLE(dt);
  803. }
  804. /* }}} */
  805. static double _php_excel_date_pack_values(BookHandle book, int year, int month, int day, int hour, int min, int sec)
  806. {
  807. return xlBookDatePack(book, year, month, day, hour, min, sec
  808. #ifdef HAVE_LIBXL_243_PLUS
  809. , 0
  810. #endif
  811. );
  812. }
  813. /* {{{ proto float ExcelBook::packDateValues(int year, int month, int day, int hour, int minute, int second)
  814. Pack a date by single values into an Excel Double */
  815. EXCEL_METHOD(Book, packDateValues)
  816. {
  817. BookHandle book;
  818. zval *object = getThis();
  819. long year, month, day, hour, min, sec;
  820. double dt;
  821. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llllll", &year, &month, &day, &hour, &min, &sec) == FAILURE) {
  822. RETURN_FALSE;
  823. }
  824. // if it is a date or just a time - hour, min & sec must be checked
  825. if (hour < 0 || hour > 23) {
  826. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid '%ld' value for hour", hour);
  827. RETURN_FALSE;
  828. }
  829. if (min < 0 || min > 59) {
  830. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid '%ld' value for minute", min);
  831. RETURN_FALSE;
  832. }
  833. if (sec < 0 || sec > 59) {
  834. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid '%ld' value for second", sec);
  835. RETURN_FALSE;
  836. }
  837. // check date only if there are values
  838. // is every value=0 - it's okay for generating a time
  839. if (year != 0 || month != 0 || day != 0) {
  840. if (year < 1) {
  841. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid '%ld' value for year", year);
  842. RETURN_FALSE;
  843. }
  844. if (month < 1 || month > 12) {
  845. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid '%ld' value for month", month);
  846. RETURN_FALSE;
  847. }
  848. if (day < 1 || day > 31) {
  849. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid '%ld' value for day", day);
  850. RETURN_FALSE;
  851. }
  852. }
  853. BOOK_FROM_OBJECT(book, object);
  854. if ((dt = _php_excel_date_pack_values(book, year, month, day, hour, min, sec)) == -1) {
  855. RETURN_FALSE;
  856. }
  857. RETURN_DOUBLE(dt);
  858. }
  859. /* }}} */
  860. static long _php_excel_date_unpack(BookHandle book, double dt)
  861. {
  862. struct tm tm = {0};
  863. #ifdef HAVE_LIBXL_243_PLUS
  864. #if LIBXL_VERSION >= 0x03010000
  865. int msec;
  866. #else
  867. unsigned short msec;
  868. #endif
  869. #endif
  870. #if LIBXL_VERSION >= 0x03010000
  871. if (!xlBookDateUnpack(book, dt, (int *) &(tm.tm_year), (int *) &(tm.tm_mon), (int *) &(tm.tm_mday), (int *) &(tm.tm_hour), (int *) &(tm.tm_min), (int *) &(tm.tm_sec)
  872. #else
  873. if (!xlBookDateUnpack(book, dt, (short unsigned int *) &(tm.tm_year), (short unsigned int *) &(tm.tm_mon), (short unsigned int *) &(tm.tm_mday),
  874. (short unsigned int *) &(tm.tm_hour), (short unsigned int *) &(tm.tm_min), (short unsigned int *) &(tm.tm_sec)
  875. #endif
  876. #ifdef HAVE_LIBXL_243_PLUS
  877. , &msec
  878. #endif
  879. )) {
  880. return -1;
  881. }
  882. tm.tm_year -= 1900;
  883. tm.tm_mon -= 1;
  884. tm.tm_isdst = -1;
  885. return mktime(&tm);
  886. }
  887. /* {{{ proto int ExcelBook::unpackDate(double date)
  888. Unpack a unix timestamp from an Excel Double */
  889. EXCEL_METHOD(Book, unpackDate)
  890. {
  891. BookHandle book;
  892. zval *object = getThis();
  893. double dt;
  894. time_t t;
  895. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &dt) == FAILURE) {
  896. RETURN_FALSE;
  897. }
  898. if (dt < 1) {
  899. RETURN_FALSE;
  900. }
  901. BOOK_FROM_OBJECT(book, object);
  902. if ((t = _php_excel_date_unpack(book, dt)) == -1) {
  903. RETURN_FALSE;
  904. }
  905. RETURN_LONG(t);
  906. }
  907. /* }}} */
  908. #if LIBXL_VERSION >= 0x03050300
  909. /* {{{ proto bool ExcelBook::isDate1904()
  910. Returns whether the 1904 date system is active: true - 1904 date system, false - 1900 date system */
  911. EXCEL_METHOD(Book, isDate1904)
  912. {
  913. BookHandle book;
  914. zval *object = getThis();
  915. if (ZEND_NUM_ARGS()) {
  916. RETURN_FALSE;
  917. }
  918. BOOK_FROM_OBJECT(book, object);
  919. RETURN_BOOL(xlBookIsDate1904(book));
  920. }
  921. /* }}} */
  922. /* {{{ proto bool ExcelBook::setDate1904(bool date_type)
  923. Sets the date system mode: true - 1904 date system, false - 1900 date system (default) */
  924. EXCEL_METHOD(Book, setDate1904)
  925. {
  926. BookHandle book;
  927. zval *object = getThis();
  928. zend_bool date_type;
  929. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &date_type) == FAILURE) {
  930. RETURN_FALSE;
  931. }
  932. BOOK_FROM_OBJECT(book, object);
  933. xlBookSetDate1904(book, (int)date_type);
  934. RETURN_TRUE;
  935. }
  936. /* }}} */
  937. #endif
  938. /* {{{ proto int ExcelBook::getActiveSheet()
  939. Get the active sheet inside a file. */
  940. EXCEL_METHOD(Book, getActiveSheet)
  941. {
  942. BookHandle book;
  943. zval *object = getThis();
  944. if (ZEND_NUM_ARGS()) {
  945. RETURN_FALSE;
  946. }
  947. BOOK_FROM_OBJECT(book, object);
  948. RETURN_LONG(xlBookActiveSheet(book));
  949. }
  950. /* }}} */
  951. /* {{{ proto array ExcelBook::getDefaultFont()
  952. Get the default font. */
  953. EXCEL_METHOD(Book, getDefaultFont)
  954. {
  955. BookHandle book;
  956. zval *object = getThis();
  957. const char *font;
  958. #if LIBXL_VERSION >= 0x03010000
  959. int font_size;
  960. #else
  961. unsigned short font_size;
  962. #endif
  963. if (ZEND_NUM_ARGS()) {
  964. RETURN_FALSE;
  965. }
  966. BOOK_FROM_OBJECT(book, object);
  967. if (!(font = xlBookDefaultFont(book, &font_size))) {
  968. RETURN_FALSE;
  969. }
  970. array_init(return_value);
  971. add_assoc_string(return_value, "font", (char *)font, 1);
  972. add_assoc_long(return_value, "font_size", font_size);
  973. }
  974. /* }}} */
  975. /* {{{ proto void ExcelBook::setDefaultFont(string font, int font_size)
  976. Set the default font, and size. */
  977. EXCEL_METHOD(Book, setDefaultFont)
  978. {
  979. BookHandle book;
  980. zval *object = getThis();
  981. char *font;
  982. int font_len;
  983. long font_size;
  984. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &font, &font_len, &font_size) == FAILURE || font_size < 1) {
  985. RETURN_FALSE;
  986. }
  987. BOOK_FROM_OBJECT(book, object);
  988. xlBookSetDefaultFont(book, font, (int)font_size);
  989. }
  990. /* }}} */
  991. /* {{{ proto void ExcelBook::setLocale(string locale)
  992. Set the locale. */
  993. EXCEL_METHOD(Book, setLocale)
  994. {
  995. BookHandle book;
  996. zval *object = getThis();
  997. char *locale;
  998. int locale_len;
  999. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &locale, &locale_len) == FAILURE || locale_len < 1) {
  1000. RETURN_FALSE;
  1001. }
  1002. BOOK_FROM_OBJECT(book, object);
  1003. xlBookSetLocale(book, locale);
  1004. }
  1005. /* }}} */
  1006. /* {{{ proto ExcelBook ExcelBook::__construct([string license_name, string license_key [, bool excel_2007 = false]])
  1007. Book Constructor. */
  1008. EXCEL_METHOD(Book, __construct)
  1009. {
  1010. BookHandle book;
  1011. zval *object = getThis();
  1012. char *name = NULL, *key;
  1013. int name_len = 0, key_len = 0;
  1014. #if LIBXL_VERSION <= 0x03010000
  1015. wchar_t *nw, *kw;
  1016. size_t nw_l, kw_l;
  1017. #endif
  1018. #if defined(HAVE_XML) && defined(EXCEL_WITH_LIBXML)
  1019. char *namep, *keyp;
  1020. int plen;
  1021. #endif
  1022. #ifdef LIBXL_VERSION
  1023. zend_bool new_excel = 0;
  1024. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ssb", &name, &name_len, &key, &key_len, &new_excel) == FAILURE) {
  1025. RETURN_FALSE;
  1026. }
  1027. #else
  1028. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ss", &name, &name_len, &key, &key_len) == FAILURE) {
  1029. RETURN_FALSE;
  1030. }
  1031. #endif
  1032. #if defined(HAVE_LIBXL_SETKEY)
  1033. if (!name_len) {
  1034. if (INI_STR("excel.license_name") && INI_STR("excel.license_key")) {
  1035. name = INI_STR("excel.license_name");
  1036. name_len = strlen(name);
  1037. key = INI_STR("excel.license_key");
  1038. key_len = strlen(key);
  1039. } else {
  1040. #ifndef LIBXL_VERSION
  1041. return;
  1042. #endif
  1043. }
  1044. }
  1045. #endif
  1046. BOOK_FROM_OBJECT(book, object);
  1047. #ifdef LIBXL_VERSION
  1048. if (new_excel) {
  1049. excel_book_object *obj = (excel_book_object*) zend_object_store_get_object(object TSRMLS_CC);
  1050. if ((book = xlCreateXMLBook())) {
  1051. xlBookRelease(obj->book);
  1052. obj->book = book;
  1053. } else {
  1054. RETURN_FALSE;
  1055. }
  1056. #if !defined(HAVE_LIBXL_SETKEY)
  1057. return;
  1058. #endif
  1059. if (!name_len && !key_len) {
  1060. return;
  1061. }
  1062. }
  1063. #endif
  1064. if (!name_len || !key_len) {
  1065. RETURN_FALSE;
  1066. }
  1067. #if LIBXL_VERSION <= 0x03010000
  1068. if (!(nw = _php_excel_to_wide(name, name_len + 1, &nw_l))) {
  1069. RETURN_FALSE;
  1070. }
  1071. if (!(kw = _php_excel_to_wide(key, key_len + 1, &kw_l))) {
  1072. efree(nw);
  1073. RETURN_FALSE;
  1074. }
  1075. xlBookSetKey(book, nw, kw);
  1076. efree(nw);
  1077. efree(kw);
  1078. #else
  1079. #if defined(HAVE_XML) && defined(EXCEL_WITH_LIBXML)
  1080. namep = xml_utf8_decode((const XML_Char *) name, name_len, &plen, (const XML_Char *)"ISO-8859-1");
  1081. keyp = xml_utf8_decode((const XML_Char *) key, key_len, &plen, (const XML_Char *)"ISO-8859-1");
  1082. xlBookSetKey(book, namep, keyp);
  1083. efree(namep);
  1084. efree(keyp);
  1085. #else
  1086. xlBookSetKey(book, name, key);
  1087. #endif
  1088. #endif
  1089. }
  1090. /* }}} */
  1091. /* {{{ proto bool ExcelBook::setActiveSheet(int sheet)
  1092. Set the sheet active. */
  1093. EXCEL_METHOD(Book, setActiveSheet)
  1094. {
  1095. BookHandle book;
  1096. zval *object = getThis();
  1097. long id;
  1098. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &id) == FAILURE || id < 0) {
  1099. RETURN_FALSE;
  1100. }
  1101. BOOK_FROM_OBJECT(book, object);
  1102. xlBookSetActiveSheet(book, id);
  1103. RETURN_BOOL(id == xlBookActiveSheet(book));
  1104. }
  1105. /* }}} */
  1106. static void php_excel_add_picture(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{ */
  1107. {
  1108. char *data;
  1109. int data_len;
  1110. BookHandle book;
  1111. zval *object = getThis();
  1112. int ret;
  1113. BOOK_FROM_OBJECT(book, object);
  1114. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &data, &data_len) == FAILURE) {
  1115. RETURN_FALSE;
  1116. }
  1117. if (mode == 1) {
  1118. ret = xlBookAddPicture2(book, data, data_len);
  1119. } else {
  1120. php_stream *stream = php_stream_open_wrapper(data, "rb", ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
  1121. int len;
  1122. char *contents;
  1123. if (!stream) {
  1124. RETURN_FALSE;
  1125. }
  1126. len = php_stream_copy_to_mem(stream, &contents, PHP_STREAM_COPY_ALL, 0);
  1127. php_stream_close(stream);
  1128. if (len < 1) {
  1129. RETURN_FALSE;
  1130. }
  1131. ret = xlBookAddPicture2(book, contents, len);
  1132. efree(contents);
  1133. }
  1134. if (ret == -1) {
  1135. RETURN_FALSE;
  1136. } else {
  1137. #if LIBXL_VERSION >= 0x03020200 && LIBXL_VERSION < 0x03020300
  1138. /* work-around for a bug inside libxl 3.2.2 */
  1139. ret -= 1;
  1140. #endif
  1141. RETURN_LONG(ret);
  1142. }
  1143. }
  1144. /* {{{ proto int ExcelBook::addPictureFromFile(string filename)
  1145. Add picture from file. */
  1146. EXCEL_METHOD(Book, addPictureFromFile)
  1147. {
  1148. php_excel_add_picture(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
  1149. }
  1150. /* }}} */
  1151. /* {{{ proto int ExcelBook::addPictureFromString(string data)
  1152. Add picture from string. */
  1153. EXCEL_METHOD(Book, addPictureFromString)
  1154. {
  1155. php_excel_add_picture(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
  1156. }
  1157. /* }}} */
  1158. #ifdef LIBXL_VERSION
  1159. /* {{{ proto bool ExcelBook::rgbMode()
  1160. Returns whether the RGB mode is active. */
  1161. EXCEL_METHOD(Book, rgbMode)
  1162. {
  1163. BookHandle book;
  1164. zval *object = getThis();
  1165. if (ZEND_NUM_ARGS()) {
  1166. RETURN_FALSE;
  1167. }
  1168. BOOK_FROM_OBJECT(book, object);
  1169. RETURN_BOOL(xlBookRgbMode(book));
  1170. }
  1171. /* }}} */
  1172. /* {{{ proto void ExcelBook::setRGBMode(bool mode)
  1173. Sets a RGB mode on or off. */
  1174. EXCEL_METHOD(Book, setRGBMode)
  1175. {
  1176. BookHandle book;
  1177. zval *object = getThis();
  1178. zend_bool val;
  1179. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &val) == FAILURE) {
  1180. RETURN_FALSE;
  1181. }
  1182. BOOK_FROM_OBJECT(book, object);
  1183. xlBookSetRgbMode(book, val);
  1184. }
  1185. /* }}} */
  1186. /* {{{ proto int ExcelBook::colorPack(int r, int g, int b)
  1187. Packs red, green and blue components in color value. Used for xlsx format only. */
  1188. EXCEL_METHOD(Book, colorPack)
  1189. {
  1190. BookHandle book;
  1191. zval *object = getThis();
  1192. long r, g, b;
  1193. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &r, &g, &b) == FAILURE) {
  1194. RETURN_FALSE;
  1195. }
  1196. if (r < 0 || r > 255) {
  1197. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid '%ld' value for color red", r);
  1198. RETURN_FALSE;
  1199. } else if (g < 0 || g > 255) {
  1200. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid '%ld' value for color green", g);
  1201. RETURN_FALSE;
  1202. } else if (b < 0 || b > 255) {
  1203. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid '%ld' value for color blue", b);
  1204. RETURN_FALSE;
  1205. }
  1206. BOOK_FROM_OBJECT(book, object);
  1207. RETURN_LONG(xlBookColorPack(book, (unsigned short)r, (unsigned short)g, (unsigned short)b));
  1208. }
  1209. /* }}} */
  1210. /* {{{ proto array ExcelBook::colorUnpack(int color)
  1211. Unpacks color value to red, green and blue components. Used for xlsx format only. */
  1212. EXCEL_METHOD(Book, colorUnpack)
  1213. {
  1214. BookHandle book;
  1215. zval *object = getThis();
  1216. #if LIBXL_VERSION >= 0x03010000
  1217. int r, g, b;
  1218. #else
  1219. unsigned short r, g, b;
  1220. #endif
  1221. long color;
  1222. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &color) == FAILURE) {
  1223. RETURN_FALSE;
  1224. }
  1225. if (color <= 0) {
  1226. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid '%ld' value for color code", color);
  1227. RETURN_FALSE;
  1228. }
  1229. BOOK_FROM_OBJECT(book, object);
  1230. xlBookColorUnpack(book, (int)color, &r, &g, &b);
  1231. array_init(return_value);
  1232. add_assoc_long(return_value, "red", r);
  1233. add_assoc_long(return_value, "green", g);
  1234. add_assoc_long(return_value, "blue", b);
  1235. }
  1236. /* }}} */
  1237. #endif
  1238. /* {{{ proto int ExcelFont::size([int size])
  1239. Get or set the font size */
  1240. EXCEL_METHOD(Font, size)
  1241. {
  1242. zval *object = getThis();
  1243. FontHandle font;
  1244. long size = -1;
  1245. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &size) == FAILURE) {
  1246. RETURN_FALSE;
  1247. }
  1248. FONT_FROM_OBJECT(font, object);
  1249. if (size > 0) {
  1250. xlFontSetSize(font, size);
  1251. }
  1252. RETURN_LONG(xlFontSize(font));
  1253. }
  1254. /* }}} */
  1255. /* {{{ proto bool ExcelFont::italics([bool italics])
  1256. Get or set the if italics are enabled */
  1257. EXCEL_METHOD(Font, italics)
  1258. {
  1259. zval *object = getThis();
  1260. FontHandle font;
  1261. zend_bool italics;
  1262. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &italics) == FAILURE) {
  1263. RETURN_FALSE;
  1264. }
  1265. FONT_FROM_OBJECT(font, object);
  1266. if (ZEND_NUM_ARGS()) {
  1267. xlFontSetItalic(font, italics);
  1268. }
  1269. RETURN_BOOL(xlFontItalic(font));
  1270. }
  1271. /* }}} */
  1272. /* {{{ proto bool ExcelFont::strike([bool strike])
  1273. Get or set the font strike-through */
  1274. EXCEL_METHOD(Font, strike)
  1275. {
  1276. zval *object = getThis();
  1277. FontHandle font;
  1278. zend_bool strike;
  1279. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &strike) == FAILURE) {
  1280. RETURN_FALSE;
  1281. }
  1282. FONT_FROM_OBJECT(font, object);
  1283. if (ZEND_NUM_ARGS()) {
  1284. xlFontSetStrikeOut(font, strike);
  1285. }
  1286. RETURN_BOOL(xlFontStrikeOut(font));
  1287. }
  1288. /* }}} */
  1289. /* {{{ proto bool ExcelFont::bold([bool bold])
  1290. Get or set the font bold */
  1291. EXCEL_METHOD(Font, bold)
  1292. {
  1293. zval *object = getThis();
  1294. FontHandle font;
  1295. zend_bool bold;
  1296. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &bold) == FAILURE) {
  1297. RETURN_FALSE;
  1298. }
  1299. FONT_FROM_OBJECT(font, object);
  1300. if (ZEND_NUM_ARGS()) {
  1301. xlFontSetBold(font, bold);
  1302. }
  1303. RETURN_BOOL(xlFontBold(font));
  1304. }
  1305. /* }}} */
  1306. /* {{{ proto int ExcelFont::color([int color])
  1307. Get or set the font color */
  1308. EXCEL_METHOD(Font, color)
  1309. {
  1310. zval *object = getThis();
  1311. FontHandle font;
  1312. long color;
  1313. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &color) == FAILURE) {
  1314. RETURN_FALSE;
  1315. }
  1316. FONT_FROM_OBJECT(font, object);
  1317. if (ZEND_NUM_ARGS()) {
  1318. xlFontSetColor(font, color);
  1319. }
  1320. RETURN_LONG(xlFontColor(font));
  1321. }
  1322. /* }}} */
  1323. /* {{{ proto int ExcelFont::mode([int mode])
  1324. Get or set the font mode */
  1325. EXCEL_METHOD(Font, mode)
  1326. {
  1327. zval *object = getThis();
  1328. FontHandle font;
  1329. long mode;
  1330. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &mode) == FAILURE) {
  1331. RETURN_FALSE;
  1332. }
  1333. FONT_FROM_OBJECT(font, object);
  1334. if (ZEND_NUM_ARGS()) {
  1335. xlFontSetScript(font, mode);
  1336. }
  1337. RETURN_LONG(xlFontScript(font));
  1338. }
  1339. /* }}} */
  1340. /* {{{ proto int ExcelFont::underline([int underline_style])
  1341. Get or set the font underline style */
  1342. EXCEL_METHOD(Font, underline)
  1343. {
  1344. zval *object = getThis();
  1345. FontHandle font;
  1346. long underline;
  1347. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &underline) == FAILURE) {
  1348. RETURN_FALSE;
  1349. }
  1350. FONT_FROM_OBJECT(font, object);
  1351. if (ZEND_NUM_ARGS()) {
  1352. xlFontSetUnderline(font, underline);
  1353. }
  1354. RETURN_LONG(xlFontUnderline(font));
  1355. }
  1356. /* }}} */
  1357. /* {{{ proto string ExcelFont::name([string name])
  1358. Get or set the font name */
  1359. EXCEL_METHOD(Font, name)
  1360. {
  1361. zval *object = getThis();
  1362. FontHandle font;
  1363. char *name = NULL;
  1364. int name_len;
  1365. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len) == FAILURE) {
  1366. RETURN_FALSE;
  1367. }
  1368. FONT_FROM_OBJECT(font, object);
  1369. if (name) {
  1370. xlFontSetName(font, name);
  1371. }
  1372. RETURN_STRING((char *)xlFontName(font), 1);
  1373. }
  1374. /* }}} */
  1375. /* {{{ proto ExcelFormat ExcelFormat::__construct(ExcelBook book)
  1376. Format Constructor. */
  1377. EXCEL_METHOD(Format, __construct)
  1378. {
  1379. BookHandle book;
  1380. FormatHandle format;
  1381. zval *object = getThis();
  1382. excel_format_object *obj;
  1383. zval *zbook;
  1384. PHP_EXCEL_ERROR_HANDLING();
  1385. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &zbook, excel_ce_book) == FAILURE) {
  1386. PHP_EXCEL_RESTORE_ERRORS();
  1387. return;
  1388. }
  1389. PHP_EXCEL_RESTORE_ERRORS();
  1390. BOOK_FROM_OBJECT(book, zbook);
  1391. obj = (excel_format_object*) zend_object_store_get_object(object TSRMLS_CC);
  1392. format = xlBookAddFormat(book, NULL);
  1393. if (!format) {
  1394. RETURN_FALSE;
  1395. }
  1396. obj->format = format;
  1397. obj->book = book;
  1398. }
  1399. /* }}} */
  1400. /* {{{ proto ExcelFont ExcelFont::__construct(ExcelBook book)
  1401. Font Constructor. */
  1402. EXCEL_METHOD(Font, __construct)
  1403. {
  1404. BookHandle book;
  1405. FontHandle font;
  1406. zval *object = getThis();
  1407. excel_font_object *obj;
  1408. zval *zbook;
  1409. PHP_EXCEL_ERROR_HANDLING();
  1410. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &zbook, excel_ce_book) == FAILURE) {
  1411. PHP_EXCEL_RESTORE_ERRORS();
  1412. return;
  1413. }
  1414. PHP_EXCEL_RESTORE_ERRORS();
  1415. BOOK_FROM_OBJECT(book, zbook);
  1416. obj = (excel_font_object*) zend_object_store_get_object(object TSRMLS_CC);
  1417. font = xlBookAddFont(book, NULL);
  1418. if (!font) {
  1419. RETURN_FALSE;
  1420. }
  1421. obj->font = font;
  1422. obj->book = book;
  1423. }
  1424. /* }}} */
  1425. /* {{{ proto bool ExcelFormat::setFont(ExcelFont font)
  1426. Set the font for a format. */
  1427. EXCEL_METHOD(Format, setFont)
  1428. {
  1429. FormatHandle format;
  1430. zval *object = getThis();
  1431. FontHandle font;
  1432. zval *zfont;
  1433. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &zfont, excel_ce_font) == FAILURE) {
  1434. RETURN_FALSE;
  1435. }
  1436. FORMAT_FROM_OBJECT(format, object);
  1437. FONT_FROM_OBJECT(font, zfont);
  1438. if (!xlFormatSetFont(format, font)) {
  1439. RETURN_FALSE;
  1440. }
  1441. RETURN_TRUE;
  1442. }
  1443. /* }}} */
  1444. /* {{{ proto ExcelFont ExcelFormat::getFont()
  1445. Get the font for this format. */
  1446. EXCEL_METHOD(Format, getFont)
  1447. {
  1448. FormatHandle format;
  1449. zval *object = getThis();
  1450. FontHandle font;
  1451. excel_font_object *fo;
  1452. excel_format_object *obj = (excel_format_object*) zend_object_store_get_object(object TSRMLS_CC);
  1453. format = obj->format;
  1454. if (!format) {
  1455. php_error_docref(NULL TSRMLS_CC, E_WARNING, "The format wasn't initialized");
  1456. RETURN_FALSE;
  1457. }
  1458. if (ZEND_NUM_ARGS()) {
  1459. RETURN_FALSE;
  1460. }
  1461. FORMAT_FROM_OBJECT(format, object);
  1462. font = xlFormatFont(format);
  1463. if (!font) {
  1464. RETURN_FALSE;
  1465. }
  1466. Z_TYPE_P(return_value) = IS_OBJECT;
  1467. object_init_ex(return_value, excel_ce_font);
  1468. Z_SET_REFCOUNT_P(return_value, 1);
  1469. Z_SET_ISREF_P(return_value);
  1470. fo = (excel_font_object *) zend_object_store_get_object(return_value TSRMLS_CC);
  1471. fo->font = font;
  1472. fo->book = obj->book;
  1473. }
  1474. /* }}} */
  1475. #define PHP_EXCEL_LONG_FORMAT_OPTION(func_name, write_only) \
  1476. { \
  1477. FormatHandle format; \
  1478. zval *object = getThis(); \
  1479. long data; \
  1480. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &data) == FAILURE) { \
  1481. RETURN_FALSE; \
  1482. } \
  1483. FORMAT_FROM_OBJECT(format, object); \
  1484. if (ZEND_NUM_ARGS()) { \
  1485. xlFormatSet ## func_name (format, data); \
  1486. } \
  1487. if (!write_only) { \
  1488. RETURN_LONG(xlFormat ## func_name (format)); \
  1489. } else { \
  1490. RETURN_TRUE; \
  1491. } \
  1492. }
  1493. #define PHP_EXCEL_BOOL_FORMAT_OPTION(func_name) \
  1494. { \
  1495. FormatHandle format; \
  1496. zval *object = getThis(); \
  1497. zend_bool data; \
  1498. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &data) == FAILURE) { \
  1499. RETURN_FALSE; \
  1500. } \
  1501. FORMAT_FROM_OBJECT(format, object); \
  1502. if (ZEND_NUM_ARGS()) { \
  1503. xlFormatSet ## func_name (format, data); \
  1504. } \
  1505. RETURN_BOOL(xlFormat ## func_name (format)); \
  1506. }
  1507. /* {{{ proto int ExcelFormat::numberFormat([int format])
  1508. Get or set the cell number format */
  1509. EXCEL_METHOD(Format, numberFormat)
  1510. {
  1511. PHP_EXCEL_LONG_FORMAT_OPTION(NumFormat, 0);
  1512. }
  1513. /* }}} */
  1514. /* {{{ proto int ExcelFormat::horizontalAlign([int align_mode])
  1515. Get or set the cell horizontal alignment */
  1516. EXCEL_METHOD(Format, horizontalAlign)
  1517. {
  1518. PHP_EXCEL_LONG_FORMAT_OPTION(AlignH, 0);
  1519. }
  1520. /* }}} */
  1521. /* {{{ proto int ExcelFormat::verticalAlign([int align_mode])
  1522. Get or set the cell vertical alignment */
  1523. EXCEL_METHOD(Format, verticalAlign)
  1524. {
  1525. PHP_EXCEL_LONG_FORMAT_OPTION(AlignV, 0);
  1526. }
  1527. /* }}} */
  1528. /* {{{ proto bool ExcelFormat::wrap([bool wrap])
  1529. Get or set the cell wrapping */
  1530. EXCEL_METHOD(Format, wrap)
  1531. {
  1532. PHP_EXCEL_BOOL_FORMAT_OPTION(Wrap);
  1533. }
  1534. /* }}} */
  1535. /* {{{ proto int ExcelFormat::rotate([int angle])
  1536. Get or set the cell data rotation */
  1537. EXCEL_METHOD(Format, rotate)
  1538. {
  1539. FormatHandle format;
  1540. zval *object = getThis();
  1541. long angle;
  1542. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &angle) == FAILURE) {
  1543. RETURN_FALSE;
  1544. }
  1545. FORMAT_FROM_OBJECT(format, object);
  1546. if (ZEND_NUM_ARGS()) {
  1547. if (angle < 0 || (angle > 180 && angle != 255)) {
  1548. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Rotation can be a number between 0 and 180 or 255");
  1549. RETURN_FALSE;
  1550. }
  1551. xlFormatSetRotation(format, angle);
  1552. }
  1553. RETURN_LONG(xlFormatRotation(format));
  1554. }
  1555. /* }}} */
  1556. /* {{{ proto int ExcelFormat::indent([int indent])
  1557. Get or set the cell text indentation level */
  1558. EXCEL_METHOD(Format, indent)
  1559. {
  1560. FormatHandle format;
  1561. zval *object = getThis();
  1562. long indent;
  1563. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &indent) == FAILURE) {
  1564. RETURN_FALSE;
  1565. }
  1566. FORMAT_FROM_OBJECT(format, object);
  1567. if (ZEND_NUM_ARGS()) {
  1568. if (indent < 0 || indent > 15) {
  1569. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Text indentation level must be less than or equal to 15");
  1570. RETURN_FALSE;
  1571. }
  1572. xlFormatSetIndent(format, indent);
  1573. }
  1574. RETURN_LONG(xlFormatIndent(format));
  1575. }
  1576. /* }}} */
  1577. /* {{{ proto bool ExcelFormat::shrinkToFit([bool shrink])
  1578. Get or set whether the cell is shrink-to-fit */
  1579. EXCEL_METHOD(Format, shrinkToFit)
  1580. {
  1581. PHP_EXCEL_BOOL_FORMAT_OPTION(ShrinkToFit);
  1582. }
  1583. /* }}} */
  1584. /* {{{ proto int ExcelFormat::borderStyle([int style])
  1585. Get or set the cell border */
  1586. EXCEL_METHOD(Format, borderStyle)
  1587. {
  1588. PHP_EXCEL_LONG_FORMAT_OPTION(Border, 1);
  1589. }
  1590. /* }}} */
  1591. /* {{{ proto int ExcelFormat::borderColor([int color])
  1592. Get or set the cell color */
  1593. EXCEL_METHOD(Format, borderColor)
  1594. {
  1595. PHP_EXCEL_LONG_FORMAT_OPTION(BorderColor, 1);
  1596. }
  1597. /* }}} */
  1598. /* {{{ proto int ExcelFormat::borderLeftStyle([int style])
  1599. Get or set the cell left border */
  1600. EXCEL_METHOD(Format, borderLeftStyle)
  1601. {
  1602. PHP_EXCEL_LONG_FORMAT_OPTION(BorderLeft, 0);
  1603. }
  1604. /* }}} */
  1605. /* {{{ proto int ExcelFormat::borderLeftColor([int color])
  1606. Get or set the cell left color */
  1607. EXCEL_METHOD(Format, borderLeftColor)
  1608. {
  1609. PHP_EXCEL_LONG_FORMAT_OPTION(BorderLeftColor, 0);
  1610. }
  1611. /* }}} */
  1612. /* {{{ proto int ExcelFormat::borderRightStyle([int style])
  1613. Get or set the cell right border */
  1614. EXCEL_METHOD(Format, borderRightStyle)
  1615. {
  1616. PHP_EXCEL_LONG_FORMAT_OPTION(BorderRight, 0);
  1617. }
  1618. /* }}} */
  1619. /* {{{ proto int ExcelFormat::borderRightColor([int color])
  1620. Get or set the cell right color */
  1621. EXCEL_METHOD(Format, borderRightColor)
  1622. {
  1623. PHP_EXCEL_LONG_FORMAT_OPTION(BorderRightColor, 0);
  1624. }
  1625. /* }}} */
  1626. /* {{{ proto int ExcelFormat::borderTopStyle([int style])
  1627. Get or set the cell top border */
  1628. EXCEL_METHOD(Format, borderTopStyle)
  1629. {
  1630. PHP_EXCEL_LONG_FORMAT_OPTION(BorderTop, 0);
  1631. }
  1632. /* }}} */
  1633. /* {{{ proto int ExcelFormat::borderTopColor([int color])
  1634. Get or set the cell top color */
  1635. EXCEL_METHOD(Format, borderTopColor)
  1636. {
  1637. PHP_EXCEL_LONG_FORMAT_OPTION(BorderTopColor, 0);
  1638. }
  1639. /* }}} */
  1640. /* {{{ proto int ExcelFormat::borderBottomStyle([int style])
  1641. Get or set the cell bottom border */
  1642. EXCEL_METHOD(Format, borderBottomStyle)
  1643. {
  1644. PHP_EXCEL_LONG_FORMAT_OPTION(BorderBottom, 0);
  1645. }
  1646. /* }}} */
  1647. /* {{{ proto int ExcelFormat::borderBottomColor([int color])
  1648. Get or set the cell bottom color */
  1649. EXCEL_METHOD(Format, borderBottomColor)
  1650. {
  1651. PHP_EXCEL_LONG_FORMAT_OPTION(BorderBottomColor, 0);
  1652. }
  1653. /* }}} */
  1654. /* {{{ proto int ExcelFormat::borderDiagonalStyle([int style])
  1655. Get or set the cell diagonal border */
  1656. EXCEL_METHOD(Format, borderDiagonalStyle)
  1657. {
  1658. PHP_EXCEL_LONG_FORMAT_OPTION(BorderDiagonal, 0);
  1659. }
  1660. /* }}} */
  1661. /* {{{ proto int ExcelFormat::borderDiagonalColor([int color])
  1662. Get or set the cell diagonal color */
  1663. EXCEL_METHOD(Format, borderDiagonalColor)
  1664. {
  1665. PHP_EXCEL_LONG_FORMAT_OPTION(BorderDiagonalColor, 0);
  1666. }
  1667. /* }}} */
  1668. /* {{{ proto int ExcelFormat::fillPattern([int patern])
  1669. Get or set the cell fill pattern */
  1670. EXCEL_METHOD(Format, fillPattern)
  1671. {
  1672. PHP_EXCEL_LONG_FORMAT_OPTION(FillPattern, 0);
  1673. }
  1674. /* }}} */
  1675. /* {{{ proto int ExcelFormat::patternForegroundColor([int color])
  1676. Get or set the cell pattern foreground color */
  1677. EXCEL_METHOD(Format, patternForegroundColor)
  1678. {
  1679. PHP_EXCEL_LONG_FORMAT_OPTION(PatternForegroundColor, 0);
  1680. }
  1681. /* }}} */
  1682. /* {{{ proto int ExcelFormat::patternBackgroundColor([int color])
  1683. Get or set the cell pattern background color */
  1684. EXCEL_METHOD(Format, patternBackgroundColor)
  1685. {
  1686. PHP_EXCEL_LONG_FORMAT_OPTION(PatternBackgroundColor, 0);
  1687. }
  1688. /* }}} */
  1689. /* {{{ proto bool ExcelFormat::locked([bool locked])
  1690. Get or set whether the cell is locked */
  1691. EXCEL_METHOD(Format, locked)
  1692. {
  1693. PHP_EXCEL_BOOL_FORMAT_OPTION(Locked);
  1694. }
  1695. /* }}} */
  1696. /* {{{ proto bool ExcelFormat::hidden([bool hidden])
  1697. Get or set whether the cell is hidden */
  1698. EXCEL_METHOD(Format, hidden)
  1699. {
  1700. PHP_EXCEL_BOOL_FORMAT_OPTION(Hidden);
  1701. }
  1702. /* }}} */
  1703. /* {{{ proto ExcelSheet ExcelSheet::__construct(ExcelBook book, string name)
  1704. Sheet Constructor. */
  1705. EXCEL_METHOD(Sheet, __construct)
  1706. {
  1707. BookHandle book;
  1708. SheetHandle sh;
  1709. zval *object = getThis();
  1710. excel_sheet_object *obj;
  1711. zval *zbook;
  1712. char *name;
  1713. int name_len;
  1714. PHP_EXCEL_ERROR_HANDLING();
  1715. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Os", &zbook, excel_ce_book, &name, &name_len) == FAILURE) {
  1716. PHP_EXCEL_RESTORE_ERRORS();
  1717. return;
  1718. }
  1719. PHP_EXCEL_RESTORE_ERRORS();
  1720. BOOK_FROM_OBJECT(book, zbook);
  1721. obj = (excel_sheet_object*) zend_object_store_get_object(object TSRMLS_CC);
  1722. #ifdef LIBXL_VERSION
  1723. sh = xlBookAddSheet(book, name, 0);
  1724. #else
  1725. sh = xlBookAddSheet(book, name);
  1726. #endif
  1727. if (!sh) {
  1728. RETURN_FALSE;
  1729. }
  1730. obj->sheet = sh;
  1731. obj->book = book;
  1732. }
  1733. /* }}} */
  1734. /* {{{ proto int ExcelSheet::cellType(int row, int column)
  1735. Get cell type */
  1736. EXCEL_METHOD(Sheet, cellType)
  1737. {
  1738. zval *object = getThis();
  1739. SheetHandle sheet;
  1740. long row, col;
  1741. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &row, &col) == FAILURE) {
  1742. RETURN_FALSE;
  1743. }
  1744. SHEET_FROM_OBJECT(sheet, object);
  1745. RETURN_LONG(xlSheetCellType(sheet, row, col));
  1746. }
  1747. /* }}} */
  1748. /* {{{ proto ExcelFormat ExcelSheet::cellFormat(int row, int column)
  1749. Get cell format */
  1750. EXCEL_METHOD(Sheet, cellFormat)
  1751. {
  1752. zval *object = getThis();
  1753. SheetHandle sheet;
  1754. FormatHandle format;
  1755. long row, col;
  1756. excel_format_object *fo;
  1757. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &row, &col) == FAILURE) {
  1758. RETURN_FALSE;
  1759. }
  1760. SHEET_FROM_OBJECT(sheet, object);
  1761. format = xlSheetCellFormat(sheet, row, col);
  1762. Z_TYPE_P(return_value) = IS_OBJECT;
  1763. object_init_ex(return_value, excel_ce_format);
  1764. Z_SET_REFCOUNT_P(return_value, 1);
  1765. Z_SET_ISREF_P(return_value);
  1766. fo = (excel_format_object *) zend_object_store_get_object(return_value TSRMLS_CC);
  1767. fo->format = format;
  1768. }
  1769. /* }}} */
  1770. #ifdef HAVE_LIBXL_243_PLUS
  1771. /* {{{ proto void ExcelFormat ExcelSheet::setCellFormat(int row, int column, ExcelFormat format)
  1772. Set cell format */
  1773. EXCEL_METHOD(Sheet, setCellFormat)
  1774. {
  1775. zval *object = getThis();
  1776. SheetHandle sheet;
  1777. FormatHandle format;
  1778. zval *oformat;
  1779. long row, col;
  1780. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llo", &row, &col, &oformat, excel_ce_format) == FAILURE) {
  1781. RETURN_FALSE;
  1782. }
  1783. SHEET_FROM_OBJECT(sheet, object);
  1784. FORMAT_FROM_OBJECT(format, oformat);
  1785. xlSheetSetCellFormat(sheet, row, col, format);
  1786. }
  1787. /* }}} */
  1788. #endif
  1789. static zend_bool php_excel_read_cell(int row, int col, zval *val, SheetHandle sheet, BookHandle book, FormatHandle *format, zend_bool read_formula)
  1790. {
  1791. const char *s;
  1792. if (read_formula && xlSheetIsFormula(sheet, row, col)) {
  1793. s = xlSheetReadFormula(sheet, row, col, format);
  1794. if (s) {
  1795. ZVAL_STRING(val, (char *)s, 1);
  1796. return 1;
  1797. } else {
  1798. return 0;
  1799. }
  1800. }
  1801. switch (xlSheetCellType(sheet, row, col)) {
  1802. case CELLTYPE_EMPTY:
  1803. *format = xlSheetCellFormat(sheet, row, col);
  1804. ZVAL_EMPTY_STRING(val);
  1805. return 1;
  1806. case CELLTYPE_BLANK:
  1807. if (!xlSheetReadBlank(sheet, row, col, format)) {
  1808. return 0;
  1809. } else {
  1810. ZVAL_NULL(val);
  1811. return 1;
  1812. }
  1813. case CELLTYPE_NUMBER: {
  1814. double d = xlSheetReadNum(sheet, row, col, format);
  1815. #if LIBXL_VERSION <= 0x03010000
  1816. if (xlSheetIsDate(sheet, row, col) && xlFormatNumFormat(*format) < 100) {
  1817. #else
  1818. if (xlSheetIsDate(sheet, row, col)) {
  1819. #endif
  1820. long dt = _php_excel_date_unpack(book, d);
  1821. if (dt == -1) {
  1822. return 0;
  1823. } else {
  1824. ZVAL_LONG(val, dt);
  1825. return 1;
  1826. }
  1827. } else {
  1828. ZVAL_DOUBLE(val, d);
  1829. return 1;
  1830. }
  1831. }
  1832. case CELLTYPE_STRING: {
  1833. s = xlSheetReadStr(sheet, row, col, format);
  1834. if (s) {
  1835. ZVAL_STRING(val, (char *)s, 1);
  1836. return 1;
  1837. } else {
  1838. return 0;
  1839. }
  1840. }
  1841. case CELLTYPE_BOOLEAN:
  1842. ZVAL_BOOL(val, xlSheetReadBool(sheet, row, col, format));
  1843. return 1;
  1844. case CELLTYPE_ERROR:
  1845. ZVAL_LONG(val, xlSheetReadError(sheet, row, col));
  1846. return 1;
  1847. }
  1848. return 0;
  1849. }
  1850. /* {{{ proto array ExcelSheet::readRow(int row [, int start_col [, int end_column [, bool read_formula]]])
  1851. Read an entire row worth of data */
  1852. EXCEL_METHOD(Sheet, readRow)
  1853. {
  1854. zval *object = getThis();
  1855. long row;
  1856. long col_start = 0;
  1857. long col_end = -1;
  1858. int lc;
  1859. SheetHandle sheet;
  1860. BookHandle book;
  1861. zend_bool read_formula = 1;
  1862. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|llb", &row, &col_start, &col_end, &read_formula) == FAILURE) {
  1863. RETURN_FALSE;
  1864. }
  1865. SHEET_AND_BOOK_FROM_OBJECT(sheet, book, object);
  1866. if (row < 0 || row > xlSheetLastRow(sheet)) {
  1867. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid row number '%ld'", row);
  1868. RETURN_FALSE;
  1869. }
  1870. lc = xlSheetLastCol(sheet);
  1871. if (col_start < 0 || col_start > lc) {
  1872. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid starting column number '%ld'", col_start);
  1873. RETURN_FALSE;
  1874. }
  1875. if (col_end == -1) {
  1876. col_end = lc - 1;
  1877. }
  1878. if (col_end < col_start || col_end > lc) {
  1879. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid ending column number '%ld'", col_end);
  1880. RETURN_FALSE;
  1881. }
  1882. lc = col_start;
  1883. array_init(return_value);
  1884. while (lc < (col_end + 1)) {
  1885. zval *value;
  1886. FormatHandle format = NULL;
  1887. MAKE_STD_ZVAL(value);
  1888. if (!php_excel_read_cell(row, lc, value, sheet, book, &format, read_formula)) {
  1889. zval_ptr_dtor(&value);
  1890. zval_dtor(return_value);
  1891. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to read cell in row %ld, column %d with error '%s'", row, lc, xlBookErrorMessage(book));
  1892. RETURN_FALSE;
  1893. } else {
  1894. add_next_index_zval(return_value, value);
  1895. }
  1896. lc++;
  1897. }
  1898. }
  1899. /* }}} */
  1900. /* {{{ proto array ExcelSheet::readCol(int column [, int start_row [, int end_row [, bool read_formula]]])
  1901. Read an entire column worth of data */
  1902. EXCEL_METHOD(Sheet, readCol)
  1903. {
  1904. zval *object = getThis();
  1905. long col;
  1906. long row_start = 0;
  1907. long row_end = -1;
  1908. int lc;
  1909. SheetHandle sheet;
  1910. BookHandle book;
  1911. zend_bool read_formula = 1;
  1912. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|llb", &col, &row_start, &row_end, &read_formula) == FAILURE) {
  1913. RETURN_FALSE;
  1914. }
  1915. SHEET_AND_BOOK_FROM_OBJECT(sheet, book, object);
  1916. if (col < 0 || col > xlSheetLastCol(sheet)) {
  1917. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid column number '%ld'", col);
  1918. RETURN_FALSE;
  1919. }
  1920. lc = xlSheetLastRow(sheet);
  1921. if (row_start < 0 || row_start > lc) {
  1922. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid starting row number '%ld'", row_start);
  1923. RETURN_FALSE;
  1924. }
  1925. if (row_end == -1) {
  1926. row_end = lc - 1;
  1927. }
  1928. if (row_end < row_start || row_end > lc) {
  1929. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid ending row number '%ld'", row_end);
  1930. RETURN_FALSE;
  1931. }
  1932. lc = row_start;
  1933. array_init(return_value);
  1934. while (lc < (row_end + 1)) {
  1935. zval *value;
  1936. FormatHandle format = NULL;
  1937. MAKE_STD_ZVAL(value);
  1938. if (!php_excel_read_cell(lc, col, value, sheet, book, &format, read_formula)) {
  1939. zval_ptr_dtor(&value);
  1940. zval_dtor(return_value);
  1941. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to read cell in row %d, column %ld with error '%s'", lc, col, xlBookErrorMessage(book));
  1942. RETURN_FALSE;
  1943. } else {
  1944. add_next_index_zval(return_value, value);
  1945. }
  1946. lc++;
  1947. }
  1948. }
  1949. /* }}} */
  1950. /* {{{ proto mixed ExcelSheet::read(int row, int column [, mixed &format [, bool read_formula]])
  1951. Read data stored inside a cell */
  1952. EXCEL_METHOD(Sheet, read)
  1953. {
  1954. zval *object = getThis();
  1955. SheetHandle sheet;
  1956. BookHandle book;
  1957. long row, col;
  1958. zval *oformat = NULL;
  1959. FormatHandle format = NULL;
  1960. zend_bool read_formula = 1;
  1961. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll|z/b", &row, &col, &oformat, &read_formula) == FAILURE) {
  1962. RETURN_FALSE;
  1963. }
  1964. SHEET_AND_BOOK_FROM_OBJECT(sheet, book, object);
  1965. if (oformat) {
  1966. zval_dtor(oformat);
  1967. ZVAL_NULL(oformat);
  1968. }
  1969. if (!php_excel_read_cell(row, col, return_value, sheet, book, &format, read_formula)) {
  1970. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to read cell in row %ld, column %ld with error '%s'", row, col, xlBookErrorMessage(book));
  1971. RETURN_FALSE;
  1972. }
  1973. if (oformat) {
  1974. excel_format_object *fo;
  1975. Z_TYPE_P(oformat) = IS_OBJECT;
  1976. object_init_ex(oformat, excel_ce_format);
  1977. fo = (excel_format_object *) zend_object_store_get_object(oformat TSRMLS_CC);
  1978. fo->format = format;
  1979. }
  1980. }
  1981. /* }}} */
  1982. static zend_bool php_excel_write_cell(SheetHandle sheet, BookHandle book, int row, int col, zval *data, FormatHandle format, long dtype TSRMLS_DC)
  1983. {
  1984. switch (Z_TYPE_P(data)) {
  1985. case IS_NULL:
  1986. if (INI_INT("excel.skip_empty") > 0) {
  1987. return 1;
  1988. }
  1989. if (!format) {
  1990. return xlSheetWriteBlank(sheet, row, col, 0);
  1991. } else {
  1992. return xlSheetWriteBlank(sheet, row, col, format);
  1993. }
  1994. case IS_LONG:
  1995. if (dtype == PHP_EXCEL_DATE) {
  1996. double dt;
  1997. if ((dt = _php_excel_date_pack(book, Z_LVAL_P(data))) == -1) {
  1998. return 0;
  1999. }
  2000. if (!format) {
  2001. FormatHandle fmt = xlBookAddFormat(book, NULL);
  2002. xlFormatSetNumFormat(fmt, NUMFORMAT_DATE);
  2003. return xlSheetWriteNum(sheet, row, col, dt, fmt);
  2004. } else {
  2005. return xlSheetWriteNum(sheet, row, col, dt, format);
  2006. }
  2007. } else {
  2008. return xlSheetWriteNum(sheet, row, col, (double) Z_LVAL_P(data), format);
  2009. }
  2010. case IS_DOUBLE:
  2011. return xlSheetWriteNum(sheet, row, col, Z_DVAL_P(data), format);
  2012. case IS_STRING:
  2013. if (Z_STRLEN_P(data) > 0 && '\'' == Z_STRVAL_P(data)[0]) {
  2014. return xlSheetWriteStr(sheet, row, col, Z_STRVAL_P(data) + 1, format);
  2015. }
  2016. if (Z_STRLEN_P(data) > 0 && '=' == Z_STRVAL_P(data)[0]) {
  2017. dtype = PHP_EXCEL_FORMULA;
  2018. }
  2019. if (dtype == PHP_EXCEL_FORMULA) {
  2020. return xlSheetWriteFormula(sheet, row, col, Z_STRVAL_P(data), format);
  2021. } else {
  2022. if (dtype == PHP_EXCEL_NUMERIC_STRING) {
  2023. long lval;
  2024. double dval;
  2025. switch (is_numeric_string(Z_STRVAL_P(data), Z_STRLEN_P(data), &lval, &dval, 0)) {
  2026. case IS_LONG:
  2027. return xlSheetWriteNum(sheet, row, col, (double) lval, format);
  2028. case IS_DOUBLE:
  2029. return xlSheetWriteNum(sheet, row, col, dval, format);
  2030. }
  2031. }
  2032. if (Z_STRLEN_P(data) == 0 && INI_INT("excel.skip_empty") == 2) {
  2033. return 1;
  2034. }
  2035. return xlSheetWriteStr(sheet, row, col, Z_STRVAL_P(data), format);
  2036. }
  2037. case IS_BOOL:
  2038. return xlSheetWriteBool(sheet, row, col, Z_BVAL_P(data), format);
  2039. }
  2040. return 0;
  2041. }
  2042. /* {{{ proto bool ExcelSheet::write(int row, int column, mixed data [, ExcelFormat format [, int datatype]])
  2043. Write data into a cell */
  2044. EXCEL_METHOD(Sheet, write)
  2045. {
  2046. zval *object = getThis();
  2047. SheetHandle sheet;
  2048. BookHandle book;
  2049. FormatHandle format;
  2050. long row, col;
  2051. zval *oformat = NULL;
  2052. long dtype = -1;
  2053. zval *data;
  2054. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llz|O!l", &row, &col, &data, &oformat, excel_ce_format, &dtype) == FAILURE) {
  2055. RETURN_FALSE;
  2056. }
  2057. SHEET_AND_BOOK_FROM_OBJECT(sheet, book, object);
  2058. if (oformat) {
  2059. FORMAT_FROM_OBJECT(format, oformat);
  2060. }
  2061. if (!php_excel_write_cell(sheet, book, row, col, data, oformat ? format : 0, dtype TSRMLS_CC)) {
  2062. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to write cell in row %ld, column %ld with error '%s'", row, col, xlBookErrorMessage(book));
  2063. RETURN_FALSE;
  2064. }
  2065. RETURN_TRUE;
  2066. }
  2067. /* }}} */
  2068. /* {{{ proto bool ExcelSheet::writeRow(int row, array data [, int start_column [, ExcelFormat format]])
  2069. Write an array of values into a row */
  2070. EXCEL_METHOD(Sheet, writeRow)
  2071. {
  2072. zval *object = getThis();
  2073. SheetHandle sheet;
  2074. BookHandle book;
  2075. FormatHandle format;
  2076. long row, col = 0;
  2077. zval *oformat = NULL;
  2078. zval *data;
  2079. HashPosition pos;
  2080. zval **element;
  2081. long i;
  2082. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la|lO", &row, &data, &col, &oformat, excel_ce_format) == FAILURE) {
  2083. RETURN_FALSE;
  2084. }
  2085. SHEET_AND_BOOK_FROM_OBJECT(sheet, book, object);
  2086. if (oformat) {
  2087. FORMAT_FROM_OBJECT(format, oformat);
  2088. }
  2089. if (row < 0) {
  2090. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid row number '%ld'", row);
  2091. RETURN_FALSE;
  2092. }
  2093. if (col < 0) {
  2094. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid starting column number '%ld'", col);
  2095. RETURN_FALSE;
  2096. }
  2097. i = col;
  2098. for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(data), &pos);
  2099. zend_hash_get_current_data_ex(Z_ARRVAL_P(data), (void **) &element, &pos) == SUCCESS;
  2100. zend_hash_move_forward_ex(Z_ARRVAL_P(data), &pos)) {
  2101. if (!php_excel_write_cell(sheet, book, row, i++, *element, oformat ? format : 0, -1 TSRMLS_CC)) {
  2102. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to write cell in row %ld, column %ld with error '%s'", row, i-1, xlBookErrorMessage(book));
  2103. RETURN_FALSE;
  2104. }
  2105. }
  2106. RETURN_TRUE;
  2107. }
  2108. /* }}} */
  2109. /* {{{ proto bool ExcelSheet::writeCol(int row, array data [, int start_row [, ExcelFormat format [, int datatype]]])
  2110. Write an array of values into a column */
  2111. EXCEL_METHOD(Sheet, writeCol)
  2112. {
  2113. zval *object = getThis();
  2114. SheetHandle sheet;
  2115. BookHandle book;
  2116. FormatHandle format;
  2117. long row = 0, col;
  2118. zval *oformat = NULL;
  2119. zval *data;
  2120. HashPosition pos;
  2121. zval **element;
  2122. long i;
  2123. long dtype = -1;
  2124. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "la|lO!l", &col, &data, &row, &oformat, excel_ce_format, &dtype) == FAILURE) {
  2125. RETURN_FALSE;
  2126. }
  2127. SHEET_AND_BOOK_FROM_OBJECT(sheet, book, object);
  2128. if (oformat) {
  2129. FORMAT_FROM_OBJECT(format, oformat);
  2130. }
  2131. if (col < 0) {
  2132. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid column number '%ld'", col);
  2133. RETURN_FALSE;
  2134. }
  2135. if (row < 0) {
  2136. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid starting row number '%ld'", row);
  2137. RETURN_FALSE;
  2138. }
  2139. i = row;
  2140. for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(data), &pos);
  2141. zend_hash_get_current_data_ex(Z_ARRVAL_P(data), (void **) &element, &pos) == SUCCESS;
  2142. zend_hash_move_forward_ex(Z_ARRVAL_P(data), &pos)) {
  2143. if (!php_excel_write_cell(sheet, book, i++, col, *element, oformat ? format : 0, dtype TSRMLS_CC)) {
  2144. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to write cell in row %ld, column %ld with error '%s'", i-1, col, xlBookErrorMessage(book));
  2145. RETURN_FALSE;
  2146. }
  2147. }
  2148. RETURN_TRUE;
  2149. }
  2150. /* }}} */
  2151. #define PHP_EXCEL_SHEET_GET_BOOL_STATE(func_name) \
  2152. { \
  2153. SheetHandle sheet; \
  2154. zval *object = getThis(); \
  2155. long r, c; \
  2156. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &r, &c) == FAILURE) { \
  2157. RETURN_FALSE; \
  2158. } \
  2159. SHEET_FROM_OBJECT(sheet, object); \
  2160. RETURN_BOOL(xlSheet ## func_name (sheet, r, c)); \
  2161. }
  2162. #define PHP_EXCEL_SHEET_GET_BOOL_STATE_384(func_name) \
  2163. { \
  2164. SheetHandle sheet; \
  2165. zval *object = getThis(); \
  2166. long r, c; \
  2167. zend_bool u = 1; \
  2168. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &r, &c, &u) == FAILURE) { \
  2169. RETURN_FALSE; \
  2170. } \
  2171. SHEET_FROM_OBJECT(sheet, object); \
  2172. RETURN_BOOL(xlSheet ## func_name (sheet, r, c, u)); \
  2173. }
  2174. /* {{{ proto bool ExcelSheet::isFormula(int row, int column)
  2175. Determine if the cell contains a formula */
  2176. EXCEL_METHOD(Sheet, isFormula)
  2177. {
  2178. PHP_EXCEL_SHEET_GET_BOOL_STATE(IsFormula)
  2179. }
  2180. /* }}} */
  2181. /* {{{ proto bool ExcelSheet::isDate(int row, int column)
  2182. Determine if the cell contains a date */
  2183. EXCEL_METHOD(Sheet, isDate)
  2184. {
  2185. zval *object = getThis();
  2186. long r, c;
  2187. #if LIBXL_VERSION <= 0x03010000
  2188. double d;
  2189. FormatHandle format = NULL;
  2190. #endif
  2191. SheetHandle sheet;
  2192. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &r, &c) == FAILURE) {
  2193. RETURN_FALSE;
  2194. }
  2195. SHEET_FROM_OBJECT(sheet, object);
  2196. if (xlSheetCellType(sheet, r, c) != CELLTYPE_NUMBER) {
  2197. RETURN_FALSE;
  2198. }
  2199. #if LIBXL_VERSION <= 0x03010000
  2200. d = xlSheetReadNum(sheet, r, c, &format);
  2201. RETURN_BOOL(xlSheetIsDate(sheet, r, c) && (!format || (xlFormatNumFormat(format) < 100)));
  2202. #else
  2203. RETURN_BOOL(xlSheetIsDate(sheet, r, c));
  2204. #endif
  2205. }
  2206. /* }}} */
  2207. /* {{{ proto bool ExcelSheet::insertRow(int row_first, int row_last, bool update_named_ranges)
  2208. Inserts rows from rowFirst to rowLast */
  2209. EXCEL_METHOD(Sheet, insertRow)
  2210. {
  2211. #if LIBXL_VERSION >= 0x03080301
  2212. PHP_EXCEL_SHEET_GET_BOOL_STATE_384(InsertRow)
  2213. #else
  2214. PHP_EXCEL_SHEET_GET_BOOL_STATE(InsertRow)
  2215. #endif
  2216. }
  2217. /* }}} */
  2218. /* {{{ proto bool ExcelSheet::insertCol(int col_first, int col_last, bool update_named_ranges)
  2219. Inserts columns from colFirst to colLast */
  2220. EXCEL_METHOD(Sheet, insertCol)
  2221. {
  2222. #if LIBXL_VERSION >= 0x03080301
  2223. PHP_EXCEL_SHEET_GET_BOOL_STATE_384(InsertCol)
  2224. #else
  2225. PHP_EXCEL_SHEET_GET_BOOL_STATE(InsertCol)
  2226. #endif
  2227. }
  2228. /* }}} */
  2229. /* {{{ proto bool ExcelSheet::removeRow(int row_first, int row_last, bool update_named_ranges)
  2230. Removes rows from rowFirst to rowLast */
  2231. EXCEL_METHOD(Sheet, removeRow)
  2232. {
  2233. #if LIBXL_VERSION >= 0x03080301
  2234. PHP_EXCEL_SHEET_GET_BOOL_STATE_384(RemoveRow)
  2235. #else
  2236. PHP_EXCEL_SHEET_GET_BOOL_STATE(RemoveRow)
  2237. #endif
  2238. }
  2239. /* }}} */
  2240. /* {{{ proto bool ExcelSheet::removeCol(int col_first, int col_last, bool update_named_ranges)
  2241. Removes columns from colFirst to colLast */
  2242. EXCEL_METHOD(Sheet, removeCol)
  2243. {
  2244. #if LIBXL_VERSION >= 0x03080301
  2245. PHP_EXCEL_SHEET_GET_BOOL_STATE_384(RemoveCol)
  2246. #else
  2247. PHP_EXCEL_SHEET_GET_BOOL_STATE(RemoveCol)
  2248. #endif
  2249. }
  2250. /* }}} */
  2251. #define PHP_EXCEL_SHEET_GET_DOUBLE_STATE(func_name) \
  2252. { \
  2253. SheetHandle sheet; \
  2254. zval *object = getThis(); \
  2255. long val; \
  2256. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &val) == FAILURE) { \
  2257. RETURN_FALSE; \
  2258. } \
  2259. SHEET_FROM_OBJECT(sheet, object); \
  2260. RETURN_DOUBLE(xlSheet ## func_name (sheet, val)); \
  2261. }
  2262. /* {{{ proto double ExcelSheet::colWidth(int column)
  2263. Returns the cell width */
  2264. EXCEL_METHOD(Sheet, colWidth)
  2265. {
  2266. PHP_EXCEL_SHEET_GET_DOUBLE_STATE(ColWidth)
  2267. }
  2268. /* }}} */
  2269. /* {{{ proto double ExcelSheet::rowHeight(int row)
  2270. Returns the cell height */
  2271. EXCEL_METHOD(Sheet, rowHeight)
  2272. {
  2273. PHP_EXCEL_SHEET_GET_DOUBLE_STATE(RowHeight)
  2274. }
  2275. /* }}} */
  2276. /* {{{ proto string ExcelSheet::readComment(int row, int column)
  2277. Read comment from a cell */
  2278. EXCEL_METHOD(Sheet, readComment)
  2279. {
  2280. SheetHandle sheet;
  2281. zval *object = getThis();
  2282. const char *s;
  2283. long r, c;
  2284. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &r, &c) == FAILURE) {
  2285. RETURN_FALSE;
  2286. }
  2287. SHEET_FROM_OBJECT(sheet, object);
  2288. s = xlSheetReadComment(sheet, r, c);
  2289. if (!s) {
  2290. RETURN_FALSE;
  2291. }
  2292. RETURN_STRING((char *)s, 1);
  2293. }
  2294. /* }}} */
  2295. /* {{{ proto void ExcelSheet::writeComment(int row, int column, string value, string author, int width, int height)
  2296. Write comment to a cell */
  2297. EXCEL_METHOD(Sheet, writeComment)
  2298. {
  2299. SheetHandle sheet;
  2300. zval *object = getThis();
  2301. char *val, *auth;
  2302. int val_len, auth_len;
  2303. long r, c, w, h;
  2304. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llssll", &r, &c, &val, &val_len, &auth, &auth_len, &w, &h) == FAILURE) {
  2305. RETURN_FALSE;
  2306. }
  2307. SHEET_FROM_OBJECT(sheet, object);
  2308. xlSheetWriteComment(sheet, r, c, val, auth, w, h);
  2309. }
  2310. /* }}} */
  2311. /* {{{ proto void ExcelSheet::setColWidth(int column_start, int column_end, double width [, bool hidden [, ExcelFormat format]])
  2312. Set width of cells within column(s); Value -1 is used for autofit column widths in LibXL 3.6+ */
  2313. EXCEL_METHOD(Sheet, setColWidth)
  2314. {
  2315. SheetHandle sheet;
  2316. FormatHandle format;
  2317. zval *object = getThis();
  2318. long s, e;
  2319. double width;
  2320. zval *f = NULL;
  2321. zend_bool h = 0;
  2322. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lld|bz/", &s, &e, &width, &h, &f) == FAILURE) {
  2323. RETURN_FALSE;
  2324. }
  2325. SHEET_FROM_OBJECT(sheet, object);
  2326. if (f) {
  2327. FORMAT_FROM_OBJECT(format, f);
  2328. }
  2329. if (e < s) {
  2330. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Start cell is greater then end cell");
  2331. RETURN_FALSE;
  2332. } else if (s < 0) {
  2333. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Start cell cannot be less then 0");
  2334. RETURN_FALSE;
  2335. } else if (width < -1) {
  2336. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Width cannot be less then -1");
  2337. RETURN_FALSE;
  2338. }
  2339. RETURN_BOOL(xlSheetSetCol(sheet, s, e, width, f ? format : 0, h));
  2340. }
  2341. /* }}} */
  2342. /* {{{ proto bool ExcelSheet::setRowHeight(int row, double height [, ExcelFormat format [, bool hidden]])
  2343. Set row height */
  2344. EXCEL_METHOD(Sheet, setRowHeight)
  2345. {
  2346. SheetHandle sheet;
  2347. FormatHandle format;
  2348. zval *object = getThis();
  2349. long row;
  2350. double height;
  2351. zval *f = NULL;
  2352. zend_bool h = 0;
  2353. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ld|z/b", &row, &height, &f, &h) == FAILURE) {
  2354. RETURN_FALSE;
  2355. }
  2356. SHEET_FROM_OBJECT(sheet, object);
  2357. if (f) {
  2358. FORMAT_FROM_OBJECT(format, f);
  2359. }
  2360. if (row < 0) {
  2361. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Row number cannot be less then 0");
  2362. RETURN_FALSE;
  2363. } else if (height < 0) {
  2364. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Height cannot be less then 0");
  2365. RETURN_FALSE;
  2366. }
  2367. RETURN_BOOL(xlSheetSetRow(sheet, row, height, f ? format : 0, h));
  2368. }
  2369. /* }}} */
  2370. /* {{{ proto array ExcelSheet::getMerge(int row, int column)
  2371. Get cell merge range */
  2372. EXCEL_METHOD(Sheet, getMerge)
  2373. {
  2374. SheetHandle sheet;
  2375. zval *object = getThis();
  2376. long row, col;
  2377. #if LIBXL_VERSION >= 0x03010000
  2378. int rowFirst, rowLast, colFirst, colLast;
  2379. #else
  2380. unsigned short rowFirst, rowLast, colFirst, colLast;
  2381. #endif
  2382. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &row, &col) == FAILURE) {
  2383. RETURN_FALSE;
  2384. }
  2385. SHEET_FROM_OBJECT(sheet, object);
  2386. if (!xlSheetGetMerge(sheet, row, col, &rowFirst, &rowLast, &colFirst, &colLast)) {
  2387. RETURN_FALSE;
  2388. }
  2389. array_init(return_value);
  2390. add_assoc_long(return_value, "row_first", rowFirst);
  2391. add_assoc_long(return_value, "row_last", rowLast);
  2392. add_assoc_long(return_value, "col_first", colFirst);
  2393. add_assoc_long(return_value, "col_last", colLast);
  2394. }
  2395. /* }}} */
  2396. /* {{{ proto bool ExcelSheet::setMerge(int row_start, int row_end, int col_start, int col_end)
  2397. Set cell merge range */
  2398. EXCEL_METHOD(Sheet, setMerge)
  2399. {
  2400. SheetHandle sheet;
  2401. zval *object = getThis();
  2402. long row_s, col_s, row_e, col_e;
  2403. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &row_s, &row_e, &col_s, &col_e) == FAILURE) {
  2404. RETURN_FALSE;
  2405. }
  2406. SHEET_FROM_OBJECT(sheet, object);
  2407. RETURN_BOOL(xlSheetSetMerge(sheet, row_s, row_e, col_s, col_e));
  2408. }
  2409. /* }}} */
  2410. /* {{{ proto bool ExcelSheet::deleteMerge(int row, int column)
  2411. Delete cell merge */
  2412. EXCEL_METHOD(Sheet, deleteMerge)
  2413. {
  2414. SheetHandle sheet;
  2415. zval *object = getThis();
  2416. long row, col;
  2417. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &row, &col) == FAILURE) {
  2418. RETURN_FALSE;
  2419. }
  2420. SHEET_FROM_OBJECT(sheet, object);
  2421. RETURN_BOOL(xlSheetDelMerge(sheet, row, col));
  2422. }
  2423. /* }}} */
  2424. #if LIBXL_VERSION >= 0x03040000
  2425. /* {{{ proto void ExcelSheet::addPictureScaled(int row, int column, int pic_id, double scale [, int x_offset [, int y_offset]])
  2426. Insert picture into a cell with a set scale */
  2427. EXCEL_METHOD(Sheet, addPictureScaled)
  2428. {
  2429. SheetHandle sheet;
  2430. zval *object = getThis();
  2431. long row, col, pic_id;
  2432. long x_offset = 0, y_offset = 0, pos = 0;
  2433. double scale;
  2434. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llld|lll", &row, &col, &pic_id, &scale, &x_offset, &y_offset, &pos) == FAILURE) {
  2435. RETURN_FALSE;
  2436. }
  2437. SHEET_FROM_OBJECT(sheet, object);
  2438. xlSheetSetPicture(sheet, row, col, pic_id, scale, x_offset, y_offset
  2439. #if LIBXL_VERSION >= 0x03060300
  2440. , pos
  2441. #endif
  2442. );
  2443. }
  2444. /* }}} */
  2445. /* {{{ proto void ExcelSheet::addPictureDim(int row, int column, int pic_id, int width, int height [, int x_offset [, int y_offset]])
  2446. Insert picture into a cell with a given dimensions */
  2447. EXCEL_METHOD(Sheet, addPictureDim)
  2448. {
  2449. SheetHandle sheet;
  2450. zval *object = getThis();
  2451. long row, col, pic_id, w, h;
  2452. long x_offset = 0, y_offset = 0, pos = 0;
  2453. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllll|lll", &row, &col, &pic_id, &w, &h, &x_offset, &y_offset, &pos) == FAILURE) {
  2454. RETURN_FALSE;
  2455. }
  2456. SHEET_FROM_OBJECT(sheet, object);
  2457. xlSheetSetPicture2(sheet, row, col, pic_id, w, h, x_offset, y_offset
  2458. #if LIBXL_VERSION >= 0x03060300
  2459. , pos
  2460. #endif
  2461. );
  2462. }
  2463. /* }}} */
  2464. #else
  2465. /* {{{ proto void ExcelSheet::addPictureScaled(int row, int column, int pic_id, double scale)
  2466. Insert picture into a cell with a set scale */
  2467. EXCEL_METHOD(Sheet, addPictureScaled)
  2468. {
  2469. SheetHandle sheet;
  2470. zval *object = getThis();
  2471. long row, col, pic_id;
  2472. double scale;
  2473. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llld", &row, &col, &pic_id, &scale) == FAILURE) {
  2474. RETURN_FALSE;
  2475. }
  2476. SHEET_FROM_OBJECT(sheet, object);
  2477. xlSheetSetPicture(sheet, row, col, pic_id, scale);
  2478. }
  2479. /* }}} */
  2480. /* {{{ proto void ExcelSheet::addPictureDim(int row, int column, int pic_id, int width, int height)
  2481. Insert picture into a cell with a given dimensions */
  2482. EXCEL_METHOD(Sheet, addPictureDim)
  2483. {
  2484. SheetHandle sheet;
  2485. zval *object = getThis();
  2486. long row, col, pic_id, w, h;
  2487. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lllll", &row, &col, &pic_id, &w, &h) == FAILURE) {
  2488. RETURN_FALSE;
  2489. }
  2490. SHEET_FROM_OBJECT(sheet, object);
  2491. xlSheetSetPicture2(sheet, row, col, pic_id, w, h);
  2492. }
  2493. /* }}} */
  2494. #endif
  2495. #define PHP_EXCEL_SHEET_SET_BREAK(func_name) \
  2496. { \
  2497. SheetHandle sheet; \
  2498. zval *object = getThis(); \
  2499. long val; \
  2500. zend_bool brk; \
  2501. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lb", &val, &brk) == FAILURE) { \
  2502. RETURN_FALSE; \
  2503. } \
  2504. SHEET_FROM_OBJECT(sheet, object); \
  2505. RETURN_BOOL(xlSheet ## func_name (sheet, val, brk)); \
  2506. }
  2507. /* {{{ proto bool ExcelSheet::horPageBreak(int row, bool break)
  2508. Set/Remove horizontal page break */
  2509. EXCEL_METHOD(Sheet, horPageBreak)
  2510. {
  2511. PHP_EXCEL_SHEET_SET_BREAK(SetHorPageBreak)
  2512. }
  2513. /* }}} */
  2514. /* {{{ proto bool ExcelSheet::verPageBreak(int col, bool break)
  2515. Set/Remove vertical page break */
  2516. EXCEL_METHOD(Sheet, verPageBreak)
  2517. {
  2518. PHP_EXCEL_SHEET_SET_BREAK(SetVerPageBreak)
  2519. }
  2520. /* }}} */
  2521. /* {{{ proto void ExcelSheet::splitSheet(int row, int column)
  2522. Split sheet at indicated position */
  2523. EXCEL_METHOD(Sheet, splitSheet)
  2524. {
  2525. SheetHandle sheet;
  2526. zval *object = getThis();
  2527. long row, col;
  2528. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &row, &col) == FAILURE) {
  2529. RETURN_FALSE;
  2530. }
  2531. SHEET_FROM_OBJECT(sheet, object);
  2532. xlSheetSplit(sheet, row, col);
  2533. }
  2534. /* }}} */
  2535. #define PHP_EXCEL_SHEET_GROUP(func_name) \
  2536. { \
  2537. SheetHandle sheet; \
  2538. zval *object = getThis(); \
  2539. long s, e; \
  2540. zend_bool brk = 0; \
  2541. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll|b", &s, &e, &brk) == FAILURE) { \
  2542. RETURN_FALSE; \
  2543. } \
  2544. SHEET_FROM_OBJECT(sheet, object); \
  2545. RETURN_BOOL(xlSheet ## func_name (sheet, s, e, brk)); \
  2546. }
  2547. /* {{{ proto bool ExcelSheet::groupRows(int start_row, int end_row [, bool collapse])
  2548. Group rows from rowFirst to rowLast */
  2549. EXCEL_METHOD(Sheet, groupRows)
  2550. {
  2551. PHP_EXCEL_SHEET_GROUP(GroupRows)
  2552. }
  2553. /* }}} */
  2554. /* {{{ proto bool ExcelSheet::groupCols(int start_column, int end_column [, bool collapse])
  2555. Group columns from colFirst to colLast */
  2556. EXCEL_METHOD(Sheet, groupCols)
  2557. {
  2558. PHP_EXCEL_SHEET_GROUP(GroupCols)
  2559. }
  2560. /* }}} */
  2561. /* {{{ proto void ExcelSheet::clear(int row_s, int row_e, int col_s, int col_e)
  2562. Clear cells in specified area. */
  2563. EXCEL_METHOD(Sheet, clear)
  2564. {
  2565. SheetHandle sheet;
  2566. zval *object = getThis();
  2567. long row_s, col_s, col_e, row_e;
  2568. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &row_s, &row_e, &col_s, &col_e) == FAILURE) {
  2569. RETURN_FALSE;
  2570. }
  2571. SHEET_FROM_OBJECT(sheet, object);
  2572. xlSheetClear(sheet, row_s, row_e, col_s, col_e);
  2573. }
  2574. /* }}} */
  2575. /* {{{ proto void ExcelSheet::copy(int row, int col, int to_row, int to_col)
  2576. Copy a cell */
  2577. EXCEL_METHOD(Sheet, copy)
  2578. {
  2579. SheetHandle sheet;
  2580. zval *object = getThis();
  2581. long row, col, to_row, to_col;
  2582. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &row, &col, &to_row, &to_col) == FAILURE) {
  2583. RETURN_FALSE;
  2584. }
  2585. SHEET_FROM_OBJECT(sheet, object);
  2586. RETURN_BOOL(xlSheetCopyCell(sheet, row, col, to_row, to_col));
  2587. }
  2588. /* }}} */
  2589. #define PE_RETURN_IS_LONG RETURN_LONG
  2590. #define PE_RETURN_IS_BOOL RETURN_BOOL
  2591. #define PE_RETURN_IS_DOUBLE RETURN_DOUBLE
  2592. #define PE_RETURN_IS_STRING(data) if (data) { RETURN_STRING((char *)data, 1) } else { RETURN_NULL(); }
  2593. #define PHP_EXCEL_INFO(func_name, type) \
  2594. { \
  2595. SheetHandle sheet; \
  2596. zval *object = getThis(); \
  2597. if (ZEND_NUM_ARGS()) { \
  2598. RETURN_FALSE; \
  2599. } \
  2600. SHEET_FROM_OBJECT(sheet, object); \
  2601. PE_RETURN_ ## type (xlSheet ## func_name (sheet)); \
  2602. }
  2603. #define PHP_EXCEL_SET_BOOL_VAL(func_name) \
  2604. { \
  2605. SheetHandle sheet; \
  2606. zval *object = getThis(); \
  2607. zend_bool val; \
  2608. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &val) == FAILURE) { \
  2609. RETURN_FALSE; \
  2610. } \
  2611. SHEET_FROM_OBJECT(sheet, object); \
  2612. xlSheet ## func_name (sheet, val); \
  2613. }
  2614. #define PHP_EXCEL_SET_LONG_VAL(func_name) \
  2615. { \
  2616. SheetHandle sheet; \
  2617. zval *object = getThis(); \
  2618. long val; \
  2619. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &val) == FAILURE) { \
  2620. RETURN_FALSE; \
  2621. } \
  2622. SHEET_FROM_OBJECT(sheet, object); \
  2623. xlSheet ## func_name (sheet, val); \
  2624. }
  2625. #define PHP_EXCEL_SET_DOUBLE_VAL(func_name) \
  2626. { \
  2627. SheetHandle sheet; \
  2628. zval *object = getThis(); \
  2629. double val; \
  2630. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &val) == FAILURE) { \
  2631. RETURN_FALSE; \
  2632. } \
  2633. SHEET_FROM_OBJECT(sheet, object); \
  2634. xlSheet ## func_name (sheet, val); \
  2635. }
  2636. /* {{{ proto int ExcelSheet::firstRow()
  2637. Returns the first row in the sheet that contains a used cell. */
  2638. EXCEL_METHOD(Sheet, firstRow)
  2639. {
  2640. PHP_EXCEL_INFO(FirstRow, IS_LONG)
  2641. }
  2642. /* }}} */
  2643. /* {{{ proto int ExcelSheet::lastRow()
  2644. Returns the zero-based index of the row after the last row in the sheet that contains a used cell. */
  2645. EXCEL_METHOD(Sheet, lastRow)
  2646. {
  2647. PHP_EXCEL_INFO(LastRow, IS_LONG)
  2648. }
  2649. /* }}} */
  2650. /* {{{ proto int ExcelSheet::firstCol()
  2651. Returns the first column in the sheet that contains a used cell. */
  2652. EXCEL_METHOD(Sheet, firstCol)
  2653. {
  2654. PHP_EXCEL_INFO(FirstCol, IS_LONG)
  2655. }
  2656. /* }}} */
  2657. /* {{{ proto int ExcelSheet::lastCol()
  2658. Returns the zero-based index of the column after the last column in the sheet that contains a used cell. */
  2659. EXCEL_METHOD(Sheet, lastCol)
  2660. {
  2661. PHP_EXCEL_INFO(LastCol, IS_LONG)
  2662. }
  2663. /* }}} */
  2664. /* {{{ proto bool ExcelSheet::displayGridlines()
  2665. Returns whether the gridlines are displayed */
  2666. EXCEL_METHOD(Sheet, displayGridlines)
  2667. {
  2668. PHP_EXCEL_INFO(DisplayGridlines, IS_BOOL)
  2669. }
  2670. /* }}} */
  2671. /* {{{ proto bool ExcelSheet::printGridlines()
  2672. Returns whether the gridlines are printed */
  2673. EXCEL_METHOD(Sheet, printGridlines)
  2674. {
  2675. PHP_EXCEL_INFO(PrintGridlines, IS_BOOL)
  2676. }
  2677. /* }}} */
  2678. /* {{{ proto void ExcelSheet::setDisplayGridlines(bool value)
  2679. Sets gridlines for displaying */
  2680. EXCEL_METHOD(Sheet, setDisplayGridlines)
  2681. {
  2682. PHP_EXCEL_SET_BOOL_VAL(SetDisplayGridlines)
  2683. }
  2684. /* }}} */
  2685. #if LIBXL_VERSION >= 0x03020300
  2686. /* {{{ proto bool ExcelSheet::setHidden(bool value)
  2687. Hides/unhides the sheet. */
  2688. EXCEL_METHOD(Sheet, setHidden)
  2689. {
  2690. SheetHandle sheet;
  2691. zval *object = getThis();
  2692. zend_bool val;
  2693. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &val) == FAILURE) {
  2694. RETURN_FALSE;
  2695. }
  2696. SHEET_FROM_OBJECT(sheet, object);
  2697. RETURN_BOOL(xlSheetSetHidden(sheet, val));
  2698. }
  2699. /* }}} */
  2700. /* {{{ proto bool ExcelSheet::isHidden()
  2701. Returns whether sheet is hidden. */
  2702. EXCEL_METHOD(Sheet, isHidden)
  2703. {
  2704. SheetHandle sheet;
  2705. zval *object = getThis();
  2706. if (zend_parse_parameters_none() == FAILURE) {
  2707. RETURN_FALSE;
  2708. }
  2709. SHEET_FROM_OBJECT(sheet, object);
  2710. RETURN_BOOL(xlSheetHidden(sheet));
  2711. }
  2712. /* }}} */
  2713. #endif
  2714. #if LIBXL_VERSION >= 0x03020400
  2715. /* {{{ proto array ExcelSheet::getTopLeftView()
  2716. Extracts the first visible row and the leftmost visible column of the sheet. */
  2717. EXCEL_METHOD(Sheet, getTopLeftView)
  2718. {
  2719. SheetHandle sheet;
  2720. zval *object = getThis();
  2721. int r = 0, c = 0;
  2722. if (zend_parse_parameters_none() == FAILURE) {
  2723. RETURN_FALSE;
  2724. }
  2725. SHEET_FROM_OBJECT(sheet, object);
  2726. xlSheetGetTopLeftView(sheet, &r, &c);
  2727. array_init(return_value);
  2728. add_assoc_long(return_value, "row", r);
  2729. add_assoc_long(return_value, "column", c);
  2730. }
  2731. /* }}} */
  2732. /* {{{ proto bool ExcelSheet::setTopLeftView(int row, int column)
  2733. Sets the first visible row and the leftmost visible column of the sheet. */
  2734. EXCEL_METHOD(Sheet, setTopLeftView)
  2735. {
  2736. SheetHandle sheet;
  2737. zval *object = getThis();
  2738. long r,c;
  2739. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &r, &c) == FAILURE) {
  2740. RETURN_FALSE;
  2741. }
  2742. SHEET_FROM_OBJECT(sheet, object);
  2743. xlSheetSetTopLeftView(sheet, r, c);
  2744. RETURN_TRUE;
  2745. }
  2746. /* }}} */
  2747. /* {{{ proto string ExcelSheet::rowColToAddr(int row, int col, boolean row_relative, boolean col_relative)
  2748. Converts row and column to a cell reference. */
  2749. EXCEL_METHOD(Sheet, rowColToAddr)
  2750. {
  2751. SheetHandle sheet;
  2752. zval *object = getThis();
  2753. zend_bool row_relative = 1, col_relative = 1;
  2754. long row, col;
  2755. const char *cel_ref;
  2756. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll|bb", &row, &col, &row_relative, &col_relative) == FAILURE) {
  2757. RETURN_FALSE;
  2758. }
  2759. SHEET_FROM_OBJECT(sheet, object);
  2760. cel_ref = xlSheetRowColToAddr(sheet, row, col, row_relative, col_relative);
  2761. if (!cel_ref) {
  2762. RETURN_FALSE;
  2763. }
  2764. RETURN_STRING(cel_ref, 1);
  2765. }
  2766. /* }}} */
  2767. /* {{{ proto array ExcelSheet::addrToRowCol(string cell_reference)
  2768. Converts a cell reference to row and column. */
  2769. EXCEL_METHOD(Sheet, addrToRowCol)
  2770. {
  2771. SheetHandle sheet;
  2772. zval *object = getThis();
  2773. char *cell_reference;
  2774. int cell_reference_len;
  2775. int row = 0, col = 0, rowRelative = 0, colRelative = 0;
  2776. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &cell_reference, &cell_reference_len) == FAILURE) {
  2777. RETURN_FALSE;
  2778. }
  2779. if (!cell_reference_len) {
  2780. php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cell reference cannot be empty");
  2781. RETURN_FALSE;
  2782. }
  2783. SHEET_FROM_OBJECT(sheet, object);
  2784. xlSheetAddrToRowCol(sheet, cell_reference, &row, &col, &rowRelative, &colRelative);
  2785. array_init(return_value);
  2786. add_assoc_long(return_value, "row", row);
  2787. add_assoc_long(return_value, "column", col);
  2788. add_assoc_bool(return_value, "col_relative", colRelative);
  2789. add_assoc_bool(return_value, "row_relative", rowRelative);
  2790. }
  2791. /* }}} */
  2792. #endif
  2793. /* {{{ proto void ExcelSheet::setPrintGridlines(bool value)
  2794. Sets gridlines for printing */
  2795. EXCEL_METHOD(Sheet, setPrintGridlines)
  2796. {
  2797. PHP_EXCEL_SET_BOOL_VAL(SetPrintGridlines)
  2798. }
  2799. /* }}} */
  2800. /* {{{ proto int ExcelSheet::zoom()
  2801. Returns the zoom level of the current view as a percentage. */
  2802. EXCEL_METHOD(Sheet, zoom)
  2803. {
  2804. PHP_EXCEL_INFO(Zoom, IS_LONG)
  2805. }
  2806. /* }}} */
  2807. /* {{{ proto int ExcelSheet::zoomPrint()
  2808. Returns the scaling factor for printing as a percentage. */
  2809. EXCEL_METHOD(Sheet, zoomPrint)
  2810. {
  2811. PHP_EXCEL_INFO(PrintZoom, IS_LONG)
  2812. }
  2813. /* }}} */
  2814. /* {{{ proto void ExcelSheet::setZoom(long value)
  2815. Sets the zoom level of the current view. 100 is a usual view. */
  2816. EXCEL_METHOD(Sheet, setZoom)
  2817. {
  2818. PHP_EXCEL_SET_LONG_VAL(SetZoom)
  2819. }
  2820. /* }}} */
  2821. /* {{{ proto void ExcelSheet::setZoomPrint(long value)
  2822. Sets the scaling factor for printing as a percentage. */
  2823. EXCEL_METHOD(Sheet, setZoomPrint)
  2824. {
  2825. PHP_EXCEL_SET_LONG_VAL(SetPrintZoom)
  2826. }
  2827. /* }}} */
  2828. /* {{{ proto void ExcelSheet::setLandscape(bool value)
  2829. Sets landscape or portrait mode for printing, 1 - pages are printed using landscape mode, 0 - pages are printed using portrait mode. */
  2830. EXCEL_METHOD(Sheet, setLandscape)
  2831. {
  2832. PHP_EXCEL_SET_BOOL_VAL(SetLandscape)
  2833. }
  2834. /* }}} */
  2835. /* {{{ proto bool ExcelSheet::landscape()
  2836. Returns a page orientation mode, 1 - landscape mode, 0 - portrait mode. */
  2837. EXCEL_METHOD(Sheet, landscape)
  2838. {
  2839. PHP_EXCEL_INFO(Landscape, IS_BOOL)
  2840. }
  2841. /* }}} */
  2842. /* {{{ proto int ExcelSheet::paper()
  2843. Returns the paper size. */
  2844. EXCEL_METHOD(Sheet, paper)
  2845. {
  2846. PHP_EXCEL_INFO(Paper, IS_LONG)
  2847. }
  2848. /* }}} */
  2849. /* {{{ proto void ExcelSheet::setPaper(long value)
  2850. Sets the paper size. */
  2851. EXCEL_METHOD(Sheet, setPaper)
  2852. {
  2853. PHP_EXCEL_SET_LONG_VAL(SetPaper)
  2854. }
  2855. /* }}} */
  2856. /* {{{ proto string ExcelSheet::header()
  2857. Returns the header text of the sheet when printed. */
  2858. EXCEL_METHOD(Sheet, header)
  2859. {
  2860. PHP_EXCEL_INFO(Header, IS_STRING)
  2861. }
  2862. /* }}} */
  2863. /* {{{ proto string ExcelSheet::footer()
  2864. Returns the footer text of the sheet when printed. */
  2865. EXCEL_METHOD(Sheet, footer)
  2866. {
  2867. PHP_EXCEL_INFO(Footer, IS_STRING)
  2868. }
  2869. /* }}} */
  2870. #define PHP_EXCEL_SET_HF(func_name) \
  2871. { \
  2872. SheetHandle sheet; \
  2873. zval *object = getThis(); \
  2874. char *val; \
  2875. int val_len; \
  2876. double margin; \
  2877. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sd", &val, &val_len, &margin) == FAILURE || val_len > 255) { \
  2878. RETURN_FALSE; \
  2879. } \
  2880. SHEET_FROM_OBJECT(sheet, object); \
  2881. RETURN_BOOL(xlSheet ## func_name (sheet, val, margin)); \
  2882. }
  2883. /* {{{ proto bool ExcelSheet::setHeader(string header, double margin)
  2884. Sets the header text of the sheet when printed. */
  2885. EXCEL_METHOD(Sheet, setHeader)
  2886. {
  2887. PHP_EXCEL_SET_HF(SetHeader)
  2888. }
  2889. /* }}} */
  2890. /* {{{ proto bool ExcelSheet::setFooter(string footer, double margin)
  2891. Sets the footer text of the sheet when printed. */
  2892. EXCEL_METHOD(Sheet, setFooter)
  2893. {
  2894. PHP_EXCEL_SET_HF(SetFooter)
  2895. }
  2896. /* }}} */
  2897. /* {{{ proto double ExcelSheet::headerMargin()
  2898. Returns the header margin in inches. */
  2899. EXCEL_METHOD(Sheet, headerMargin)
  2900. {
  2901. PHP_EXCEL_INFO(HeaderMargin, IS_DOUBLE)
  2902. }
  2903. /* }}} */
  2904. /* {{{ proto double ExcelSheet::footerMargin()
  2905. Returns the footer margin in inches. */
  2906. EXCEL_METHOD(Sheet, footerMargin)
  2907. {
  2908. PHP_EXCEL_INFO(FooterMargin, IS_DOUBLE)
  2909. }
  2910. /* }}} */
  2911. /* {{{ proto bool ExcelSheet::hcenter()
  2912. Returns whether the sheet is centered horizontally when printed: 1 - yes, 0 - no. */
  2913. EXCEL_METHOD(Sheet, hcenter)
  2914. {
  2915. PHP_EXCEL_INFO(HCenter, IS_BOOL)
  2916. }
  2917. /* }}} */
  2918. /* {{{ proto bool ExcelSheet::vcenter()
  2919. Returns whether the sheet is centered vertically when printed: 1 - yes, 0 - no. */
  2920. EXCEL_METHOD(Sheet, vcenter)
  2921. {
  2922. PHP_EXCEL_INFO(VCenter, IS_BOOL)
  2923. }
  2924. /* }}} */
  2925. /* {{{ proto bool ExcelSheet::setHCenter(bool value)
  2926. Sets a flag that the sheet is centered horizontally when printed: 1 - yes, 0 - no. */
  2927. EXCEL_METHOD(Sheet, setHCenter)
  2928. {
  2929. PHP_EXCEL_SET_BOOL_VAL(SetHCenter)
  2930. }
  2931. /* }}} */
  2932. /* {{{ proto bool ExcelSheet::setVCenter(bool value)
  2933. Sets a flag that the sheet is centered vertically when printed: 1 - yes, 0 - no. */
  2934. EXCEL_METHOD(Sheet, setVCenter)
  2935. {
  2936. PHP_EXCEL_SET_BOOL_VAL(SetVCenter)
  2937. }
  2938. /* }}} */
  2939. /* {{{ proto double ExcelSheet::marginLeft()
  2940. Returns the left margin of the sheet in inches. */
  2941. EXCEL_METHOD(Sheet, marginLeft)
  2942. {
  2943. PHP_EXCEL_INFO(MarginLeft, IS_DOUBLE)
  2944. }
  2945. /* }}} */
  2946. /* {{{ proto double ExcelSheet::marginRight()
  2947. Returns the right margin of the sheet in inches. */
  2948. EXCEL_METHOD(Sheet, marginRight)
  2949. {
  2950. PHP_EXCEL_INFO(MarginRight, IS_DOUBLE)
  2951. }
  2952. /* }}} */
  2953. /* {{{ proto double ExcelSheet::marginTop()
  2954. Returns the top margin of the sheet in inches. */
  2955. EXCEL_METHOD(Sheet, marginTop)
  2956. {
  2957. PHP_EXCEL_INFO(MarginTop, IS_DOUBLE)
  2958. }
  2959. /* }}} */
  2960. /* {{{ proto double ExcelSheet::marginBottom()
  2961. Returns the bottom margin of the sheet in inches. */
  2962. EXCEL_METHOD(Sheet, marginBottom)
  2963. {
  2964. PHP_EXCEL_INFO(MarginBottom, IS_DOUBLE)
  2965. }
  2966. /* }}} */
  2967. /* {{{ proto void ExcelSheet::setMarginLeft(double value)
  2968. Sets the left margin of the sheet in inches. */
  2969. EXCEL_METHOD(Sheet, setMarginLeft)
  2970. {
  2971. PHP_EXCEL_SET_DOUBLE_VAL(SetMarginLeft)
  2972. }
  2973. /* }}} */
  2974. /* {{{ proto void ExcelSheet::setMarginRight(double value)
  2975. Sets the right margin of the sheet in inches. */
  2976. EXCEL_METHOD(Sheet, setMarginRight)
  2977. {
  2978. PHP_EXCEL_SET_DOUBLE_VAL(SetMarginRight)
  2979. }
  2980. /* }}} */
  2981. /* {{{ proto void ExcelSheet::setMarginTop(double value)
  2982. Sets the top margin of the sheet in inches. */
  2983. EXCEL_METHOD(Sheet, setMarginTop)
  2984. {
  2985. PHP_EXCEL_SET_DOUBLE_VAL(SetMarginTop)
  2986. }
  2987. /* }}} */
  2988. /* {{{ proto void ExcelSheet::setMarginBottom(double value)
  2989. Sets the bottom margin of the sheet in inches. */
  2990. EXCEL_METHOD(Sheet, setMarginBottom)
  2991. {
  2992. PHP_EXCEL_SET_DOUBLE_VAL(SetMarginBottom)
  2993. }
  2994. /* }}} */
  2995. /* {{{ proto bool ExcelSheet::printHeaders()
  2996. Returns whether the row and column headers are printed: 1 - yes, 0 - no. */
  2997. EXCEL_METHOD(Sheet, printHeaders)
  2998. {
  2999. PHP_EXCEL_INFO(PrintRowCol, IS_BOOL)
  3000. }
  3001. /* }}} */
  3002. /* {{{ proto bool ExcelSheet::setPrintHeaders(bool value)
  3003. Sets a flag that the row and column headers are printed: 1 - yes, 0 - no. */
  3004. EXCEL_METHOD(Sheet, setPrintHeaders)
  3005. {
  3006. PHP_EXCEL_SET_BOOL_VAL(SetPrintRowCol)
  3007. }
  3008. /* }}} */
  3009. /* {{{ proto string ExcelSheet::name()
  3010. Returns the name of the sheet. */
  3011. EXCEL_METHOD(Sheet, name)
  3012. {
  3013. PHP_EXCEL_INFO(Name, IS_STRING)
  3014. }
  3015. /* }}} */
  3016. /* {{{ proto void ExcelSheet::setName(string name)
  3017. Sets the name of the sheet. */
  3018. EXCEL_METHOD(Sheet, setName)
  3019. {
  3020. SheetHandle sheet;
  3021. zval *object = getThis();
  3022. char *val;
  3023. int val_len;
  3024. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &val, &val_len) == FAILURE) {
  3025. RETURN_FALSE;
  3026. }
  3027. SHEET_FROM_OBJECT(sheet, object);
  3028. xlSheetSetName(sheet, val);
  3029. }
  3030. /* }}} */
  3031. #if LIBXL_VERSION >= 0x03010000
  3032. /* {{{ proto bool ExcelSheet::setNamedRange(string name, int row, int to_row, int col, int to_col [, int scope_id])
  3033. Create a named range */
  3034. EXCEL_METHOD(Sheet, setNamedRange)
  3035. {
  3036. SheetHandle sheet;
  3037. zval *object = getThis();
  3038. long row, to_row, col, to_col;
  3039. char *name;
  3040. int name_len;
  3041. #if LIBXL_VERSION >= 0x03050401
  3042. long scope_id = SCOPE_WORKBOOK;
  3043. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sllll|l", &name, &name_len, &row, &to_row, &col, &to_col, &scope_id) == FAILURE) {
  3044. #else
  3045. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sllll", &name, &name_len, &row, &to_row, &col, &to_col) == FAILURE) {
  3046. #endif
  3047. RETURN_FALSE;
  3048. }
  3049. if (!name_len) {
  3050. php_error_docref(NULL TSRMLS_CC, E_WARNING, "The range name cannot be empty.");
  3051. RETURN_FALSE;
  3052. }
  3053. if (row > to_row) {
  3054. php_error_docref(NULL TSRMLS_CC, E_WARNING, "The range row start cannot be greater than row end.");
  3055. RETURN_FALSE;
  3056. } else if (col > to_col) {
  3057. php_error_docref(NULL TSRMLS_CC, E_WARNING, "The range column start cannot be greater than column end.");
  3058. RETURN_FALSE;
  3059. }
  3060. SHEET_FROM_OBJECT(sheet, object);
  3061. #if LIBXL_VERSION >= 0x03050401
  3062. RETURN_BOOL(xlSheetSetNamedRange(sheet, name, row, to_row, col, to_col, scope_id));
  3063. #else
  3064. RETURN_BOOL(xlSheetSetNamedRange(sheet, name, row, to_row, col, to_col));
  3065. #endif
  3066. }
  3067. /* }}} */
  3068. /* {{{ proto bool ExcelSheet::delNamedRange(string name)
  3069. Delete a named range. */
  3070. EXCEL_METHOD(Sheet, delNamedRange)
  3071. {
  3072. SheetHandle sheet;
  3073. zval *object = getThis();
  3074. char *val;
  3075. int val_len;
  3076. #if LIBXL_VERSION >= 0x03050401
  3077. long scope_id = SCOPE_WORKBOOK;
  3078. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &val, &val_len, &scope_id) == FAILURE) {
  3079. #else
  3080. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &val, &val_len) == FAILURE) {
  3081. #endif
  3082. RETURN_FALSE;
  3083. }
  3084. if (!val_len) {
  3085. php_error_docref(NULL TSRMLS_CC, E_WARNING, "The range name cannot be empty.");
  3086. RETURN_FALSE;
  3087. }
  3088. SHEET_FROM_OBJECT(sheet, object);
  3089. #if LIBXL_VERSION >= 0x03050401
  3090. RETURN_BOOL(xlSheetDelNamedRange(sheet, val, scope_id));
  3091. #else
  3092. RETURN_BOOL(xlSheetDelNamedRange(sheet, val));
  3093. #endif
  3094. }
  3095. /* }}} */
  3096. #define PHP_EXCEL_SHEET_PRINT_AREA(func_name) \
  3097. { \
  3098. SheetHandle sheet; \
  3099. zval *object = getThis(); \
  3100. long s, e; \
  3101. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &s, &e) == FAILURE) { \
  3102. RETURN_FALSE; \
  3103. } \
  3104. if (s > e) { \
  3105. php_error_docref(NULL TSRMLS_CC, E_WARNING, "The range start is greater than the end."); \
  3106. RETURN_FALSE; \
  3107. } \
  3108. SHEET_FROM_OBJECT(sheet, object); \
  3109. xlSheet ## func_name (sheet, s, e); \
  3110. RETURN_TRUE; \
  3111. }
  3112. /* {{{ proto bool ExcelSheet::setPrintRepeatRows(int rowFirst, int rowLast)
  3113. Sets repeated rows on each page from rowFirst to rowLast. */
  3114. EXCEL_METHOD(Sheet, setPrintRepeatRows)
  3115. {
  3116. PHP_EXCEL_SHEET_PRINT_AREA(SetPrintRepeatRows)
  3117. }
  3118. /* }}} */
  3119. /* {{{ proto bool ExcelSheet::setPrintRepeatCols(int colFirst, int colLast)
  3120. Sets repeated columns on each page from colFirst to colLast. */
  3121. EXCEL_METHOD(Sheet, setPrintRepeatCols)
  3122. {
  3123. PHP_EXCEL_SHEET_PRINT_AREA(SetPrintRepeatCols)
  3124. }
  3125. /* }}} */
  3126. /* {{{ proto bool ExcelSheet::getGroupSummaryBelow()
  3127. Returns whether grouping rows summary is below. Returns 1 if summary is below and 0 if isn't. */
  3128. EXCEL_METHOD(Sheet, getGroupSummaryBelow)
  3129. {
  3130. SheetHandle sheet;
  3131. zval *object = getThis();
  3132. if (ZEND_NUM_ARGS()) {
  3133. RETURN_FALSE;
  3134. }
  3135. SHEET_FROM_OBJECT(sheet, object);
  3136. RETURN_BOOL(xlSheetGroupSummaryBelow(sheet));
  3137. }
  3138. /* }}} */
  3139. /* {{{ proto bool ExcelSheet::setGroupSummaryBelow(bool direction)
  3140. Sets a flag of grouping rows summary: 1 - below, 0 - above. */
  3141. EXCEL_METHOD(Sheet, setGroupSummaryBelow)
  3142. {
  3143. SheetHandle sheet;
  3144. zval *object = getThis();
  3145. zend_bool val;
  3146. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &val) == FAILURE) {
  3147. RETURN_FALSE;
  3148. }
  3149. SHEET_FROM_OBJECT(sheet, object);
  3150. xlSheetSetGroupSummaryBelow(sheet, val);
  3151. RETURN_TRUE;
  3152. }
  3153. /* }}} */
  3154. /* {{{ proto bool ExcelSheet::getGroupSummaryRight()
  3155. Returns whether grouping columns summary is right. Returns 1 if summary is right and 0 if isn't. */
  3156. EXCEL_METHOD(Sheet, getGroupSummaryRight)
  3157. {
  3158. SheetHandle sheet;
  3159. zval *object = getThis();
  3160. if (ZEND_NUM_ARGS()) {
  3161. RETURN_FALSE;
  3162. }
  3163. SHEET_FROM_OBJECT(sheet, object);
  3164. RETURN_BOOL(xlSheetGroupSummaryRight(sheet));
  3165. }
  3166. /* }}} */
  3167. /* {{{ proto bool ExcelSheet::setGroupSummaryRight(bool direction)
  3168. Sets a flag of grouping columns summary: 1 - right, 0 - left. */
  3169. EXCEL_METHOD(Sheet, setGroupSummaryRight)
  3170. {
  3171. SheetHandle sheet;
  3172. zval *object = getThis();
  3173. zend_bool val;
  3174. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &val) == FAILURE) {
  3175. RETURN_FALSE;
  3176. }
  3177. SHEET_FROM_OBJECT(sheet, object);
  3178. xlSheetSetGroupSummaryRight(sheet, val);
  3179. RETURN_TRUE;
  3180. }
  3181. /* }}} */
  3182. #if LIBXL_VERSION >= 0x03020000
  3183. /* {{{ proto bool ExcelSheet::setPrintFit(int wPages, int hPages)
  3184. Fits sheet width and sheet height to wPages and hPages respectively. */
  3185. EXCEL_METHOD(Sheet, setPrintFit)
  3186. {
  3187. SheetHandle sheet;
  3188. zval *object = getThis();
  3189. long wPages, hPages;
  3190. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &wPages, &hPages) == FAILURE) {
  3191. RETURN_FALSE;
  3192. }
  3193. SHEET_FROM_OBJECT(sheet, object);
  3194. xlSheetSetPrintFit(sheet, wPages, hPages);
  3195. RETURN_TRUE;
  3196. }
  3197. /* }}} */
  3198. /* {{{ proto mixed ExcelSheet::getPrintFit()
  3199. Returns whether fit to page option is enabled, and if so to what width & height */
  3200. EXCEL_METHOD(Sheet, getPrintFit)
  3201. {
  3202. SheetHandle sheet;
  3203. zval *object = getThis();
  3204. int wPages, hPages;
  3205. if (ZEND_NUM_ARGS()) {
  3206. RETURN_FALSE;
  3207. }
  3208. SHEET_FROM_OBJECT(sheet, object);
  3209. if (xlSheetGetPrintFit(sheet, &wPages, &hPages)) {
  3210. array_init(return_value);
  3211. add_assoc_long(return_value, "width", wPages);
  3212. add_assoc_long(return_value, "height", hPages);
  3213. } else {
  3214. RETURN_FALSE;
  3215. }
  3216. }
  3217. /* }}} */
  3218. /* {{{ proto array ExcelSheet::getNamedRange(string name [, int scope_id])
  3219. Gets the named range coordinates by name, returns false if range is not found. */
  3220. EXCEL_METHOD(Sheet, getNamedRange)
  3221. {
  3222. SheetHandle sheet;
  3223. zval *object = getThis();
  3224. char *name;
  3225. int name_len;
  3226. int rf, rl, cf, cl;
  3227. #if LIBXL_VERSION >= 0x03050401
  3228. long scope_id = SCOPE_WORKBOOK;
  3229. int hidden = 0;
  3230. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &name, &name_len, &scope_id) == FAILURE) {
  3231. #else
  3232. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
  3233. #endif
  3234. RETURN_FALSE;
  3235. }
  3236. SHEET_FROM_OBJECT(sheet, object);
  3237. #if LIBXL_VERSION >= 0x03050401
  3238. if (xlSheetGetNamedRange(sheet, name, &rf, &rl, &cf, &cl, scope_id, &hidden)) {
  3239. #else
  3240. if (xlSheetGetNamedRange(sheet, name, &rf, &rl, &cf, &cl)) {
  3241. #endif
  3242. array_init(return_value);
  3243. add_assoc_long(return_value, "row_first", rf);
  3244. add_assoc_long(return_value, "row_last", rl);
  3245. add_assoc_long(return_value, "col_first", cf);
  3246. add_assoc_long(return_value, "col_last", cl);
  3247. #if LIBXL_VERSION >= 0x03050401
  3248. add_assoc_bool(return_value, "hidden", hidden);
  3249. #endif
  3250. } else {
  3251. RETURN_FALSE;
  3252. }
  3253. }
  3254. /* {{{ proto array ExcelSheet::getIndexRange(int index [, int scope_id])
  3255. Gets the named range coordinates by index, returns false if range is not found. */
  3256. EXCEL_METHOD(Sheet, getIndexRange)
  3257. {
  3258. SheetHandle sheet;
  3259. zval *object = getThis();
  3260. long index;
  3261. int rf, rl, cf, cl;
  3262. #if LIBXL_VERSION >= 0x03050401
  3263. int hidden;
  3264. long scope_id = SCOPE_WORKBOOK;
  3265. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &index, &scope_id) == FAILURE) {
  3266. RETURN_FALSE;
  3267. }
  3268. #else
  3269. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &index) == FAILURE) {
  3270. RETURN_FALSE;
  3271. }
  3272. #endif
  3273. SHEET_FROM_OBJECT(sheet, object);
  3274. #if LIBXL_VERSION >= 0x03050401
  3275. if (xlSheetNamedRange(sheet, (int)index, &rf, &rl, &cf, &cl, (int *)&scope_id, &hidden)) {
  3276. #else
  3277. if (xlSheetNamedRange(sheet, (int)index, &rf, &rl, &cf, &cl)) {
  3278. #endif
  3279. array_init(return_value);
  3280. add_assoc_long(return_value, "row_first", rf);
  3281. add_assoc_long(return_value, "row_last", rl);
  3282. add_assoc_long(return_value, "col_first", cf);
  3283. add_assoc_long(return_value, "col_last", cl);
  3284. #if LIBXL_VERSION >= 0x03050401
  3285. add_assoc_bool(return_value, "hidden", hidden);
  3286. add_assoc_long(return_value, "scope", scope_id);
  3287. #endif
  3288. } else {
  3289. RETURN_FALSE;
  3290. }
  3291. }
  3292. /* }}} */
  3293. /* {{{ proto long ExcelSheet::namedRangeSize()
  3294. Returns the number of named ranges in the sheet. */
  3295. EXCEL_METHOD(Sheet, namedRangeSize)
  3296. {
  3297. SheetHandle sheet;
  3298. zval *object = getThis();
  3299. if (ZEND_NUM_ARGS()) {
  3300. RETURN_FALSE;
  3301. }
  3302. SHEET_FROM_OBJECT(sheet, object);
  3303. RETURN_LONG(xlSheetNamedRangeSize(sheet));
  3304. }
  3305. /* }}} */
  3306. /* {{{ proto long ExcelSheet::getVerPageBreak(int index)
  3307. Returns column with vertical page break at position index. */
  3308. EXCEL_METHOD(Sheet, getVerPageBreak)
  3309. {
  3310. SheetHandle sheet;
  3311. zval *object = getThis();
  3312. long index;
  3313. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &index) == FAILURE) {
  3314. RETURN_FALSE;
  3315. }
  3316. SHEET_FROM_OBJECT(sheet, object);
  3317. RETURN_LONG(xlSheetGetVerPageBreak(sheet, index));
  3318. }
  3319. /* }}} */
  3320. /* {{{ proto long ExcelSheet::getVerPageBreakSize()
  3321. Returns a number of vertical page breaks in the sheet. */
  3322. EXCEL_METHOD(Sheet, getVerPageBreakSize)
  3323. {
  3324. SheetHandle sheet;
  3325. zval *object = getThis();
  3326. if (ZEND_NUM_ARGS()) {
  3327. RETURN_FALSE;
  3328. }
  3329. SHEET_FROM_OBJECT(sheet, object);
  3330. RETURN_LONG(xlSheetGetVerPageBreakSize(sheet));
  3331. }
  3332. /* }}} */
  3333. /* {{{ proto long ExcelSheet::getHorPageBreak(int index)
  3334. Returns column with horizontal page break at position index. */
  3335. EXCEL_METHOD(Sheet, getHorPageBreak)
  3336. {
  3337. SheetHandle sheet;
  3338. zval *object = getThis();
  3339. long index;
  3340. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &index) == FAILURE) {
  3341. RETURN_FALSE;
  3342. }
  3343. SHEET_FROM_OBJECT(sheet, object);
  3344. RETURN_LONG(xlSheetGetHorPageBreak(sheet, index));
  3345. }
  3346. /* }}} */
  3347. /* {{{ proto long ExcelSheet::getHorPageBreakSize()
  3348. Returns a number of horizontal page breaks in the sheet. */
  3349. EXCEL_METHOD(Sheet, getHorPageBreakSize)
  3350. {
  3351. SheetHandle sheet;
  3352. zval *object = getThis();
  3353. if (ZEND_NUM_ARGS()) {
  3354. RETURN_FALSE;
  3355. }
  3356. SHEET_FROM_OBJECT(sheet, object);
  3357. RETURN_LONG(xlSheetGetHorPageBreakSize(sheet));
  3358. }
  3359. /* }}} */
  3360. /* {{{ proto array ExcelSheet::getPictureInfo(int index)
  3361. Returns a information about a workbook picture at position index in worksheet. */
  3362. EXCEL_METHOD(Sheet, getPictureInfo)
  3363. {
  3364. SheetHandle sheet;
  3365. zval *object = getThis();
  3366. long index;
  3367. int rowTop, colLeft, rowBottom, colRight, width, height, offset_x, offset_y;
  3368. int pic_index;
  3369. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &index) == FAILURE) {
  3370. RETURN_FALSE;
  3371. }
  3372. SHEET_FROM_OBJECT(sheet, object);
  3373. if ((pic_index = xlSheetGetPicture(sheet, (int)index, &rowTop, &colLeft, &rowBottom, &colRight, &width, &height, &offset_x, &offset_y)) == -1) {
  3374. RETURN_FALSE;
  3375. }
  3376. array_init(return_value);
  3377. add_assoc_long(return_value, "picture_index", pic_index);
  3378. add_assoc_long(return_value, "row_top", rowTop);
  3379. add_assoc_long(return_value, "col_left", colLeft);
  3380. add_assoc_long(return_value, "row_bottom", rowBottom);
  3381. add_assoc_long(return_value, "col_right", colRight);
  3382. add_assoc_long(return_value, "width", width);
  3383. add_assoc_long(return_value, "height", height);
  3384. add_assoc_long(return_value, "offset_x", offset_x);
  3385. add_assoc_long(return_value, "offset_y", offset_y);
  3386. }
  3387. /* }}} */
  3388. /* {{{ proto long ExcelSheet::getNumPictures()
  3389. Returns a number of pictures in this worksheet. */
  3390. EXCEL_METHOD(Sheet, getNumPictures)
  3391. {
  3392. SheetHandle sheet;
  3393. zval *object = getThis();
  3394. if (ZEND_NUM_ARGS()) {
  3395. RETURN_FALSE;
  3396. }
  3397. SHEET_FROM_OBJECT(sheet, object);
  3398. RETURN_LONG(xlSheetPictureSize(sheet));
  3399. }
  3400. /* }}} */
  3401. /* {{{ proto long ExcelBook::biffVersion()
  3402. Returns BIFF version of binary file. Used for xls format only. */
  3403. EXCEL_METHOD(Book, biffVersion)
  3404. {
  3405. BookHandle book;
  3406. zval *object = getThis();
  3407. int version;
  3408. if (ZEND_NUM_ARGS()) {
  3409. RETURN_FALSE;
  3410. }
  3411. BOOK_FROM_OBJECT(book, object);
  3412. if ((version = xlBookBiffVersion(book))) {
  3413. RETURN_LONG(version);
  3414. } else {
  3415. RETURN_FALSE;
  3416. }
  3417. }
  3418. /* }}} */
  3419. /* {{{ proto bool ExcelBook::getRefR1C1()
  3420. Returns whether the R1C1 reference mode is active. */
  3421. EXCEL_METHOD(Book, getRefR1C1)
  3422. {
  3423. BookHandle book;
  3424. zval *object = getThis();
  3425. if (ZEND_NUM_ARGS()) {
  3426. RETURN_FALSE;
  3427. }
  3428. BOOK_FROM_OBJECT(book, object);
  3429. RETURN_BOOL(xlBookRefR1C1(book));
  3430. }
  3431. /* }}} */
  3432. /* {{{ proto void ExcelBook::setRefR1C1(bool active)
  3433. Sets the R1C1 reference mode. */
  3434. EXCEL_METHOD(Book, setRefR1C1)
  3435. {
  3436. BookHandle book;
  3437. zval *object = getThis();
  3438. zend_bool active;
  3439. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &active) == FAILURE) {
  3440. RETURN_FALSE;
  3441. }
  3442. BOOK_FROM_OBJECT(book, object);
  3443. xlBookSetRefR1C1(book, (int)active);
  3444. }
  3445. /* }}} */
  3446. /* {{{ proto array ExcelBook::getPicture(int picture_index)
  3447. Returns a picture at position index. */
  3448. EXCEL_METHOD(Book, getPicture)
  3449. {
  3450. BookHandle book;
  3451. zval *object = getThis();
  3452. long index;
  3453. int type;
  3454. const char *buf;
  3455. unsigned int buf_len;
  3456. enum PictureType {PICTURETYPE_PNG, PICTURETYPE_JPEG, PICTURETYPE_WMF, PICTURETYPE_DIB, PICTURETYPE_EMF, PICTURETYPE_PICT, PICTURETYPE_TIFF, PICTURETYPE_ERROR = 0xFF};
  3457. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &index) == FAILURE) {
  3458. RETURN_FALSE;
  3459. }
  3460. BOOK_FROM_OBJECT(book, object);
  3461. if ((type = xlBookGetPicture(book, (int)index, &buf, &buf_len)) == PICTURETYPE_ERROR) {
  3462. RETURN_FALSE;
  3463. }
  3464. array_init(return_value);
  3465. add_assoc_stringl(return_value, "data", (char *)buf, buf_len, 1);
  3466. add_assoc_long(return_value, "type", type);
  3467. }
  3468. /* }}} */
  3469. /* {{{ proto long ExcelBook::getNumPictures()
  3470. Returns a number of pictures in this workbook. */
  3471. EXCEL_METHOD(Book, getNumPictures)
  3472. {
  3473. BookHandle book;
  3474. zval *object = getThis();
  3475. if (ZEND_NUM_ARGS()) {
  3476. RETURN_FALSE;
  3477. }
  3478. BOOK_FROM_OBJECT(book, object);
  3479. RETURN_LONG(xlBookPictureSize(book));
  3480. }
  3481. /* }}} */
  3482. /* {{{ proto ExcelSheet ExcelBook::insertSheet(int index, string name [, ExcelSheet sh])
  3483. Inserts a new sheet to this book at position index, returns the sheet handle. Set initSheet to 0 if you wish to add a new empty sheet or use existing sheet's handle for copying. */
  3484. EXCEL_METHOD(Book, insertSheet)
  3485. {
  3486. BookHandle book;
  3487. zval *object = getThis();
  3488. zval *shz = NULL;
  3489. SheetHandle sh, sheet;
  3490. excel_sheet_object *fo;
  3491. char *name;
  3492. int name_len;
  3493. long index;
  3494. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls|o", &index, &name, &name_len, &shz) == FAILURE) {
  3495. RETURN_FALSE;
  3496. }
  3497. BOOK_FROM_OBJECT(book, object);
  3498. if (shz) {
  3499. SHEET_FROM_OBJECT(sheet, shz);
  3500. if (!(sh = xlBookInsertSheet(book, index, name, sheet))) {
  3501. RETURN_FALSE;
  3502. }
  3503. } else {
  3504. if (!(sh = xlBookInsertSheet(book, index, name, 0))) {
  3505. RETURN_FALSE;
  3506. }
  3507. }
  3508. Z_TYPE_P(return_value) = IS_OBJECT;
  3509. object_init_ex(return_value, excel_ce_sheet);
  3510. Z_SET_REFCOUNT_P(return_value, 1);
  3511. Z_SET_ISREF_P(return_value);
  3512. fo = (excel_sheet_object *) zend_object_store_get_object(return_value TSRMLS_CC);
  3513. fo->sheet = sh;
  3514. fo->book = book;
  3515. }
  3516. /* }}} */
  3517. #endif
  3518. #if LIBXL_VERSION >= 0x03050401
  3519. /* {{{ proto bool ExcelBook::isTemplate()
  3520. Returns whether the workbook is template. */
  3521. EXCEL_METHOD(Book, isTemplate)
  3522. {
  3523. BookHandle book;
  3524. zval *object = getThis();
  3525. if (ZEND_NUM_ARGS()) {
  3526. RETURN_FALSE;
  3527. }
  3528. BOOK_FROM_OBJECT(book, object);
  3529. RETURN_BOOL(xlBookIsTemplate(book));
  3530. }
  3531. /* }}} */
  3532. /* {{{ proto void ExcelBook::setTemplate(bool mode)
  3533. Sets the template flag, if the workbook is template. */
  3534. EXCEL_METHOD(Book, setTemplate)
  3535. {
  3536. BookHandle book;
  3537. zval *object = getThis();
  3538. zend_bool mode;
  3539. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &mode) == FAILURE) {
  3540. RETURN_FALSE;
  3541. }
  3542. BOOK_FROM_OBJECT(book, object);
  3543. xlBookSetTemplate(book, (int)mode);
  3544. }
  3545. /* }}} */
  3546. /* {{{ proto long ExcelSheet::getRightToLeft()
  3547. Returns whether the text is displayed in right-to-left mode: 1 - yes, 0 - no. */
  3548. EXCEL_METHOD(Sheet, getRightToLeft)
  3549. {
  3550. SheetHandle sheet;
  3551. zval *object = getThis();
  3552. if (ZEND_NUM_ARGS()) {
  3553. RETURN_FALSE;
  3554. }
  3555. SHEET_FROM_OBJECT(sheet, object);
  3556. RETURN_LONG(xlSheetRightToLeft(sheet));
  3557. }
  3558. /* }}} */
  3559. /* {{{ proto void ExcelBook::setRightToLeft(bool mode)
  3560. Sets the right-to-left mode: 1 - the text is displayed in right-to-left mode, 0 - the text is displayed in left-to-right mode. */
  3561. EXCEL_METHOD(Sheet, setRightToLeft)
  3562. {
  3563. SheetHandle sheet;
  3564. zval *object = getThis();
  3565. long mode;
  3566. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &mode) == FAILURE) {
  3567. RETURN_FALSE;
  3568. }
  3569. SHEET_FROM_OBJECT(sheet, object);
  3570. xlSheetSetRightToLeft(sheet, (int)mode);
  3571. }
  3572. /* }}} */
  3573. #endif
  3574. /* {{{ proto bool ExcelSheet::setPrintArea()
  3575. Sets the print area. */
  3576. EXCEL_METHOD(Sheet, setPrintArea)
  3577. {
  3578. zval *object = getThis();
  3579. SheetHandle sheet;
  3580. long row, col, to_row, to_col;
  3581. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &row, &to_row, &col, &to_col) == FAILURE) {
  3582. RETURN_FALSE;
  3583. }
  3584. if (row > to_row) {
  3585. php_error_docref(NULL TSRMLS_CC, E_WARNING, "The range row start cannot be greater than row end.");
  3586. RETURN_FALSE;
  3587. } else if (col > to_col) {
  3588. php_error_docref(NULL TSRMLS_CC, E_WARNING, "The range column start cannot be greater than column end.");
  3589. RETURN_FALSE;
  3590. }
  3591. SHEET_FROM_OBJECT(sheet, object);
  3592. xlSheetSetPrintArea(sheet, row, to_row, col, to_col);
  3593. RETURN_TRUE;
  3594. }
  3595. /* }}} */
  3596. /* {{{ proto bool ExcelSheet::clearPrintRepeats()
  3597. Clears repeated rows and columns on each page. */
  3598. EXCEL_METHOD(Sheet, clearPrintRepeats)
  3599. {
  3600. zval *object = getThis();
  3601. SheetHandle sheet;
  3602. if (ZEND_NUM_ARGS()) {
  3603. RETURN_FALSE;
  3604. }
  3605. SHEET_FROM_OBJECT(sheet, object);
  3606. xlSheetClearPrintRepeats(sheet);
  3607. RETURN_TRUE;
  3608. }
  3609. /* }}} */
  3610. /* {{{ proto bool ExcelSheet::clearPrintArea()
  3611. Clears the print area. */
  3612. EXCEL_METHOD(Sheet, clearPrintArea)
  3613. {
  3614. zval *object = getThis();
  3615. SheetHandle sheet;
  3616. if (ZEND_NUM_ARGS()) {
  3617. RETURN_FALSE;
  3618. }
  3619. SHEET_FROM_OBJECT(sheet, object);
  3620. xlSheetClearPrintArea(sheet);
  3621. RETURN_TRUE;
  3622. }
  3623. /* }}} */
  3624. #endif
  3625. /* {{{ proto bool ExcelSheet::protect()
  3626. Returns whether sheet is protected: 1 - yes, 0 - no. */
  3627. EXCEL_METHOD(Sheet, protect)
  3628. {
  3629. PHP_EXCEL_INFO(Protect, IS_BOOL)
  3630. }
  3631. /* }}} */
  3632. /* {{{ proto void ExcelSheet::setProtect(bool value)
  3633. Protects (protect = 1) or unprotects (protect = 0) the sheet. */
  3634. EXCEL_METHOD(Sheet, setProtect)
  3635. {
  3636. PHP_EXCEL_SET_BOOL_VAL(SetProtect)
  3637. }
  3638. /* }}} */
  3639. #if LIBXL_VERSION >= 0x03060000
  3640. /* {{{ proto long ExcelSheet::hyperlinkSize()
  3641. Returns the number of hyperlinks in the sheet. */
  3642. EXCEL_METHOD(Sheet, hyperlinkSize)
  3643. {
  3644. zval *object = getThis();
  3645. SheetHandle sheet;
  3646. if (ZEND_NUM_ARGS()) {
  3647. RETURN_FALSE;
  3648. }
  3649. SHEET_FROM_OBJECT(sheet, object);
  3650. RETURN_LONG(xlSheetHyperlinkSize(sheet));
  3651. }
  3652. /* }}} */
  3653. /* {{{ proto array ExcelSheet::hyperlink(int index)
  3654. Gets the hyperlink and its coordinates by index. */
  3655. EXCEL_METHOD(Sheet, hyperlink)
  3656. {
  3657. SheetHandle sheet;
  3658. zval *object = getThis();
  3659. long index;
  3660. int rowFirst, rowLast, colFirst, colLast;
  3661. const char *s;
  3662. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &index) == FAILURE) {
  3663. RETURN_FALSE;
  3664. }
  3665. SHEET_FROM_OBJECT(sheet, object);
  3666. s = xlSheetHyperlink(sheet, index, &rowFirst, &rowLast, &colFirst, &colLast);
  3667. if (!s) {
  3668. RETURN_FALSE;
  3669. }
  3670. array_init(return_value);
  3671. add_assoc_string(return_value, "hyperlink", (char *)s, 1);
  3672. add_assoc_long(return_value, "row_first", rowFirst);
  3673. add_assoc_long(return_value, "row_last", rowLast);
  3674. add_assoc_long(return_value, "col_first", colFirst);
  3675. add_assoc_long(return_value, "col_last", colLast);
  3676. }
  3677. /* }}} */
  3678. /* {{{ proto bool ExcelSheet::delHyperlink(int index)
  3679. Removes hyperlink by index. */
  3680. EXCEL_METHOD(Sheet, delHyperlink)
  3681. {
  3682. zval *object = getThis();
  3683. SheetHandle sheet;
  3684. long index;
  3685. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &index) == FAILURE) {
  3686. RETURN_FALSE;
  3687. }
  3688. if (index < 0) {
  3689. RETURN_FALSE;
  3690. }
  3691. SHEET_FROM_OBJECT(sheet, object);
  3692. RETURN_BOOL(xlSheetDelHyperlink(sheet, index));
  3693. }
  3694. /* }}} */
  3695. /* {{{ proto void ExcelSheet::addHyperlink(string hyperlink, int row_first, int row_last, int col_first, int col_last)
  3696. Adds the new hyperlink. */
  3697. EXCEL_METHOD(Sheet, addHyperlink)
  3698. {
  3699. SheetHandle sheet;
  3700. zval *object = getThis();
  3701. char *val;
  3702. int val_len;
  3703. long row_first, row_last, col_first, col_last;
  3704. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sllll", &val, &val_len, &row_first, &row_last, &col_first, &col_last) == FAILURE) {
  3705. RETURN_FALSE;
  3706. }
  3707. SHEET_FROM_OBJECT(sheet, object);
  3708. xlSheetAddHyperlink(sheet, val, row_first, row_last, col_first, col_last);
  3709. RETURN_TRUE;
  3710. }
  3711. /* }}} */
  3712. /* {{{ proto long ExcelSheet::mergeSize()
  3713. Returns a number of merged cells in this worksheet. */
  3714. EXCEL_METHOD(Sheet, mergeSize)
  3715. {
  3716. zval *object = getThis();
  3717. SheetHandle sheet;
  3718. if (ZEND_NUM_ARGS()) {
  3719. RETURN_FALSE;
  3720. }
  3721. SHEET_FROM_OBJECT(sheet, object);
  3722. RETURN_LONG(xlSheetMergeSize(sheet));
  3723. }
  3724. /* }}} */
  3725. /* {{{ proto array ExcelSheet::merge(int index)
  3726. Gets the merged cells by index. */
  3727. EXCEL_METHOD(Sheet, merge)
  3728. {
  3729. SheetHandle sheet;
  3730. zval *object = getThis();
  3731. long index;
  3732. int rowFirst, rowLast, colFirst, colLast;
  3733. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &index) == FAILURE) {
  3734. RETURN_FALSE;
  3735. }
  3736. if (index < 0) {
  3737. RETURN_FALSE;
  3738. }
  3739. SHEET_FROM_OBJECT(sheet, object);
  3740. if (!xlSheetMerge(sheet, index, &rowFirst, &rowLast, &colFirst, &colLast)) {
  3741. RETURN_FALSE;
  3742. }
  3743. array_init(return_value);
  3744. add_assoc_long(return_value, "row_first", rowFirst);
  3745. add_assoc_long(return_value, "row_last", rowLast);
  3746. add_assoc_long(return_value, "col_first", colFirst);
  3747. add_assoc_long(return_value, "col_last", colLast);
  3748. }
  3749. /* }}} */
  3750. /* {{{ proto bool ExcelSheet::delMergeByIndex(int index)
  3751. Removes merged cells by index. */
  3752. EXCEL_METHOD(Sheet, delMergeByIndex)
  3753. {
  3754. zval *object = getThis();
  3755. SheetHandle sheet;
  3756. long index;
  3757. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &index) == FAILURE) {
  3758. RETURN_FALSE;
  3759. }
  3760. if (index < 0) {
  3761. RETURN_FALSE;
  3762. }
  3763. SHEET_FROM_OBJECT(sheet, object);
  3764. RETURN_BOOL(xlSheetDelMergeByIndex(sheet, index));
  3765. }
  3766. /* }}} */
  3767. /* {{{ proto bool ExcelSheet::splitInfo()
  3768. Gets the split information (position of frozen pane) in the sheet: row - vertical position of the split; col - horizontal position of the split. */
  3769. EXCEL_METHOD(Sheet, splitInfo)
  3770. {
  3771. SheetHandle sheet;
  3772. zval *object = getThis();
  3773. int row, col;
  3774. SHEET_FROM_OBJECT(sheet, object);
  3775. if (!xlSheetSplitInfo(sheet, &row, &col)) {
  3776. RETURN_FALSE;
  3777. }
  3778. array_init(return_value);
  3779. add_assoc_long(return_value, "row", row);
  3780. add_assoc_long(return_value, "col", col);
  3781. }
  3782. /* }}} */
  3783. /* {{{ proto bool ExcelSheet::rowHidden(int row)
  3784. Returns whether row is hidden. */
  3785. EXCEL_METHOD(Sheet, rowHidden)
  3786. {
  3787. zval *object = getThis();
  3788. SheetHandle sheet;
  3789. long row;
  3790. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &row) == FAILURE) {
  3791. RETURN_FALSE;
  3792. }
  3793. if (row < 0) {
  3794. RETURN_FALSE;
  3795. }
  3796. SHEET_FROM_OBJECT(sheet, object);
  3797. RETURN_BOOL(xlSheetRowHidden(sheet, row));
  3798. }
  3799. /* }}} */
  3800. /* {{{ proto bool ExcelSheet::setRowHidden(int row, bool hidden)
  3801. Hides row. */
  3802. EXCEL_METHOD(Sheet, setRowHidden)
  3803. {
  3804. zval *object = getThis();
  3805. SheetHandle sheet;
  3806. long row;
  3807. zend_bool hidden;
  3808. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lb", &row, &hidden) == FAILURE) {
  3809. RETURN_FALSE;
  3810. }
  3811. if (row < 0) {
  3812. RETURN_FALSE;
  3813. }
  3814. SHEET_FROM_OBJECT(sheet, object);
  3815. RETURN_BOOL(xlSheetSetRowHidden(sheet, row, hidden));
  3816. }
  3817. /* }}} */
  3818. /* {{{ proto bool ExcelSheet::colHidden(int col)
  3819. Returns whether column is hidden. */
  3820. EXCEL_METHOD(Sheet, colHidden)
  3821. {
  3822. zval *object = getThis();
  3823. SheetHandle sheet;
  3824. long col;
  3825. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &col) == FAILURE) {
  3826. RETURN_FALSE;
  3827. }
  3828. if (col < 0) {
  3829. RETURN_FALSE;
  3830. }
  3831. SHEET_FROM_OBJECT(sheet, object);
  3832. RETURN_BOOL(xlSheetColHidden(sheet, col));
  3833. }
  3834. /* }}} */
  3835. /* {{{ proto bool ExcelSheet::setColHidden(int col, bool hidden)
  3836. Hides column. */
  3837. EXCEL_METHOD(Sheet, setColHidden)
  3838. {
  3839. zval *object = getThis();
  3840. SheetHandle sheet;
  3841. long col;
  3842. zend_bool hidden;
  3843. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lb", &col, &hidden) == FAILURE) {
  3844. RETURN_FALSE;
  3845. }
  3846. if (col < 0) {
  3847. RETURN_FALSE;
  3848. }
  3849. SHEET_FROM_OBJECT(sheet, object);
  3850. RETURN_BOOL(xlSheetSetColHidden(sheet, col, hidden));
  3851. }
  3852. /* }}} */
  3853. /* {{{ proto long ExcelBook::sheetType(int sheet)
  3854. Returns type of sheet with specified index. */
  3855. EXCEL_METHOD(Book, sheetType)
  3856. {
  3857. zval *object = getThis();
  3858. BookHandle book;
  3859. long index;
  3860. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &index) == FAILURE) {
  3861. RETURN_FALSE;
  3862. }
  3863. if (index < 0) {
  3864. RETURN_FALSE;
  3865. }
  3866. BOOK_FROM_OBJECT(book, object);
  3867. RETURN_LONG(xlBookSheetType(book, index));
  3868. }
  3869. /* }}} */
  3870. #endif
  3871. /* {{{ proto bool ExcelSheet::isLicensed()
  3872. Get license status */
  3873. EXCEL_METHOD(Sheet, isLicensed)
  3874. {
  3875. char *err;
  3876. zval *object = getThis();
  3877. SheetHandle sheet;
  3878. BookHandle book;
  3879. SHEET_AND_BOOK_FROM_OBJECT(sheet, book, object);
  3880. xlSheetCellFormat(sheet, 0, 0);
  3881. err = (char *)xlBookErrorMessage(book);
  3882. if (err) {
  3883. // on Linux
  3884. if (!strcmp(err, "can't get access to format in row 0 in trial version")) {
  3885. RETURN_FALSE;
  3886. }
  3887. // on Win
  3888. if (!strcmp(err, "can't access row 0 in trial version")) {
  3889. RETURN_FALSE;
  3890. }
  3891. }
  3892. RETURN_TRUE;
  3893. }
  3894. /* }}} */
  3895. #if LIBXL_VERSION >= 0x03060200
  3896. /* {{{ proto void ExcelSheet::setAutoFitArea(int rowFirst, int colFirst, int rowLast, int colLast)
  3897. Sets the borders for autofit column widths feature.
  3898. The function xlSheetSetCol() with -1 width value will
  3899. affect only to the specified limited area. */
  3900. EXCEL_METHOD(Sheet, setAutoFitArea)
  3901. {
  3902. zval *object = getThis();
  3903. SheetHandle sheet;
  3904. long rowFirst=0, colFirst=0, rowLast=-1, colLast=-1;
  3905. if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|llll", &rowFirst, &rowLast, &colFirst, &colLast) == FAILURE) {
  3906. RETURN_FALSE;
  3907. }
  3908. if (rowFirst < 0) {
  3909. RETURN_FALSE;
  3910. }
  3911. if (colFirst < 0) {
  3912. RETURN_FALSE;
  3913. }
  3914. if (rowLast < -1) {
  3915. RETURN_FALSE;
  3916. }
  3917. if (colLast < -1) {
  3918. RETURN_FALSE;
  3919. }
  3920. SHEET_FROM_OBJECT(sheet, object);
  3921. xlSheetSetAutoFitArea(sheet, rowFirst, colFirst, rowLast, colLast);
  3922. RETURN_TRUE;
  3923. }
  3924. /* }}} */
  3925. /* {{{ proto long ExcelSheet::printRepeatRows()
  3926. Gets repeated rows on each page from rowFirst to rowLast.
  3927. Returns 0 if repeated rows aren't found. */
  3928. EXCEL_METHOD(Sheet, printRepeatRows)
  3929. {
  3930. zval *object = getThis();
  3931. SheetHandle sheet;
  3932. int rowFirst, rowLast;
  3933. if (ZEND_NUM_ARGS()) {
  3934. RETURN_FALSE;
  3935. }
  3936. SHEET_FROM_OBJECT(sheet, object);
  3937. if (!xlSheetPrintRepeatRows(sheet, &rowFirst, &rowLast)) {
  3938. RETURN_FALSE;
  3939. }
  3940. array_init(return_value);
  3941. add_assoc_long(return_value, "row_start", rowFirst);
  3942. add_assoc_long(return_value, "row_end", rowLast);
  3943. }
  3944. /* }}} */
  3945. /* {{{ proto long ExcelSheet::printRepeatCols()
  3946. Gets repeated columns on each page from colFirst to colLast.
  3947. Returns 0 if repeated columns aren't found. */
  3948. EXCEL_METHOD(Sheet, printRepeatCols)
  3949. {
  3950. zval *object = getThis();
  3951. SheetHandle sheet;
  3952. int colFirst, colLast;
  3953. if (ZEND_NUM_ARGS()) {
  3954. RETURN_FALSE;
  3955. }
  3956. SHEET_FROM_OBJECT(sheet, object);
  3957. if (!xlSheetPrintRepeatCols(sheet, &colFirst, &colLast)) {
  3958. RETURN_FALSE;
  3959. }
  3960. array_init(return_value);
  3961. add_assoc_long(return_value, "col_start", colFirst);
  3962. add_assoc_long(return_value, "col_end", colLast);
  3963. }
  3964. /* }}} */
  3965. /* {{{ proto long ExcelSheet::printArea()
  3966. Gets the print area. Returns 0 if print area isn't found. */
  3967. EXCEL_METHOD(Sheet, printArea)
  3968. {
  3969. zval *object = getThis();
  3970. SheetHandle sheet;
  3971. int rowFirst, colFirst, rowLast, colLast;
  3972. SHEET_FROM_OBJECT(sheet, object);
  3973. if (!xlSheetPrintArea(sheet, &rowFirst, &colFirst, &rowLast, &colLast)) {
  3974. RETURN_FALSE;
  3975. }
  3976. array_init(return_value);
  3977. add_assoc_long(return_value, "row_start", rowFirst);
  3978. add_assoc_long(return_value, "col_start", colFirst);
  3979. add_assoc_long(return_value, "row_end", rowLast);
  3980. add_assoc_long(return_value, "col_end", colLast);
  3981. }
  3982. /* }}} */
  3983. #endif
  3984. #if PHP_MAJOR_VERSION > 5 || (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION >= 3)
  3985. # define PHP_EXCEL_ARGINFO
  3986. # else
  3987. # define PHP_EXCEL_ARGINFO static
  3988. #endif
  3989. PHP_EXCEL_ARGINFO
  3990. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_load, 0, 0, 1)
  3991. ZEND_ARG_INFO(0, data)
  3992. ZEND_END_ARG_INFO()
  3993. PHP_EXCEL_ARGINFO
  3994. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_loadFile, 0, 0, 1)
  3995. ZEND_ARG_INFO(0, filename)
  3996. ZEND_END_ARG_INFO()
  3997. PHP_EXCEL_ARGINFO
  3998. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_save, 0, 0, 0)
  3999. ZEND_ARG_INFO(0, filename)
  4000. ZEND_END_ARG_INFO()
  4001. PHP_EXCEL_ARGINFO
  4002. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_getSheet, 0, 0, 0)
  4003. ZEND_ARG_INFO(0, sheet)
  4004. ZEND_END_ARG_INFO()
  4005. PHP_EXCEL_ARGINFO
  4006. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_getSheetByName, 0, 0, 1)
  4007. ZEND_ARG_INFO(0, name)
  4008. ZEND_ARG_INFO(0, case_insensitive)
  4009. ZEND_END_ARG_INFO()
  4010. PHP_EXCEL_ARGINFO
  4011. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_deleteSheet, 0, 0, 1)
  4012. ZEND_ARG_INFO(0, sheet)
  4013. ZEND_END_ARG_INFO()
  4014. PHP_EXCEL_ARGINFO
  4015. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_activeSheet, 0, 0, 0)
  4016. ZEND_ARG_INFO(0, sheet)
  4017. ZEND_END_ARG_INFO()
  4018. PHP_EXCEL_ARGINFO
  4019. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_addSheet, 0, 0, 1)
  4020. ZEND_ARG_INFO(0, name)
  4021. ZEND_END_ARG_INFO()
  4022. PHP_EXCEL_ARGINFO
  4023. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_copySheet, 0, 0, 2)
  4024. ZEND_ARG_INFO(0, name)
  4025. ZEND_ARG_INFO(0, sheet_number)
  4026. ZEND_END_ARG_INFO()
  4027. PHP_EXCEL_ARGINFO
  4028. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_sheetCount, 0, 0, 0)
  4029. ZEND_END_ARG_INFO()
  4030. PHP_EXCEL_ARGINFO
  4031. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_getError, 0, 0, 0)
  4032. ZEND_END_ARG_INFO()
  4033. PHP_EXCEL_ARGINFO
  4034. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_addFont, 0, 0, 0)
  4035. ZEND_ARG_OBJ_INFO(0, font, ExcelFont, 0)
  4036. ZEND_END_ARG_INFO()
  4037. PHP_EXCEL_ARGINFO
  4038. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_addFormat, 0, 0, 0)
  4039. ZEND_ARG_OBJ_INFO(0, format, ExcelFormat, 1)
  4040. ZEND_END_ARG_INFO()
  4041. #ifdef HAVE_LIBXL_243_PLUS
  4042. PHP_EXCEL_ARGINFO
  4043. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_getAllFormats, 0, 0, 0)
  4044. ZEND_END_ARG_INFO()
  4045. #endif
  4046. PHP_EXCEL_ARGINFO
  4047. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_addCustomFormat, 0, 0, 1)
  4048. ZEND_ARG_INFO(0, format)
  4049. ZEND_END_ARG_INFO()
  4050. PHP_EXCEL_ARGINFO
  4051. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_getCustomFormat, 0, 0, 1)
  4052. ZEND_ARG_INFO(0, id)
  4053. ZEND_END_ARG_INFO()
  4054. PHP_EXCEL_ARGINFO
  4055. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_packDate, 0, 0, 1)
  4056. ZEND_ARG_INFO(0, timestamp)
  4057. ZEND_END_ARG_INFO()
  4058. PHP_EXCEL_ARGINFO
  4059. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_packDateValues, 0, 0, 6)
  4060. ZEND_ARG_INFO(0, year)
  4061. ZEND_ARG_INFO(0, month)
  4062. ZEND_ARG_INFO(0, day)
  4063. ZEND_ARG_INFO(0, hour)
  4064. ZEND_ARG_INFO(0, min)
  4065. ZEND_ARG_INFO(0, sec)
  4066. ZEND_END_ARG_INFO()
  4067. PHP_EXCEL_ARGINFO
  4068. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_unpackDate, 0, 0, 1)
  4069. ZEND_ARG_INFO(0, date)
  4070. ZEND_END_ARG_INFO()
  4071. PHP_EXCEL_ARGINFO
  4072. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_getActiveSheet, 0, 0, 0)
  4073. ZEND_END_ARG_INFO()
  4074. PHP_EXCEL_ARGINFO
  4075. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_getDefaultFont, 0, 0, 0)
  4076. ZEND_END_ARG_INFO()
  4077. #if LIBXL_VERSION >= 0x03050300
  4078. PHP_EXCEL_ARGINFO
  4079. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_isDate1904, 0, 0, 0)
  4080. ZEND_END_ARG_INFO()
  4081. PHP_EXCEL_ARGINFO
  4082. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_setDate1904, 0, 0, 1)
  4083. ZEND_ARG_INFO(0, date_type)
  4084. ZEND_END_ARG_INFO()
  4085. #endif
  4086. PHP_EXCEL_ARGINFO
  4087. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_setDefaultFont, 0, 0, 2)
  4088. ZEND_ARG_INFO(0, font)
  4089. ZEND_ARG_INFO(0, font_size)
  4090. ZEND_END_ARG_INFO()
  4091. PHP_EXCEL_ARGINFO
  4092. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_setLocale, 0, 0, 1)
  4093. ZEND_ARG_INFO(0, locale)
  4094. ZEND_END_ARG_INFO()
  4095. PHP_EXCEL_ARGINFO
  4096. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book___construct, 0, 0, 0)
  4097. ZEND_ARG_INFO(0, license_name)
  4098. ZEND_ARG_INFO(0, license_key)
  4099. ZEND_ARG_INFO(0, excel_2007)
  4100. ZEND_END_ARG_INFO()
  4101. PHP_EXCEL_ARGINFO
  4102. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_setActiveSheet, 0, 0, 1)
  4103. ZEND_ARG_INFO(0, sheet)
  4104. ZEND_END_ARG_INFO()
  4105. PHP_EXCEL_ARGINFO
  4106. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_addPictureFromFile, 0, 0, 1)
  4107. ZEND_ARG_INFO(0, filename)
  4108. ZEND_END_ARG_INFO()
  4109. PHP_EXCEL_ARGINFO
  4110. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_addPictureFromString, 0, 0, 1)
  4111. ZEND_ARG_INFO(0, data)
  4112. ZEND_END_ARG_INFO()
  4113. #ifdef LIBXL_VERSION
  4114. PHP_EXCEL_ARGINFO
  4115. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_rgbMode, 0, 0, 0)
  4116. ZEND_END_ARG_INFO()
  4117. PHP_EXCEL_ARGINFO
  4118. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_setRGBMode, 0, 0, 1)
  4119. ZEND_ARG_INFO(0, mode)
  4120. ZEND_END_ARG_INFO()
  4121. PHP_EXCEL_ARGINFO
  4122. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_colorPack, 0, 0, 3)
  4123. ZEND_ARG_INFO(0, r)
  4124. ZEND_ARG_INFO(0, g)
  4125. ZEND_ARG_INFO(0, b)
  4126. ZEND_END_ARG_INFO()
  4127. PHP_EXCEL_ARGINFO
  4128. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_colorUnpack, 0, 0, 1)
  4129. ZEND_ARG_INFO(0, color)
  4130. ZEND_END_ARG_INFO()
  4131. #endif
  4132. #if LIBXL_VERSION >= 0x03020000
  4133. PHP_EXCEL_ARGINFO
  4134. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_setRefR1C1, 0, 0, 1)
  4135. ZEND_ARG_INFO(0, active)
  4136. ZEND_END_ARG_INFO()
  4137. PHP_EXCEL_ARGINFO
  4138. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_biffVersion, 0, 0, 0)
  4139. ZEND_END_ARG_INFO()
  4140. PHP_EXCEL_ARGINFO
  4141. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_getRefR1C1, 0, 0, 0)
  4142. ZEND_END_ARG_INFO()
  4143. PHP_EXCEL_ARGINFO
  4144. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_getPicture, 0, 0, 1)
  4145. ZEND_ARG_INFO(0, index)
  4146. ZEND_END_ARG_INFO()
  4147. PHP_EXCEL_ARGINFO
  4148. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_getNumPictures, 0, 0, 0)
  4149. ZEND_END_ARG_INFO()
  4150. PHP_EXCEL_ARGINFO
  4151. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_insertSheet, 0, 0, 2)
  4152. ZEND_ARG_INFO(0, index)
  4153. ZEND_ARG_INFO(0, name)
  4154. ZEND_ARG_OBJ_INFO(0, sheet, ExcelSheet, 0)
  4155. ZEND_END_ARG_INFO()
  4156. #endif
  4157. #if LIBXL_VERSION >= 0x03050401
  4158. PHP_EXCEL_ARGINFO
  4159. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_isTemplate, 0, 0, 0)
  4160. ZEND_END_ARG_INFO()
  4161. PHP_EXCEL_ARGINFO
  4162. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_setTemplate, 0, 0, 1)
  4163. ZEND_ARG_INFO(0, mode)
  4164. ZEND_END_ARG_INFO()
  4165. PHP_EXCEL_ARGINFO
  4166. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_getRightToLeft, 0, 0, 0)
  4167. ZEND_END_ARG_INFO()
  4168. PHP_EXCEL_ARGINFO
  4169. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setRightToLeft, 0, 0, 1)
  4170. ZEND_ARG_INFO(0, mode)
  4171. ZEND_END_ARG_INFO()
  4172. #endif
  4173. #if LIBXL_VERSION >= 0x03060000
  4174. PHP_EXCEL_ARGINFO
  4175. ZEND_BEGIN_ARG_INFO_EX(arginfo_Book_sheetType, 0, 0, 1)
  4176. ZEND_ARG_INFO(0, sheet)
  4177. ZEND_END_ARG_INFO()
  4178. #endif
  4179. PHP_EXCEL_ARGINFO
  4180. ZEND_BEGIN_ARG_INFO_EX(arginfo_Font_size, 0, 0, 0)
  4181. ZEND_ARG_INFO(0, size)
  4182. ZEND_END_ARG_INFO()
  4183. PHP_EXCEL_ARGINFO
  4184. ZEND_BEGIN_ARG_INFO_EX(arginfo_Font_italics, 0, 0, 0)
  4185. ZEND_ARG_INFO(0, size)
  4186. ZEND_END_ARG_INFO()
  4187. PHP_EXCEL_ARGINFO
  4188. ZEND_BEGIN_ARG_INFO_EX(arginfo_Font_strike, 0, 0, 0)
  4189. ZEND_ARG_INFO(0, strike)
  4190. ZEND_END_ARG_INFO()
  4191. PHP_EXCEL_ARGINFO
  4192. ZEND_BEGIN_ARG_INFO_EX(arginfo_Font_bold, 0, 0, 0)
  4193. ZEND_ARG_INFO(0, bold)
  4194. ZEND_END_ARG_INFO()
  4195. PHP_EXCEL_ARGINFO
  4196. ZEND_BEGIN_ARG_INFO_EX(arginfo_Font_color, 0, 0, 0)
  4197. ZEND_ARG_INFO(0, color)
  4198. ZEND_END_ARG_INFO()
  4199. PHP_EXCEL_ARGINFO
  4200. ZEND_BEGIN_ARG_INFO_EX(arginfo_Font_mode, 0, 0, 0)
  4201. ZEND_ARG_INFO(0, mode)
  4202. ZEND_END_ARG_INFO()
  4203. PHP_EXCEL_ARGINFO
  4204. ZEND_BEGIN_ARG_INFO_EX(arginfo_Font_underline, 0, 0, 0)
  4205. ZEND_ARG_INFO(0, underline_style)
  4206. ZEND_END_ARG_INFO()
  4207. PHP_EXCEL_ARGINFO
  4208. ZEND_BEGIN_ARG_INFO_EX(arginfo_Font_name, 0, 0, 0)
  4209. ZEND_ARG_INFO(0, name)
  4210. ZEND_END_ARG_INFO()
  4211. PHP_EXCEL_ARGINFO
  4212. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format___construct, 0, 0, 1)
  4213. ZEND_ARG_OBJ_INFO(0, book, ExcelBook, 0)
  4214. ZEND_END_ARG_INFO()
  4215. PHP_EXCEL_ARGINFO
  4216. ZEND_BEGIN_ARG_INFO_EX(arginfo_Font___construct, 0, 0, 1)
  4217. ZEND_ARG_OBJ_INFO(0, book, ExcelBook, 0)
  4218. ZEND_END_ARG_INFO()
  4219. PHP_EXCEL_ARGINFO
  4220. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_setFont, 0, 0, 1)
  4221. ZEND_ARG_OBJ_INFO(0, font, ExcelFont, 0)
  4222. ZEND_END_ARG_INFO()
  4223. PHP_EXCEL_ARGINFO
  4224. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_getFont, 0, 0, 0)
  4225. ZEND_END_ARG_INFO()
  4226. PHP_EXCEL_ARGINFO
  4227. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_numberFormat, 0, 0, 0)
  4228. ZEND_ARG_INFO(0, format)
  4229. ZEND_END_ARG_INFO()
  4230. PHP_EXCEL_ARGINFO
  4231. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_horizontalAlign, 0, 0, 0)
  4232. ZEND_ARG_INFO(0, align_mode)
  4233. ZEND_END_ARG_INFO()
  4234. PHP_EXCEL_ARGINFO
  4235. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_verticalAlign, 0, 0, 0)
  4236. ZEND_ARG_INFO(0, align_mode)
  4237. ZEND_END_ARG_INFO()
  4238. PHP_EXCEL_ARGINFO
  4239. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_wrap, 0, 0, 0)
  4240. ZEND_ARG_INFO(0, wrap)
  4241. ZEND_END_ARG_INFO()
  4242. PHP_EXCEL_ARGINFO
  4243. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_rotate, 0, 0, 0)
  4244. ZEND_ARG_INFO(0, angle)
  4245. ZEND_END_ARG_INFO()
  4246. PHP_EXCEL_ARGINFO
  4247. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_indent, 0, 0, 0)
  4248. ZEND_ARG_INFO(0, indent)
  4249. ZEND_END_ARG_INFO()
  4250. PHP_EXCEL_ARGINFO
  4251. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_shrinkToFit, 0, 0, 0)
  4252. ZEND_ARG_INFO(0, shrink)
  4253. ZEND_END_ARG_INFO()
  4254. PHP_EXCEL_ARGINFO
  4255. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_borderStyle, 0, 0, 0)
  4256. ZEND_ARG_INFO(0, style)
  4257. ZEND_END_ARG_INFO()
  4258. PHP_EXCEL_ARGINFO
  4259. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_borderColor, 0, 0, 0)
  4260. ZEND_ARG_INFO(0, color)
  4261. ZEND_END_ARG_INFO()
  4262. PHP_EXCEL_ARGINFO
  4263. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_borderLeftStyle, 0, 0, 0)
  4264. ZEND_ARG_INFO(0, style)
  4265. ZEND_END_ARG_INFO()
  4266. PHP_EXCEL_ARGINFO
  4267. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_borderLeftColor, 0, 0, 0)
  4268. ZEND_ARG_INFO(0, color)
  4269. ZEND_END_ARG_INFO()
  4270. PHP_EXCEL_ARGINFO
  4271. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_borderRightStyle, 0, 0, 0)
  4272. ZEND_ARG_INFO(0, style)
  4273. ZEND_END_ARG_INFO()
  4274. PHP_EXCEL_ARGINFO
  4275. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_borderRightColor, 0, 0, 0)
  4276. ZEND_ARG_INFO(0, color)
  4277. ZEND_END_ARG_INFO()
  4278. PHP_EXCEL_ARGINFO
  4279. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_borderTopStyle, 0, 0, 0)
  4280. ZEND_ARG_INFO(0, style)
  4281. ZEND_END_ARG_INFO()
  4282. PHP_EXCEL_ARGINFO
  4283. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_borderTopColor, 0, 0, 0)
  4284. ZEND_ARG_INFO(0, color)
  4285. ZEND_END_ARG_INFO()
  4286. PHP_EXCEL_ARGINFO
  4287. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_borderBottomStyle, 0, 0, 0)
  4288. ZEND_ARG_INFO(0, style)
  4289. ZEND_END_ARG_INFO()
  4290. PHP_EXCEL_ARGINFO
  4291. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_borderBottomColor, 0, 0, 0)
  4292. ZEND_ARG_INFO(0, color)
  4293. ZEND_END_ARG_INFO()
  4294. PHP_EXCEL_ARGINFO
  4295. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_borderDiagonalStyle, 0, 0, 0)
  4296. ZEND_ARG_INFO(0, style)
  4297. ZEND_END_ARG_INFO()
  4298. PHP_EXCEL_ARGINFO
  4299. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_borderDiagonalColor, 0, 0, 0)
  4300. ZEND_ARG_INFO(0, color)
  4301. ZEND_END_ARG_INFO()
  4302. PHP_EXCEL_ARGINFO
  4303. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_fillPattern, 0, 0, 0)
  4304. ZEND_ARG_INFO(0, patern)
  4305. ZEND_END_ARG_INFO()
  4306. PHP_EXCEL_ARGINFO
  4307. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_patternForegroundColor, 0, 0, 0)
  4308. ZEND_ARG_INFO(0, color)
  4309. ZEND_END_ARG_INFO()
  4310. PHP_EXCEL_ARGINFO
  4311. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_patternBackgroundColor, 0, 0, 0)
  4312. ZEND_ARG_INFO(0, color)
  4313. ZEND_END_ARG_INFO()
  4314. PHP_EXCEL_ARGINFO
  4315. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_locked, 0, 0, 0)
  4316. ZEND_ARG_INFO(0, locked)
  4317. ZEND_END_ARG_INFO()
  4318. PHP_EXCEL_ARGINFO
  4319. ZEND_BEGIN_ARG_INFO_EX(arginfo_Format_hidden, 0, 0, 0)
  4320. ZEND_ARG_INFO(0, hidden)
  4321. ZEND_END_ARG_INFO()
  4322. PHP_EXCEL_ARGINFO
  4323. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet___construct, 0, 0, 2)
  4324. ZEND_ARG_OBJ_INFO(0, book, ExcelBook, 0)
  4325. ZEND_ARG_INFO(0, name)
  4326. ZEND_END_ARG_INFO()
  4327. PHP_EXCEL_ARGINFO
  4328. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_cellType, 0, 0, 2)
  4329. ZEND_ARG_INFO(0, row)
  4330. ZEND_ARG_INFO(0, column)
  4331. ZEND_END_ARG_INFO()
  4332. PHP_EXCEL_ARGINFO
  4333. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_cellFormat, 0, 0, 2)
  4334. ZEND_ARG_INFO(0, row)
  4335. ZEND_ARG_INFO(0, column)
  4336. ZEND_END_ARG_INFO()
  4337. #ifdef HAVE_LIBXL_243_PLUS
  4338. PHP_EXCEL_ARGINFO
  4339. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setCellFormat, 0, 0, 3)
  4340. ZEND_ARG_INFO(0, row)
  4341. ZEND_ARG_INFO(0, column)
  4342. ZEND_ARG_OBJ_INFO(0, format, ExcelFormat, 0)
  4343. ZEND_END_ARG_INFO()
  4344. #endif
  4345. PHP_EXCEL_ARGINFO
  4346. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_readRow, 0, 0, 1)
  4347. ZEND_ARG_INFO(0, row)
  4348. ZEND_ARG_INFO(0, start_col)
  4349. ZEND_ARG_INFO(0, end_column)
  4350. ZEND_ARG_INFO(0, read_formula)
  4351. ZEND_END_ARG_INFO()
  4352. PHP_EXCEL_ARGINFO
  4353. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_readCol, 0, 0, 1)
  4354. ZEND_ARG_INFO(0, column)
  4355. ZEND_ARG_INFO(0, start_row)
  4356. ZEND_ARG_INFO(0, end_row)
  4357. ZEND_ARG_INFO(0, read_formula)
  4358. ZEND_END_ARG_INFO()
  4359. PHP_EXCEL_ARGINFO
  4360. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_read, 0, 0, 2)
  4361. ZEND_ARG_INFO(0, row)
  4362. ZEND_ARG_INFO(0, column)
  4363. ZEND_ARG_INFO(1, format)
  4364. ZEND_ARG_INFO(0, read_formula)
  4365. ZEND_END_ARG_INFO()
  4366. PHP_EXCEL_ARGINFO
  4367. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_write, 0, 0, 3)
  4368. ZEND_ARG_INFO(0, row)
  4369. ZEND_ARG_INFO(0, column)
  4370. ZEND_ARG_INFO(0, data)
  4371. ZEND_ARG_OBJ_INFO(0, format, ExcelFormat, 1)
  4372. ZEND_ARG_INFO(0, datatype)
  4373. ZEND_END_ARG_INFO()
  4374. PHP_EXCEL_ARGINFO
  4375. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_writeRow, 0, 0, 2)
  4376. ZEND_ARG_INFO(0, row)
  4377. ZEND_ARG_INFO(0, data)
  4378. ZEND_ARG_INFO(0, start_column)
  4379. ZEND_ARG_OBJ_INFO(0, format, ExcelFormat, 1)
  4380. ZEND_END_ARG_INFO()
  4381. PHP_EXCEL_ARGINFO
  4382. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_writeCol, 0, 0, 2)
  4383. ZEND_ARG_INFO(0, row)
  4384. ZEND_ARG_INFO(0, data)
  4385. ZEND_ARG_INFO(0, start_row)
  4386. ZEND_ARG_OBJ_INFO(0, format, ExcelFormat, 1)
  4387. ZEND_ARG_INFO(0, data_type)
  4388. ZEND_END_ARG_INFO()
  4389. PHP_EXCEL_ARGINFO
  4390. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_isFormula, 0, 0, 2)
  4391. ZEND_ARG_INFO(0, row)
  4392. ZEND_ARG_INFO(0, column)
  4393. ZEND_END_ARG_INFO()
  4394. PHP_EXCEL_ARGINFO
  4395. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_isDate, 0, 0, 2)
  4396. ZEND_ARG_INFO(0, row)
  4397. ZEND_ARG_INFO(0, column)
  4398. ZEND_END_ARG_INFO()
  4399. PHP_EXCEL_ARGINFO
  4400. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_insertRow, 0, 0, 2)
  4401. ZEND_ARG_INFO(0, row_first)
  4402. ZEND_ARG_INFO(0, row_last)
  4403. #if LIBXL_VERSION >= 0x03080301
  4404. ZEND_ARG_INFO(0, update_named_ranges)
  4405. #endif
  4406. ZEND_END_ARG_INFO()
  4407. PHP_EXCEL_ARGINFO
  4408. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_insertCol, 0, 0, 2)
  4409. ZEND_ARG_INFO(0, col_first)
  4410. ZEND_ARG_INFO(0, col_last)
  4411. #if LIBXL_VERSION >= 0x03080301
  4412. ZEND_ARG_INFO(0, update_named_ranges)
  4413. #endif
  4414. ZEND_END_ARG_INFO()
  4415. PHP_EXCEL_ARGINFO
  4416. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_removeRow, 0, 0, 2)
  4417. ZEND_ARG_INFO(0, row_first)
  4418. ZEND_ARG_INFO(0, row_last)
  4419. #if LIBXL_VERSION >= 0x03080301
  4420. ZEND_ARG_INFO(0, update_named_ranges)
  4421. #endif
  4422. ZEND_END_ARG_INFO()
  4423. PHP_EXCEL_ARGINFO
  4424. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_removeCol, 0, 0, 2)
  4425. ZEND_ARG_INFO(0, col_first)
  4426. ZEND_ARG_INFO(0, col_last)
  4427. #if LIBXL_VERSION >= 0x03080301
  4428. ZEND_ARG_INFO(0, update_named_ranges)
  4429. #endif
  4430. ZEND_END_ARG_INFO()
  4431. PHP_EXCEL_ARGINFO
  4432. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_colWidth, 0, 0, 1)
  4433. ZEND_ARG_INFO(0, column)
  4434. ZEND_END_ARG_INFO()
  4435. PHP_EXCEL_ARGINFO
  4436. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_rowHeight, 0, 0, 1)
  4437. ZEND_ARG_INFO(0, row)
  4438. ZEND_END_ARG_INFO()
  4439. PHP_EXCEL_ARGINFO
  4440. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_readComment, 0, 0, 2)
  4441. ZEND_ARG_INFO(0, row)
  4442. ZEND_ARG_INFO(0, column)
  4443. ZEND_END_ARG_INFO()
  4444. PHP_EXCEL_ARGINFO
  4445. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_writeComment, 0, 0, 6)
  4446. ZEND_ARG_INFO(0, row)
  4447. ZEND_ARG_INFO(0, column)
  4448. ZEND_ARG_INFO(0, value)
  4449. ZEND_ARG_INFO(0, author)
  4450. ZEND_ARG_INFO(0, width)
  4451. ZEND_ARG_INFO(0, height)
  4452. ZEND_END_ARG_INFO()
  4453. PHP_EXCEL_ARGINFO
  4454. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setColWidth, 0, 0, 3)
  4455. ZEND_ARG_INFO(0, column_start)
  4456. ZEND_ARG_INFO(0, column_end)
  4457. ZEND_ARG_INFO(0, width)
  4458. ZEND_ARG_INFO(0, hidden)
  4459. ZEND_ARG_OBJ_INFO(0, format, ExcelFormat, 1)
  4460. ZEND_END_ARG_INFO()
  4461. PHP_EXCEL_ARGINFO
  4462. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setRowHeight, 0, 0, 2)
  4463. ZEND_ARG_INFO(0, row)
  4464. ZEND_ARG_INFO(0, height)
  4465. ZEND_ARG_OBJ_INFO(0, format, ExcelFormat, 1)
  4466. ZEND_ARG_INFO(0, hidden)
  4467. ZEND_END_ARG_INFO()
  4468. PHP_EXCEL_ARGINFO
  4469. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_getMerge, 0, 0, 2)
  4470. ZEND_ARG_INFO(0, row)
  4471. ZEND_ARG_INFO(0, column)
  4472. ZEND_END_ARG_INFO()
  4473. PHP_EXCEL_ARGINFO
  4474. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setMerge, 0, 0, 4)
  4475. ZEND_ARG_INFO(0, row_start)
  4476. ZEND_ARG_INFO(0, row_end)
  4477. ZEND_ARG_INFO(0, col_start)
  4478. ZEND_ARG_INFO(0, col_end)
  4479. ZEND_END_ARG_INFO()
  4480. PHP_EXCEL_ARGINFO
  4481. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_deleteMerge, 0, 0, 2)
  4482. ZEND_ARG_INFO(0, row)
  4483. ZEND_ARG_INFO(0, column)
  4484. ZEND_END_ARG_INFO()
  4485. PHP_EXCEL_ARGINFO
  4486. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_addPictureScaled, 0, 0, 4)
  4487. ZEND_ARG_INFO(0, row)
  4488. ZEND_ARG_INFO(0, column)
  4489. ZEND_ARG_INFO(0, pic_id)
  4490. ZEND_ARG_INFO(0, scale)
  4491. #if LIBXL_VERSION >= 0x03040000
  4492. ZEND_ARG_INFO(0, x_offset)
  4493. ZEND_ARG_INFO(0, y_offset)
  4494. #endif
  4495. #if LIBXL_VERSION >= 0x03060300
  4496. ZEND_ARG_INFO(0, pos)
  4497. #endif
  4498. ZEND_END_ARG_INFO()
  4499. PHP_EXCEL_ARGINFO
  4500. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_addPictureDim, 0, 0, 5)
  4501. ZEND_ARG_INFO(0, row)
  4502. ZEND_ARG_INFO(0, column)
  4503. ZEND_ARG_INFO(0, pic_id)
  4504. ZEND_ARG_INFO(0, width)
  4505. ZEND_ARG_INFO(0, height)
  4506. #if LIBXL_VERSION >= 0x03040000
  4507. ZEND_ARG_INFO(0, x_offset)
  4508. ZEND_ARG_INFO(0, y_offset)
  4509. #endif
  4510. #if LIBXL_VERSION >= 0x03060300
  4511. ZEND_ARG_INFO(0, pos)
  4512. #endif
  4513. ZEND_END_ARG_INFO()
  4514. PHP_EXCEL_ARGINFO
  4515. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_horPageBreak, 0, 0, 2)
  4516. ZEND_ARG_INFO(0, row)
  4517. ZEND_ARG_INFO(0, break)
  4518. ZEND_END_ARG_INFO()
  4519. PHP_EXCEL_ARGINFO
  4520. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_verPageBreak, 0, 0, 2)
  4521. ZEND_ARG_INFO(0, col)
  4522. ZEND_ARG_INFO(0, break)
  4523. ZEND_END_ARG_INFO()
  4524. PHP_EXCEL_ARGINFO
  4525. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_splitSheet, 0, 0, 2)
  4526. ZEND_ARG_INFO(0, row)
  4527. ZEND_ARG_INFO(0, column)
  4528. ZEND_END_ARG_INFO()
  4529. PHP_EXCEL_ARGINFO
  4530. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_groupRows, 0, 0, 2)
  4531. ZEND_ARG_INFO(0, start_row)
  4532. ZEND_ARG_INFO(0, end_row)
  4533. ZEND_ARG_INFO(0, collapse)
  4534. ZEND_END_ARG_INFO()
  4535. PHP_EXCEL_ARGINFO
  4536. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_groupCols, 0, 0, 2)
  4537. ZEND_ARG_INFO(0, start_column)
  4538. ZEND_ARG_INFO(0, end_column)
  4539. ZEND_ARG_INFO(0, collapse)
  4540. ZEND_END_ARG_INFO()
  4541. PHP_EXCEL_ARGINFO
  4542. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_clear, 0, 0, 4)
  4543. ZEND_ARG_INFO(0, row_s)
  4544. ZEND_ARG_INFO(0, row_e)
  4545. ZEND_ARG_INFO(0, col_s)
  4546. ZEND_ARG_INFO(0, col_s)
  4547. ZEND_END_ARG_INFO()
  4548. PHP_EXCEL_ARGINFO
  4549. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_copy, 0, 0, 4)
  4550. ZEND_ARG_INFO(0, row)
  4551. ZEND_ARG_INFO(0, col)
  4552. ZEND_ARG_INFO(0, to_row)
  4553. ZEND_ARG_INFO(0, to_col)
  4554. ZEND_END_ARG_INFO()
  4555. PHP_EXCEL_ARGINFO
  4556. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_firstRow, 0, 0, 0)
  4557. ZEND_END_ARG_INFO()
  4558. PHP_EXCEL_ARGINFO
  4559. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_lastRow, 0, 0, 0)
  4560. ZEND_END_ARG_INFO()
  4561. PHP_EXCEL_ARGINFO
  4562. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_firstCol, 0, 0, 0)
  4563. ZEND_END_ARG_INFO()
  4564. PHP_EXCEL_ARGINFO
  4565. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_lastCol, 0, 0, 0)
  4566. ZEND_END_ARG_INFO()
  4567. PHP_EXCEL_ARGINFO
  4568. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_displayGridlines, 0, 0, 0)
  4569. ZEND_END_ARG_INFO()
  4570. PHP_EXCEL_ARGINFO
  4571. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_printGridlines, 0, 0, 0)
  4572. ZEND_END_ARG_INFO()
  4573. PHP_EXCEL_ARGINFO
  4574. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setDisplayGridlines, 0, 0, 1)
  4575. ZEND_ARG_INFO(0, value)
  4576. ZEND_END_ARG_INFO()
  4577. PHP_EXCEL_ARGINFO
  4578. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setPrintGridlines, 0, 0, 1)
  4579. ZEND_ARG_INFO(0, value)
  4580. ZEND_END_ARG_INFO()
  4581. PHP_EXCEL_ARGINFO
  4582. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_zoom, 0, 0, 0)
  4583. ZEND_END_ARG_INFO()
  4584. #if LIBXL_VERSION >= 0x03020300
  4585. PHP_EXCEL_ARGINFO
  4586. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_isHidden, 0, 0, 0)
  4587. ZEND_END_ARG_INFO()
  4588. PHP_EXCEL_ARGINFO
  4589. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setHidden, 0, 0, 1)
  4590. ZEND_ARG_INFO(0, value)
  4591. ZEND_END_ARG_INFO()
  4592. #endif
  4593. #if LIBXL_VERSION >= 0x03020400
  4594. PHP_EXCEL_ARGINFO
  4595. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_getTopLeftView, 0, 0, 0)
  4596. ZEND_END_ARG_INFO()
  4597. PHP_EXCEL_ARGINFO
  4598. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setTopLeftView, 0, 0, 2)
  4599. ZEND_ARG_INFO(0, row)
  4600. ZEND_ARG_INFO(0, column)
  4601. ZEND_END_ARG_INFO()
  4602. PHP_EXCEL_ARGINFO
  4603. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_rowColToAddr, 0, 0, 2)
  4604. ZEND_ARG_INFO(0, row)
  4605. ZEND_ARG_INFO(0, column)
  4606. ZEND_ARG_INFO(0, row_relative)
  4607. ZEND_ARG_INFO(0, col_relative)
  4608. ZEND_END_ARG_INFO()
  4609. PHP_EXCEL_ARGINFO
  4610. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_addrToRowCol, 0, 0, 1)
  4611. ZEND_ARG_INFO(0, cell_reference)
  4612. ZEND_END_ARG_INFO()
  4613. #endif
  4614. PHP_EXCEL_ARGINFO
  4615. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_zoomPrint, 0, 0, 0)
  4616. ZEND_END_ARG_INFO()
  4617. PHP_EXCEL_ARGINFO
  4618. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setZoom, 0, 0, 1)
  4619. ZEND_ARG_INFO(0, value)
  4620. ZEND_END_ARG_INFO()
  4621. PHP_EXCEL_ARGINFO
  4622. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setZoomPrint, 0, 0, 1)
  4623. ZEND_ARG_INFO(0, value)
  4624. ZEND_END_ARG_INFO()
  4625. PHP_EXCEL_ARGINFO
  4626. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setLandscape, 0, 0, 1)
  4627. ZEND_ARG_INFO(0, value)
  4628. ZEND_END_ARG_INFO()
  4629. PHP_EXCEL_ARGINFO
  4630. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_landscape, 0, 0, 0)
  4631. ZEND_END_ARG_INFO()
  4632. PHP_EXCEL_ARGINFO
  4633. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_paper, 0, 0, 0)
  4634. ZEND_END_ARG_INFO()
  4635. PHP_EXCEL_ARGINFO
  4636. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setPaper, 0, 0, 1)
  4637. ZEND_ARG_INFO(0, value)
  4638. ZEND_END_ARG_INFO()
  4639. PHP_EXCEL_ARGINFO
  4640. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_header, 0, 0, 0)
  4641. ZEND_END_ARG_INFO()
  4642. PHP_EXCEL_ARGINFO
  4643. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_footer, 0, 0, 0)
  4644. ZEND_END_ARG_INFO()
  4645. PHP_EXCEL_ARGINFO
  4646. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setHeader, 0, 0, 2)
  4647. ZEND_ARG_INFO(0, header)
  4648. ZEND_ARG_INFO(0, margin)
  4649. ZEND_END_ARG_INFO()
  4650. PHP_EXCEL_ARGINFO
  4651. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setFooter, 0, 0, 2)
  4652. ZEND_ARG_INFO(0, footer)
  4653. ZEND_ARG_INFO(0, margin)
  4654. ZEND_END_ARG_INFO()
  4655. PHP_EXCEL_ARGINFO
  4656. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_headerMargin, 0, 0, 0)
  4657. ZEND_END_ARG_INFO()
  4658. PHP_EXCEL_ARGINFO
  4659. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_footerMargin, 0, 0, 0)
  4660. ZEND_END_ARG_INFO()
  4661. PHP_EXCEL_ARGINFO
  4662. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_hcenter, 0, 0, 0)
  4663. ZEND_END_ARG_INFO()
  4664. PHP_EXCEL_ARGINFO
  4665. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_vcenter, 0, 0, 0)
  4666. ZEND_END_ARG_INFO()
  4667. PHP_EXCEL_ARGINFO
  4668. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setHCenter, 0, 0, 1)
  4669. ZEND_ARG_INFO(0, value)
  4670. ZEND_END_ARG_INFO()
  4671. PHP_EXCEL_ARGINFO
  4672. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setVCenter, 0, 0, 1)
  4673. ZEND_ARG_INFO(0, value)
  4674. ZEND_END_ARG_INFO()
  4675. PHP_EXCEL_ARGINFO
  4676. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_marginLeft, 0, 0, 0)
  4677. ZEND_END_ARG_INFO()
  4678. PHP_EXCEL_ARGINFO
  4679. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_marginRight, 0, 0, 0)
  4680. ZEND_END_ARG_INFO()
  4681. PHP_EXCEL_ARGINFO
  4682. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_marginTop, 0, 0, 0)
  4683. ZEND_END_ARG_INFO()
  4684. PHP_EXCEL_ARGINFO
  4685. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_marginBottom, 0, 0, 0)
  4686. ZEND_END_ARG_INFO()
  4687. PHP_EXCEL_ARGINFO
  4688. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setMarginLeft, 0, 0, 1)
  4689. ZEND_ARG_INFO(0, value)
  4690. ZEND_END_ARG_INFO()
  4691. PHP_EXCEL_ARGINFO
  4692. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setMarginRight, 0, 0, 1)
  4693. ZEND_ARG_INFO(0, value)
  4694. ZEND_END_ARG_INFO()
  4695. PHP_EXCEL_ARGINFO
  4696. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setMarginTop, 0, 0, 1)
  4697. ZEND_ARG_INFO(0, value)
  4698. ZEND_END_ARG_INFO()
  4699. PHP_EXCEL_ARGINFO
  4700. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setMarginBottom, 0, 0, 1)
  4701. ZEND_ARG_INFO(0, value)
  4702. ZEND_END_ARG_INFO()
  4703. PHP_EXCEL_ARGINFO
  4704. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_printHeaders, 0, 0, 0)
  4705. ZEND_END_ARG_INFO()
  4706. PHP_EXCEL_ARGINFO
  4707. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setPrintHeaders, 0, 0, 1)
  4708. ZEND_ARG_INFO(0, value)
  4709. ZEND_END_ARG_INFO()
  4710. PHP_EXCEL_ARGINFO
  4711. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_name, 0, 0, 0)
  4712. ZEND_END_ARG_INFO()
  4713. PHP_EXCEL_ARGINFO
  4714. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setName, 0, 0, 1)
  4715. ZEND_ARG_INFO(0, name)
  4716. ZEND_END_ARG_INFO()
  4717. PHP_EXCEL_ARGINFO
  4718. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_protect, 0, 0, 0)
  4719. ZEND_END_ARG_INFO()
  4720. PHP_EXCEL_ARGINFO
  4721. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setProtect, 0, 0, 1)
  4722. ZEND_ARG_INFO(0, value)
  4723. ZEND_END_ARG_INFO()
  4724. #if LIBXL_VERSION >= 0x03010000
  4725. PHP_EXCEL_ARGINFO
  4726. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setNamedRange, 0, 0, 5)
  4727. ZEND_ARG_INFO(0, name)
  4728. ZEND_ARG_INFO(0, row)
  4729. ZEND_ARG_INFO(0, col)
  4730. ZEND_ARG_INFO(0, to_row)
  4731. ZEND_ARG_INFO(0, to_col)
  4732. #if LIBXL_VERSION >= 0x03050401
  4733. ZEND_ARG_INFO(0, scope_id)
  4734. #endif
  4735. ZEND_END_ARG_INFO()
  4736. PHP_EXCEL_ARGINFO
  4737. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_delNamedRange, 0, 0, 1)
  4738. ZEND_ARG_INFO(0, name)
  4739. #if LIBXL_VERSION >= 0x03050401
  4740. ZEND_ARG_INFO(0, scope_id)
  4741. #endif
  4742. ZEND_END_ARG_INFO()
  4743. PHP_EXCEL_ARGINFO
  4744. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setPrintRepeatRows, 0, 0, 2)
  4745. ZEND_ARG_INFO(0, row_start)
  4746. ZEND_ARG_INFO(0, row_end)
  4747. ZEND_END_ARG_INFO()
  4748. PHP_EXCEL_ARGINFO
  4749. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setPrintRepeatCols, 0, 0, 2)
  4750. ZEND_ARG_INFO(0, col_start)
  4751. ZEND_ARG_INFO(0, col_end)
  4752. ZEND_END_ARG_INFO()
  4753. PHP_EXCEL_ARGINFO
  4754. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setPrintArea, 0, 0, 4)
  4755. ZEND_ARG_INFO(0, row_first)
  4756. ZEND_ARG_INFO(0, row_last)
  4757. ZEND_ARG_INFO(0, col_first)
  4758. ZEND_ARG_INFO(0, col_last)
  4759. ZEND_END_ARG_INFO()
  4760. PHP_EXCEL_ARGINFO
  4761. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_clearPrintRepeats, 0, 0, 0)
  4762. ZEND_END_ARG_INFO()
  4763. PHP_EXCEL_ARGINFO
  4764. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_clearPrintArea, 0, 0, 0)
  4765. ZEND_END_ARG_INFO()
  4766. PHP_EXCEL_ARGINFO
  4767. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_getGroupSummaryRight, 0, 0, 0)
  4768. ZEND_END_ARG_INFO()
  4769. PHP_EXCEL_ARGINFO
  4770. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_getGroupSummaryBelow, 0, 0, 0)
  4771. ZEND_END_ARG_INFO()
  4772. PHP_EXCEL_ARGINFO
  4773. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setGroupSummaryBelow, 0, 0, 1)
  4774. ZEND_ARG_INFO(0, direction)
  4775. ZEND_END_ARG_INFO()
  4776. PHP_EXCEL_ARGINFO
  4777. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setGroupSummaryRight, 0, 0, 1)
  4778. ZEND_ARG_INFO(0, direction)
  4779. ZEND_END_ARG_INFO()
  4780. #endif
  4781. #if LIBXL_VERSION >= 0x03020000
  4782. PHP_EXCEL_ARGINFO
  4783. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setPrintFit, 0, 0, 2)
  4784. ZEND_ARG_INFO(0, wPages)
  4785. ZEND_ARG_INFO(0, hPages)
  4786. ZEND_END_ARG_INFO()
  4787. PHP_EXCEL_ARGINFO
  4788. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_getPrintFit, 0, 0, 0)
  4789. ZEND_END_ARG_INFO()
  4790. PHP_EXCEL_ARGINFO
  4791. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_getNamedRange, 0, 0, 1)
  4792. ZEND_ARG_INFO(0, name)
  4793. #if LIBXL_VERSION >= 0x03050401
  4794. ZEND_ARG_INFO(0, scope_id)
  4795. #endif
  4796. ZEND_END_ARG_INFO()
  4797. PHP_EXCEL_ARGINFO
  4798. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_getIndexRange, 0, 0, 1)
  4799. ZEND_ARG_INFO(0, index)
  4800. #if LIBXL_VERSION >= 0x03050401
  4801. ZEND_ARG_INFO(0, scope_id)
  4802. #endif
  4803. ZEND_END_ARG_INFO()
  4804. PHP_EXCEL_ARGINFO
  4805. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_namedRangeSize, 0, 0, 0)
  4806. ZEND_END_ARG_INFO()
  4807. PHP_EXCEL_ARGINFO
  4808. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_getVerPageBreak, 0, 0, 1)
  4809. ZEND_ARG_INFO(0, index)
  4810. ZEND_END_ARG_INFO()
  4811. PHP_EXCEL_ARGINFO
  4812. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_getVerPageBreakSize, 0, 0, 0)
  4813. ZEND_END_ARG_INFO()
  4814. PHP_EXCEL_ARGINFO
  4815. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_getHorPageBreak, 0, 0, 1)
  4816. ZEND_ARG_INFO(0, index)
  4817. ZEND_END_ARG_INFO()
  4818. PHP_EXCEL_ARGINFO
  4819. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_getHorPageBreakSize, 0, 0, 0)
  4820. ZEND_END_ARG_INFO()
  4821. PHP_EXCEL_ARGINFO
  4822. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_getPictureInfo, 0, 0, 1)
  4823. ZEND_ARG_INFO(0, index)
  4824. ZEND_END_ARG_INFO()
  4825. PHP_EXCEL_ARGINFO
  4826. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_getNumPictures, 0, 0, 0)
  4827. ZEND_END_ARG_INFO()
  4828. #endif
  4829. #if LIBXL_VERSION >= 0x03060000
  4830. PHP_EXCEL_ARGINFO
  4831. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_hyperlinkSize, 0, 0, 0)
  4832. ZEND_END_ARG_INFO()
  4833. PHP_EXCEL_ARGINFO
  4834. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_hyperlink, 0, 0, 1)
  4835. ZEND_ARG_INFO(0, index)
  4836. ZEND_END_ARG_INFO()
  4837. PHP_EXCEL_ARGINFO
  4838. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_delHyperlink, 0, 0, 1)
  4839. ZEND_ARG_INFO(0, index)
  4840. ZEND_END_ARG_INFO()
  4841. PHP_EXCEL_ARGINFO
  4842. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_addHyperlink, 0, 0, 5)
  4843. ZEND_ARG_INFO(0, hyperlink)
  4844. ZEND_ARG_INFO(0, row_first)
  4845. ZEND_ARG_INFO(0, row_last)
  4846. ZEND_ARG_INFO(0, col_first)
  4847. ZEND_ARG_INFO(0, col_last)
  4848. ZEND_END_ARG_INFO()
  4849. PHP_EXCEL_ARGINFO
  4850. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_mergeSize, 0, 0, 0)
  4851. ZEND_END_ARG_INFO()
  4852. PHP_EXCEL_ARGINFO
  4853. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_merge, 0, 0, 1)
  4854. ZEND_ARG_INFO(0, index)
  4855. ZEND_END_ARG_INFO()
  4856. PHP_EXCEL_ARGINFO
  4857. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_delMergeByIndex, 0, 0, 1)
  4858. ZEND_ARG_INFO(0, index)
  4859. ZEND_END_ARG_INFO()
  4860. PHP_EXCEL_ARGINFO
  4861. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_splitInfo, 0, 0, 0)
  4862. ZEND_END_ARG_INFO()
  4863. PHP_EXCEL_ARGINFO
  4864. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_colHidden, 0, 0, 1)
  4865. ZEND_ARG_INFO(0, col)
  4866. ZEND_END_ARG_INFO()
  4867. PHP_EXCEL_ARGINFO
  4868. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_rowHidden, 0, 0, 1)
  4869. ZEND_ARG_INFO(0, row)
  4870. ZEND_END_ARG_INFO()
  4871. PHP_EXCEL_ARGINFO
  4872. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setColHidden, 0, 0, 2)
  4873. ZEND_ARG_INFO(0, col)
  4874. ZEND_ARG_INFO(0, hidden)
  4875. ZEND_END_ARG_INFO()
  4876. PHP_EXCEL_ARGINFO
  4877. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setRowHidden, 0, 0, 2)
  4878. ZEND_ARG_INFO(0, row)
  4879. ZEND_ARG_INFO(0, hidden)
  4880. ZEND_END_ARG_INFO()
  4881. #endif
  4882. PHP_EXCEL_ARGINFO
  4883. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_isLicensed, 0, 0, 0)
  4884. ZEND_END_ARG_INFO()
  4885. #if LIBXL_VERSION >= 0x03060200
  4886. PHP_EXCEL_ARGINFO
  4887. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_setAutoFitArea, 0, 0, 0)
  4888. ZEND_ARG_INFO(0, row_start)
  4889. ZEND_ARG_INFO(0, row_end)
  4890. ZEND_ARG_INFO(0, col_start)
  4891. ZEND_ARG_INFO(0, col_end)
  4892. ZEND_END_ARG_INFO()
  4893. PHP_EXCEL_ARGINFO
  4894. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_printRepeatRows, 0, 0, 0)
  4895. ZEND_END_ARG_INFO()
  4896. PHP_EXCEL_ARGINFO
  4897. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_printRepeatCols, 0, 0, 0)
  4898. ZEND_END_ARG_INFO()
  4899. PHP_EXCEL_ARGINFO
  4900. ZEND_BEGIN_ARG_INFO_EX(arginfo_Sheet_printArea, 0, 0, 0)
  4901. ZEND_END_ARG_INFO()
  4902. #endif
  4903. #define EXCEL_ME(class_name, function_name, arg_info, flags) \
  4904. PHP_ME( Excel ## class_name, function_name, arg_info, flags)
  4905. zend_function_entry excel_funcs_book[] = {
  4906. EXCEL_ME(Book, addFont, arginfo_Book_addFont, 0)
  4907. EXCEL_ME(Book, addFormat, arginfo_Book_addFormat, 0)
  4908. #ifdef HAVE_LIBXL_243_PLUS
  4909. EXCEL_ME(Book, getAllFormats, arginfo_Book_getAllFormats, 0)
  4910. #endif
  4911. EXCEL_ME(Book, getError, arginfo_Book_getError, 0)
  4912. EXCEL_ME(Book, loadFile, arginfo_Book_loadFile, 0)
  4913. EXCEL_ME(Book, load, arginfo_Book_load, 0)
  4914. EXCEL_ME(Book, save, arginfo_Book_save, 0)
  4915. EXCEL_ME(Book, getSheet, arginfo_Book_getSheet, 0)
  4916. EXCEL_ME(Book, getSheetByName, arginfo_Book_getSheetByName, 0)
  4917. EXCEL_ME(Book, addSheet, arginfo_Book_addSheet, 0)
  4918. EXCEL_ME(Book, copySheet, arginfo_Book_copySheet, 0)
  4919. EXCEL_ME(Book, deleteSheet, arginfo_Book_deleteSheet, 0)
  4920. EXCEL_ME(Book, sheetCount, arginfo_Book_sheetCount, 0)
  4921. EXCEL_ME(Book, activeSheet, arginfo_Book_activeSheet, 0)
  4922. EXCEL_ME(Book, getCustomFormat, arginfo_Book_getCustomFormat, 0)
  4923. EXCEL_ME(Book, addCustomFormat, arginfo_Book_addCustomFormat, 0)
  4924. EXCEL_ME(Book, packDate, arginfo_Book_packDate, 0)
  4925. EXCEL_ME(Book, packDateValues, arginfo_Book_packDateValues, 0)
  4926. EXCEL_ME(Book, unpackDate, arginfo_Book_unpackDate, 0)
  4927. EXCEL_ME(Book, getActiveSheet, arginfo_Book_getActiveSheet, 0)
  4928. EXCEL_ME(Book, setActiveSheet, arginfo_Book_setActiveSheet, 0)
  4929. EXCEL_ME(Book, getDefaultFont, arginfo_Book_getDefaultFont, 0)
  4930. EXCEL_ME(Book, setDefaultFont, arginfo_Book_setDefaultFont, 0)
  4931. EXCEL_ME(Book, setLocale, arginfo_Book_setLocale, 0)
  4932. EXCEL_ME(Book, addPictureFromFile, arginfo_Book_addPictureFromFile, 0)
  4933. EXCEL_ME(Book, addPictureFromString, arginfo_Book_addPictureFromString, 0)
  4934. #ifdef LIBXL_VERSION
  4935. EXCEL_ME(Book, rgbMode, arginfo_Book_rgbMode, 0)
  4936. EXCEL_ME(Book, setRGBMode, arginfo_Book_setRGBMode, 0)
  4937. EXCEL_ME(Book, colorPack, arginfo_Book_colorPack, 0)
  4938. EXCEL_ME(Book, colorUnpack, arginfo_Book_colorUnpack, 0)
  4939. #endif
  4940. #if LIBXL_VERSION >= 0x03050300
  4941. EXCEL_ME(Book, isDate1904, arginfo_Book_isDate1904, 0)
  4942. EXCEL_ME(Book, setDate1904, arginfo_Book_setDate1904, 0)
  4943. #endif
  4944. EXCEL_ME(Book, __construct, arginfo_Book___construct, 0)
  4945. #if LIBXL_VERSION >= 0x03020000
  4946. EXCEL_ME(Book, biffVersion, arginfo_Book_biffVersion, 0)
  4947. EXCEL_ME(Book, setRefR1C1, arginfo_Book_setRefR1C1, 0)
  4948. EXCEL_ME(Book, getRefR1C1, arginfo_Book_getRefR1C1, 0)
  4949. EXCEL_ME(Book, getPicture, arginfo_Book_getPicture, 0)
  4950. EXCEL_ME(Book, getNumPictures, arginfo_Book_getNumPictures, 0)
  4951. EXCEL_ME(Book, insertSheet, arginfo_Book_insertSheet, 0)
  4952. #endif
  4953. #if LIBXL_VERSION >= 0x03050401
  4954. EXCEL_ME(Book, isTemplate, arginfo_Book_isTemplate, 0)
  4955. EXCEL_ME(Book, setTemplate, arginfo_Book_setTemplate, 0)
  4956. #endif
  4957. #if LIBXL_VERSION >= 0x03060000
  4958. EXCEL_ME(Book, sheetType, arginfo_Book_sheetType, 0)
  4959. #endif
  4960. {NULL, NULL, NULL}
  4961. };
  4962. zend_function_entry excel_funcs_sheet[] = {
  4963. EXCEL_ME(Sheet, __construct, arginfo_Sheet___construct, 0)
  4964. EXCEL_ME(Sheet, cellType, arginfo_Sheet_cellType, 0)
  4965. EXCEL_ME(Sheet, cellFormat, arginfo_Sheet_cellFormat, 0)
  4966. #ifdef HAVE_LIBXL_243_PLUS
  4967. EXCEL_ME(Sheet, setCellFormat, arginfo_Sheet_setCellFormat, 0)
  4968. #endif
  4969. EXCEL_ME(Sheet, read, arginfo_Sheet_read, 0)
  4970. EXCEL_ME(Sheet, readRow, arginfo_Sheet_readRow, 0)
  4971. EXCEL_ME(Sheet, readCol, arginfo_Sheet_readCol, 0)
  4972. EXCEL_ME(Sheet, write, arginfo_Sheet_write, 0)
  4973. EXCEL_ME(Sheet, writeRow, arginfo_Sheet_writeRow, 0)
  4974. EXCEL_ME(Sheet, writeCol, arginfo_Sheet_writeCol, 0)
  4975. EXCEL_ME(Sheet, isFormula, arginfo_Sheet_isFormula, 0)
  4976. EXCEL_ME(Sheet, isDate, arginfo_Sheet_isDate, 0)
  4977. EXCEL_ME(Sheet, insertRow, arginfo_Sheet_insertRow, 0)
  4978. EXCEL_ME(Sheet, insertCol, arginfo_Sheet_insertCol, 0)
  4979. EXCEL_ME(Sheet, removeRow, arginfo_Sheet_removeRow, 0)
  4980. EXCEL_ME(Sheet, removeCol, arginfo_Sheet_removeCol, 0)
  4981. EXCEL_ME(Sheet, colWidth, arginfo_Sheet_colWidth, 0)
  4982. EXCEL_ME(Sheet, rowHeight, arginfo_Sheet_rowHeight, 0)
  4983. EXCEL_ME(Sheet, readComment, arginfo_Sheet_readComment, 0)
  4984. EXCEL_ME(Sheet, writeComment, arginfo_Sheet_writeComment, 0)
  4985. EXCEL_ME(Sheet, setColWidth, arginfo_Sheet_setColWidth, 0)
  4986. EXCEL_ME(Sheet, setRowHeight, arginfo_Sheet_setRowHeight, 0)
  4987. EXCEL_ME(Sheet, getMerge, arginfo_Sheet_getMerge, 0)
  4988. EXCEL_ME(Sheet, setMerge, arginfo_Sheet_setMerge, 0)
  4989. EXCEL_ME(Sheet, deleteMerge, arginfo_Sheet_deleteMerge, 0)
  4990. EXCEL_ME(Sheet, addPictureScaled, arginfo_Sheet_addPictureScaled, 0)
  4991. EXCEL_ME(Sheet, addPictureDim, arginfo_Sheet_addPictureDim, 0)
  4992. EXCEL_ME(Sheet, horPageBreak, arginfo_Sheet_horPageBreak, 0)
  4993. EXCEL_ME(Sheet, verPageBreak, arginfo_Sheet_verPageBreak, 0)
  4994. EXCEL_ME(Sheet, splitSheet, arginfo_Sheet_splitSheet, 0)
  4995. EXCEL_ME(Sheet, groupRows, arginfo_Sheet_groupRows, 0)
  4996. EXCEL_ME(Sheet, groupCols, arginfo_Sheet_groupCols, 0)
  4997. EXCEL_ME(Sheet, clear, arginfo_Sheet_clear, 0)
  4998. EXCEL_ME(Sheet, copy, arginfo_Sheet_copy, 0)
  4999. EXCEL_ME(Sheet, firstRow, arginfo_Sheet_firstRow, 0)
  5000. EXCEL_ME(Sheet, lastRow, arginfo_Sheet_lastRow, 0)
  5001. EXCEL_ME(Sheet, firstCol, arginfo_Sheet_firstCol, 0)
  5002. EXCEL_ME(Sheet, lastCol, arginfo_Sheet_lastCol, 0)
  5003. EXCEL_ME(Sheet, displayGridlines, arginfo_Sheet_displayGridlines, 0)
  5004. EXCEL_ME(Sheet, printGridlines, arginfo_Sheet_printGridlines, 0)
  5005. EXCEL_ME(Sheet, setDisplayGridlines, arginfo_Sheet_setDisplayGridlines, 0)
  5006. EXCEL_ME(Sheet, setPrintGridlines, arginfo_Sheet_setPrintGridlines, 0)
  5007. EXCEL_ME(Sheet, zoom, arginfo_Sheet_zoom, 0)
  5008. EXCEL_ME(Sheet, zoomPrint, arginfo_Sheet_zoomPrint, 0)
  5009. EXCEL_ME(Sheet, setZoom, arginfo_Sheet_setZoom, 0)
  5010. EXCEL_ME(Sheet, setZoomPrint, arginfo_Sheet_setZoomPrint, 0)
  5011. EXCEL_ME(Sheet, setLandscape, arginfo_Sheet_setLandscape, 0)
  5012. EXCEL_ME(Sheet, landscape, arginfo_Sheet_landscape, 0)
  5013. EXCEL_ME(Sheet, paper, arginfo_Sheet_paper, 0)
  5014. EXCEL_ME(Sheet, setPaper, arginfo_Sheet_setPaper, 0)
  5015. EXCEL_ME(Sheet, header, arginfo_Sheet_header, 0)
  5016. EXCEL_ME(Sheet, footer, arginfo_Sheet_footer, 0)
  5017. EXCEL_ME(Sheet, setHeader, arginfo_Sheet_setHeader, 0)
  5018. EXCEL_ME(Sheet, setFooter, arginfo_Sheet_setFooter, 0)
  5019. EXCEL_ME(Sheet, headerMargin, arginfo_Sheet_headerMargin, 0)
  5020. EXCEL_ME(Sheet, footerMargin, arginfo_Sheet_footerMargin, 0)
  5021. EXCEL_ME(Sheet, hcenter, arginfo_Sheet_hcenter, 0)
  5022. EXCEL_ME(Sheet, vcenter, arginfo_Sheet_vcenter, 0)
  5023. EXCEL_ME(Sheet, setHCenter, arginfo_Sheet_setHCenter, 0)
  5024. EXCEL_ME(Sheet, setVCenter, arginfo_Sheet_setVCenter, 0)
  5025. EXCEL_ME(Sheet, marginLeft, arginfo_Sheet_marginLeft, 0)
  5026. EXCEL_ME(Sheet, marginRight, arginfo_Sheet_marginRight, 0)
  5027. EXCEL_ME(Sheet, marginTop, arginfo_Sheet_marginTop, 0)
  5028. EXCEL_ME(Sheet, marginBottom, arginfo_Sheet_marginBottom, 0)
  5029. EXCEL_ME(Sheet, setMarginLeft, arginfo_Sheet_setMarginLeft, 0)
  5030. EXCEL_ME(Sheet, setMarginRight, arginfo_Sheet_setMarginRight, 0)
  5031. EXCEL_ME(Sheet, setMarginTop, arginfo_Sheet_setMarginTop, 0)
  5032. EXCEL_ME(Sheet, setMarginBottom, arginfo_Sheet_setMarginBottom, 0)
  5033. EXCEL_ME(Sheet, printHeaders, arginfo_Sheet_printHeaders, 0)
  5034. EXCEL_ME(Sheet, setPrintHeaders, arginfo_Sheet_setPrintHeaders, 0)
  5035. EXCEL_ME(Sheet, name, arginfo_Sheet_name, 0)
  5036. EXCEL_ME(Sheet, setName, arginfo_Sheet_setName, 0)
  5037. EXCEL_ME(Sheet, protect, arginfo_Sheet_protect, 0)
  5038. EXCEL_ME(Sheet, setProtect, arginfo_Sheet_setProtect, 0)
  5039. #if LIBXL_VERSION >= 0x03010000
  5040. EXCEL_ME(Sheet, setNamedRange, arginfo_Sheet_setNamedRange, 0)
  5041. EXCEL_ME(Sheet, delNamedRange, arginfo_Sheet_delNamedRange, 0)
  5042. EXCEL_ME(Sheet, setPrintRepeatRows, arginfo_Sheet_setPrintRepeatRows, 0)
  5043. EXCEL_ME(Sheet, setPrintRepeatCols, arginfo_Sheet_setPrintRepeatCols, 0)
  5044. EXCEL_ME(Sheet, setPrintArea, arginfo_Sheet_setPrintArea, 0)
  5045. EXCEL_ME(Sheet, clearPrintRepeats, arginfo_Sheet_clearPrintRepeats, 0)
  5046. EXCEL_ME(Sheet, clearPrintArea, arginfo_Sheet_clearPrintArea, 0)
  5047. EXCEL_ME(Sheet, getGroupSummaryRight, arginfo_Sheet_getGroupSummaryRight, 0)
  5048. EXCEL_ME(Sheet, setGroupSummaryBelow, arginfo_Sheet_setGroupSummaryBelow, 0)
  5049. EXCEL_ME(Sheet, getGroupSummaryBelow, arginfo_Sheet_getGroupSummaryBelow, 0)
  5050. EXCEL_ME(Sheet, setGroupSummaryRight, arginfo_Sheet_setGroupSummaryRight, 0)
  5051. #endif
  5052. #if LIBXL_VERSION >= 0x03020000
  5053. EXCEL_ME(Sheet, setPrintFit, arginfo_Sheet_setPrintFit, 0)
  5054. EXCEL_ME(Sheet, getPrintFit, arginfo_Sheet_getPrintFit, 0)
  5055. EXCEL_ME(Sheet, getNamedRange, arginfo_Sheet_getNamedRange, 0)
  5056. EXCEL_ME(Sheet, getIndexRange, arginfo_Sheet_getIndexRange, 0)
  5057. EXCEL_ME(Sheet, namedRangeSize, arginfo_Sheet_namedRangeSize, 0)
  5058. EXCEL_ME(Sheet, getVerPageBreakSize, arginfo_Sheet_getVerPageBreakSize, 0)
  5059. EXCEL_ME(Sheet, getVerPageBreak, arginfo_Sheet_getVerPageBreak, 0)
  5060. EXCEL_ME(Sheet, getHorPageBreak, arginfo_Sheet_getHorPageBreak, 0)
  5061. EXCEL_ME(Sheet, getHorPageBreakSize, arginfo_Sheet_getHorPageBreakSize, 0)
  5062. EXCEL_ME(Sheet, getNumPictures, arginfo_Sheet_getNumPictures, 0)
  5063. EXCEL_ME(Sheet, getPictureInfo, arginfo_Sheet_getPictureInfo, 0)
  5064. #endif
  5065. #if LIBXL_VERSION >= 0x03020300
  5066. EXCEL_ME(Sheet, setHidden, arginfo_Sheet_setHidden, 0)
  5067. EXCEL_ME(Sheet, isHidden, arginfo_Sheet_isHidden, 0)
  5068. #endif
  5069. #if LIBXL_VERSION >= 0x03020400
  5070. EXCEL_ME(Sheet, setTopLeftView, arginfo_Sheet_setTopLeftView, 0)
  5071. EXCEL_ME(Sheet, getTopLeftView, arginfo_Sheet_getTopLeftView, 0)
  5072. EXCEL_ME(Sheet, rowColToAddr, arginfo_Sheet_rowColToAddr, 0)
  5073. EXCEL_ME(Sheet, addrToRowCol, arginfo_Sheet_addrToRowCol, 0)
  5074. #endif
  5075. #if LIBXL_VERSION >= 0x03050401
  5076. EXCEL_ME(Sheet, getRightToLeft, arginfo_Sheet_getRightToLeft, 0)
  5077. EXCEL_ME(Sheet, setRightToLeft, arginfo_Sheet_setRightToLeft, 0)
  5078. #endif
  5079. #if LIBXL_VERSION >= 0x03060000
  5080. EXCEL_ME(Sheet, hyperlinkSize, arginfo_Sheet_hyperlinkSize, 0)
  5081. EXCEL_ME(Sheet, hyperlink, arginfo_Sheet_hyperlink, 0)
  5082. EXCEL_ME(Sheet, delHyperlink, arginfo_Sheet_delHyperlink, 0)
  5083. EXCEL_ME(Sheet, addHyperlink, arginfo_Sheet_addHyperlink, 0)
  5084. EXCEL_ME(Sheet, mergeSize, arginfo_Sheet_mergeSize, 0)
  5085. EXCEL_ME(Sheet, merge, arginfo_Sheet_merge, 0)
  5086. EXCEL_ME(Sheet, delMergeByIndex, arginfo_Sheet_delMergeByIndex, 0)
  5087. EXCEL_ME(Sheet, splitInfo, arginfo_Sheet_splitInfo, 0)
  5088. EXCEL_ME(Sheet, colHidden, arginfo_Sheet_colHidden, 0)
  5089. EXCEL_ME(Sheet, rowHidden, arginfo_Sheet_rowHidden, 0)
  5090. EXCEL_ME(Sheet, setColHidden, arginfo_Sheet_setColHidden, 0)
  5091. EXCEL_ME(Sheet, setRowHidden, arginfo_Sheet_setRowHidden, 0)
  5092. #endif
  5093. EXCEL_ME(Sheet, isLicensed, arginfo_Sheet_isLicensed, 0)
  5094. #if LIBXL_VERSION >= 0x03060200
  5095. EXCEL_ME(Sheet, setAutoFitArea, arginfo_Sheet_setAutoFitArea, 0)
  5096. EXCEL_ME(Sheet, printRepeatRows, arginfo_Sheet_printRepeatRows, 0)
  5097. EXCEL_ME(Sheet, printRepeatCols, arginfo_Sheet_printRepeatCols, 0)
  5098. EXCEL_ME(Sheet, printArea, arginfo_Sheet_printArea, 0)
  5099. #endif
  5100. {NULL, NULL, NULL}
  5101. };
  5102. zend_function_entry excel_funcs_font[] = {
  5103. EXCEL_ME(Font, size, arginfo_Font_size, 0)
  5104. EXCEL_ME(Font, name, arginfo_Font_name, 0)
  5105. EXCEL_ME(Font, underline, arginfo_Font_underline, 0)
  5106. EXCEL_ME(Font, mode, arginfo_Font_mode, 0)
  5107. EXCEL_ME(Font, color, arginfo_Font_color, 0)
  5108. EXCEL_ME(Font, bold, arginfo_Font_bold, 0)
  5109. EXCEL_ME(Font, strike, arginfo_Font_strike, 0)
  5110. EXCEL_ME(Font, italics, arginfo_Font_italics, 0)
  5111. EXCEL_ME(Font, __construct, arginfo_Font___construct, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
  5112. {NULL, NULL, NULL}
  5113. };
  5114. zend_function_entry excel_funcs_format[] = {
  5115. EXCEL_ME(Format, getFont, arginfo_Format_getFont, 0)
  5116. EXCEL_ME(Format, setFont, arginfo_Format_setFont, 0)
  5117. EXCEL_ME(Format, numberFormat, arginfo_Format_numberFormat, 0)
  5118. EXCEL_ME(Format, horizontalAlign, arginfo_Format_horizontalAlign, 0)
  5119. EXCEL_ME(Format, verticalAlign, arginfo_Format_verticalAlign, 0)
  5120. EXCEL_ME(Format, wrap, arginfo_Format_wrap, 0)
  5121. EXCEL_ME(Format, rotate, arginfo_Format_rotate, 0)
  5122. EXCEL_ME(Format, indent, arginfo_Format_indent, 0)
  5123. EXCEL_ME(Format, shrinkToFit, arginfo_Format_shrinkToFit, 0)
  5124. EXCEL_ME(Format, borderStyle, arginfo_Format_borderStyle, 0)
  5125. EXCEL_ME(Format, borderColor, arginfo_Format_borderColor, 0)
  5126. EXCEL_ME(Format, borderLeftStyle, arginfo_Format_borderLeftStyle, 0)
  5127. EXCEL_ME(Format, borderLeftColor, arginfo_Format_borderLeftColor, 0)
  5128. EXCEL_ME(Format, borderRightStyle, arginfo_Format_borderRightStyle, 0)
  5129. EXCEL_ME(Format, borderRightColor, arginfo_Format_borderRightColor, 0)
  5130. EXCEL_ME(Format, borderTopStyle, arginfo_Format_borderTopStyle, 0)
  5131. EXCEL_ME(Format, borderTopColor, arginfo_Format_borderTopColor, 0)
  5132. EXCEL_ME(Format, borderBottomStyle, arginfo_Format_borderBottomStyle, 0)
  5133. EXCEL_ME(Format, borderBottomColor, arginfo_Format_borderBottomColor, 0)
  5134. EXCEL_ME(Format, borderDiagonalStyle, arginfo_Format_borderDiagonalStyle, 0)
  5135. EXCEL_ME(Format, borderDiagonalColor, arginfo_Format_borderDiagonalColor, 0)
  5136. EXCEL_ME(Format, fillPattern, arginfo_Format_fillPattern, 0)
  5137. EXCEL_ME(Format, patternForegroundColor, arginfo_Format_patternForegroundColor, 0)
  5138. EXCEL_ME(Format, patternBackgroundColor, arginfo_Format_patternBackgroundColor, 0)
  5139. EXCEL_ME(Format, locked, arginfo_Format_locked, 0)
  5140. EXCEL_ME(Format, hidden, arginfo_Format_hidden, 0)
  5141. EXCEL_ME(Format, __construct, arginfo_Format___construct, 0)
  5142. {NULL, NULL, NULL}
  5143. };
  5144. /* {{{ PHP_MINIT_FUNCTION
  5145. */
  5146. PHP_MINIT_FUNCTION(excel)
  5147. {
  5148. REGISTER_INI_ENTRIES();
  5149. REGISTER_EXCEL_CLASS(Book, book, NULL);
  5150. REGISTER_EXCEL_CLASS(Sheet, sheet, NULL);
  5151. REGISTER_EXCEL_CLASS(Format, format, excel_format_object_clone);
  5152. REGISTER_EXCEL_CLASS(Font, font, excel_font_object_clone);
  5153. REGISTER_EXCEL_CLASS_CONST_LONG(font, "NORMAL", SCRIPT_NORMAL);
  5154. REGISTER_EXCEL_CLASS_CONST_LONG(font, "SUBSCRIPT", SCRIPT_SUB);
  5155. REGISTER_EXCEL_CLASS_CONST_LONG(font, "SUPERSCRIPT", SCRIPT_SUPER);
  5156. REGISTER_EXCEL_CLASS_CONST_LONG(font, "UNDERLINE_NONE", UNDERLINE_NONE);
  5157. REGISTER_EXCEL_CLASS_CONST_LONG(font, "UNDERLINE_SINGLE", UNDERLINE_SINGLE);
  5158. REGISTER_EXCEL_CLASS_CONST_LONG(font, "UNDERLINE_DOUBLE", UNDERLINE_DOUBLE);
  5159. REGISTER_EXCEL_CLASS_CONST_LONG(font, "UNDERLINE_SINGLEACC", UNDERLINE_SINGLEACC);
  5160. REGISTER_EXCEL_CLASS_CONST_LONG(font, "UNDERLINE_DOUBLEACC", UNDERLINE_DOUBLEACC);
  5161. REGISTER_EXCEL_CLASS_CONST_LONG(format, "AS_DATE", PHP_EXCEL_DATE);
  5162. REGISTER_EXCEL_CLASS_CONST_LONG(format, "AS_FORMULA", PHP_EXCEL_FORMULA);
  5163. REGISTER_EXCEL_CLASS_CONST_LONG(format, "AS_NUMERIC_STRING", PHP_EXCEL_NUMERIC_STRING);
  5164. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_BLACK", COLOR_BLACK);
  5165. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_WHITE", COLOR_WHITE);
  5166. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_RED", COLOR_RED);
  5167. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_BRIGHTGREEN", COLOR_BRIGHTGREEN);
  5168. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_BLUE", COLOR_BLUE);
  5169. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_YELLOW", COLOR_YELLOW);
  5170. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_PINK", COLOR_PINK);
  5171. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_TURQUOISE", COLOR_TURQUOISE);
  5172. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_DARKRED", COLOR_DARKRED);
  5173. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_GREEN", COLOR_GREEN);
  5174. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_DARKBLUE", COLOR_DARKBLUE);
  5175. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_DARKYELLOW", COLOR_DARKYELLOW);
  5176. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_VIOLET", COLOR_VIOLET);
  5177. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_TEAL", COLOR_TEAL);
  5178. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_GRAY25", COLOR_GRAY25);
  5179. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_GRAY50", COLOR_GRAY50);
  5180. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_PERIWINKLE_CF", COLOR_PERIWINKLE_CF);
  5181. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_PLUM_CF", COLOR_PLUM_CF);
  5182. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_IVORY_CF", COLOR_IVORY_CF);
  5183. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_LIGHTTURQUOISE_CF", COLOR_LIGHTTURQUOISE_CF);
  5184. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_DARKPURPLE_CF", COLOR_DARKPURPLE_CF);
  5185. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_CORAL_CF", COLOR_CORAL_CF);
  5186. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_OCEANBLUE_CF", COLOR_OCEANBLUE_CF);
  5187. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_ICEBLUE_CF", COLOR_ICEBLUE_CF);
  5188. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_DARKBLUE_CL", COLOR_DARKBLUE_CL);
  5189. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_PINK_CL", COLOR_PINK_CL);
  5190. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_YELLOW_CL", COLOR_YELLOW_CL);
  5191. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_TURQUOISE_CL", COLOR_TURQUOISE_CL);
  5192. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_VIOLET_CL", COLOR_VIOLET_CL);
  5193. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_DARKRED_CL", COLOR_DARKRED_CL);
  5194. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_TEAL_CL", COLOR_TEAL_CL);
  5195. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_BLUE_CL", COLOR_BLUE_CL);
  5196. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_SKYBLUE", COLOR_SKYBLUE);
  5197. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_LIGHTTURQUOISE", COLOR_LIGHTTURQUOISE);
  5198. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_LIGHTGREEN", COLOR_LIGHTGREEN);
  5199. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_LIGHTYELLOW", COLOR_LIGHTYELLOW);
  5200. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_PALEBLUE", COLOR_PALEBLUE);
  5201. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_ROSE", COLOR_ROSE);
  5202. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_LAVENDER", COLOR_LAVENDER);
  5203. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_TAN", COLOR_TAN);
  5204. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_LIGHTBLUE", COLOR_LIGHTBLUE);
  5205. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_AQUA", COLOR_AQUA);
  5206. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_LIME", COLOR_LIME);
  5207. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_GOLD", COLOR_GOLD);
  5208. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_LIGHTORANGE", COLOR_LIGHTORANGE);
  5209. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_ORANGE", COLOR_ORANGE);
  5210. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_BLUEGRAY", COLOR_BLUEGRAY);
  5211. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_GRAY40", COLOR_GRAY40);
  5212. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_DARKTEAL", COLOR_DARKTEAL);
  5213. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_SEAGREEN", COLOR_SEAGREEN);
  5214. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_DARKGREEN", COLOR_DARKGREEN);
  5215. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_OLIVEGREEN", COLOR_OLIVEGREEN);
  5216. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_BROWN", COLOR_BROWN);
  5217. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_PLUM", COLOR_PLUM);
  5218. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_INDIGO", COLOR_INDIGO);
  5219. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_GRAY80", COLOR_GRAY80);
  5220. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_DEFAULT_FOREGROUND", COLOR_DEFAULT_FOREGROUND);
  5221. REGISTER_EXCEL_CLASS_CONST_LONG(format, "COLOR_DEFAULT_BACKGROUND", COLOR_DEFAULT_BACKGROUND);
  5222. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_GENERAL", NUMFORMAT_GENERAL);
  5223. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_NUMBER", NUMFORMAT_NUMBER);
  5224. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_NUMBER_D2", NUMFORMAT_NUMBER_D2);
  5225. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_NUMBER_SEP", NUMFORMAT_NUMBER_SEP);
  5226. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_NUMBER_SEP_D2", NUMFORMAT_NUMBER_SEP_D2);
  5227. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CURRENCY_NEGBRA", NUMFORMAT_CURRENCY_NEGBRA);
  5228. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CURRENCY_NEGBRARED", NUMFORMAT_CURRENCY_NEGBRARED);
  5229. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CURRENCY_D2_NEGBRA", NUMFORMAT_CURRENCY_D2_NEGBRA);
  5230. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CURRENCY_D2_NEGBRARED", NUMFORMAT_CURRENCY_D2_NEGBRARED);
  5231. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_PERCENT", NUMFORMAT_PERCENT);
  5232. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_PERCENT_D2", NUMFORMAT_PERCENT_D2);
  5233. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_SCIENTIFIC_D2", NUMFORMAT_SCIENTIFIC_D2);
  5234. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_FRACTION_ONEDIG", NUMFORMAT_FRACTION_ONEDIG);
  5235. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_FRACTION_TWODIG", NUMFORMAT_FRACTION_TWODIG);
  5236. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_DATE", NUMFORMAT_DATE);
  5237. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CUSTOM_D_MON_YY", NUMFORMAT_CUSTOM_D_MON_YY);
  5238. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CUSTOM_D_MON", NUMFORMAT_CUSTOM_D_MON);
  5239. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CUSTOM_MON_YY", NUMFORMAT_CUSTOM_MON_YY);
  5240. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CUSTOM_HMM_AM", NUMFORMAT_CUSTOM_HMM_AM);
  5241. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CUSTOM_HMMSS_AM", NUMFORMAT_CUSTOM_HMMSS_AM);
  5242. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CUSTOM_HMM", NUMFORMAT_CUSTOM_HMM);
  5243. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CUSTOM_HMMSS", NUMFORMAT_CUSTOM_HMMSS);
  5244. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CUSTOM_MDYYYY_HMM", NUMFORMAT_CUSTOM_MDYYYY_HMM);
  5245. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_NUMBER_SEP_NEGBRA", NUMFORMAT_NUMBER_SEP_NEGBRA);
  5246. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_NUMBER_SEP_NEGBRARED", NUMFORMAT_NUMBER_SEP_NEGBRARED);
  5247. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_NUMBER_D2_SEP_NEGBRA", NUMFORMAT_NUMBER_D2_SEP_NEGBRA);
  5248. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_NUMBER_D2_SEP_NEGBRARED", NUMFORMAT_NUMBER_D2_SEP_NEGBRARED);
  5249. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_ACCOUNT", NUMFORMAT_ACCOUNT);
  5250. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_ACCOUNTCUR", NUMFORMAT_ACCOUNTCUR);
  5251. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_ACCOUNT_D2", NUMFORMAT_ACCOUNT_D2);
  5252. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_ACCOUNT_D2_CUR", NUMFORMAT_ACCOUNT_D2_CUR);
  5253. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CUSTOM_MMSS", NUMFORMAT_CUSTOM_MMSS);
  5254. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CUSTOM_H0MMSS", NUMFORMAT_CUSTOM_H0MMSS);
  5255. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CUSTOM_MMSS0", NUMFORMAT_CUSTOM_MMSS0);
  5256. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_CUSTOM_000P0E_PLUS0", NUMFORMAT_CUSTOM_000P0E_PLUS0);
  5257. REGISTER_EXCEL_CLASS_CONST_LONG(format, "NUMFORMAT_TEXT", NUMFORMAT_TEXT);
  5258. REGISTER_EXCEL_CLASS_CONST_LONG(format, "ALIGNH_GENERAL", ALIGNH_GENERAL);
  5259. REGISTER_EXCEL_CLASS_CONST_LONG(format, "ALIGNH_LEFT", ALIGNH_LEFT);
  5260. REGISTER_EXCEL_CLASS_CONST_LONG(format, "ALIGNH_CENTER", ALIGNH_CENTER);
  5261. REGISTER_EXCEL_CLASS_CONST_LONG(format, "ALIGNH_RIGHT", ALIGNH_RIGHT);
  5262. REGISTER_EXCEL_CLASS_CONST_LONG(format, "ALIGNH_FILL", ALIGNH_FILL);
  5263. REGISTER_EXCEL_CLASS_CONST_LONG(format, "ALIGNH_JUSTIFY", ALIGNH_JUSTIFY);
  5264. REGISTER_EXCEL_CLASS_CONST_LONG(format, "ALIGNH_MERGE", ALIGNH_MERGE);
  5265. REGISTER_EXCEL_CLASS_CONST_LONG(format, "ALIGNH_DISTRIBUTED", ALIGNH_DISTRIBUTED);
  5266. REGISTER_EXCEL_CLASS_CONST_LONG(format, "ALIGNV_TOP", ALIGNV_TOP);
  5267. REGISTER_EXCEL_CLASS_CONST_LONG(format, "ALIGNV_CENTER", ALIGNV_CENTER);
  5268. REGISTER_EXCEL_CLASS_CONST_LONG(format, "ALIGNV_BOTTOM", ALIGNV_BOTTOM);
  5269. REGISTER_EXCEL_CLASS_CONST_LONG(format, "ALIGNV_JUSTIFY", ALIGNV_JUSTIFY);
  5270. REGISTER_EXCEL_CLASS_CONST_LONG(format, "ALIGNV_DISTRIBUTED", ALIGNV_DISTRIBUTED);
  5271. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERSTYLE_NONE", BORDERSTYLE_NONE);
  5272. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERSTYLE_THIN", BORDERSTYLE_THIN);
  5273. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERSTYLE_MEDIUM", BORDERSTYLE_MEDIUM);
  5274. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERSTYLE_DASHED", BORDERSTYLE_DASHED);
  5275. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERSTYLE_DOTTED", BORDERSTYLE_DOTTED);
  5276. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERSTYLE_THICK", BORDERSTYLE_THICK);
  5277. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERSTYLE_DOUBLE", BORDERSTYLE_DOUBLE);
  5278. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERSTYLE_HAIR", BORDERSTYLE_HAIR);
  5279. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERSTYLE_MEDIUMDASHED", BORDERSTYLE_MEDIUMDASHED);
  5280. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERSTYLE_DASHDOT", BORDERSTYLE_DASHDOT);
  5281. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERSTYLE_MEDIUMDASHDOT", BORDERSTYLE_MEDIUMDASHDOT);
  5282. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERSTYLE_DASHDOTDOT", BORDERSTYLE_DASHDOTDOT);
  5283. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERSTYLE_MEDIUMDASHDOTDOT", BORDERSTYLE_MEDIUMDASHDOTDOT);
  5284. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERSTYLE_SLANTDASHDOT", BORDERSTYLE_SLANTDASHDOT);
  5285. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERDIAGONAL_NONE", BORDERDIAGONAL_NONE);
  5286. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERDIAGONAL_DOWN", BORDERDIAGONAL_DOWN);
  5287. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERDIAGONAL_UP", BORDERDIAGONAL_UP);
  5288. REGISTER_EXCEL_CLASS_CONST_LONG(format, "BORDERDIAGONAL_BOTH", BORDERDIAGONAL_BOTH);
  5289. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_NONE", FILLPATTERN_NONE);
  5290. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_SOLID", FILLPATTERN_SOLID);
  5291. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_GRAY50", FILLPATTERN_GRAY50);
  5292. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_GRAY75", FILLPATTERN_GRAY75);
  5293. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_GRAY25", FILLPATTERN_GRAY25);
  5294. #ifdef HAVE_LIBXL_243_PLUS
  5295. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_HORSTRIPE", FILLPATTERN_HORSTRIPE);
  5296. #else
  5297. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_HORSTRIPE", FILLPATTEN_HORSTRIPE);
  5298. #endif
  5299. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_VERSTRIPE", FILLPATTERN_VERSTRIPE);
  5300. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_REVDIAGSTRIPE", FILLPATTERN_REVDIAGSTRIPE);
  5301. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_DIAGSTRIPE", FILLPATTERN_DIAGSTRIPE);
  5302. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_DIAGCROSSHATCH", FILLPATTERN_DIAGCROSSHATCH);
  5303. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_THICKDIAGCROSSHATCH", FILLPATTERN_THICKDIAGCROSSHATCH);
  5304. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_THINHORSTRIPE", FILLPATTERN_THINHORSTRIPE);
  5305. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_THINVERSTRIPE", FILLPATTERN_THINVERSTRIPE);
  5306. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_THINREVDIAGSTRIPE", FILLPATTERN_THINREVDIAGSTRIPE);
  5307. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_THINDIAGSTRIPE", FILLPATTERN_THINDIAGSTRIPE);
  5308. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_THINHORCROSSHATCH", FILLPATTERN_THINHORCROSSHATCH);
  5309. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_THINDIAGCROSSHATCH", FILLPATTERN_THINDIAGCROSSHATCH);
  5310. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_GRAY12P5", FILLPATTERN_GRAY12P5);
  5311. REGISTER_EXCEL_CLASS_CONST_LONG(format, "FILLPATTERN_GRAY6P25", FILLPATTERN_GRAY6P25);
  5312. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "CELLTYPE_EMPTY", CELLTYPE_EMPTY);
  5313. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "CELLTYPE_NUMBER", CELLTYPE_NUMBER);
  5314. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "CELLTYPE_STRING", CELLTYPE_STRING);
  5315. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "CELLTYPE_BOOLEAN", CELLTYPE_BOOLEAN);
  5316. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "CELLTYPE_BLANK", CELLTYPE_BLANK);
  5317. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "CELLTYPE_ERROR", CELLTYPE_ERROR);
  5318. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "ERRORTYPE_NA", ERRORTYPE_NA);
  5319. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "ERRORTYPE_NUM", ERRORTYPE_NUM);
  5320. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "ERRORTYPE_NAME", ERRORTYPE_NAME);
  5321. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "ERRORTYPE_REF", ERRORTYPE_REF);
  5322. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "ERRORTYPE_VALUE", ERRORTYPE_VALUE);
  5323. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "ERRORTYPE_DIV_0", ERRORTYPE_DIV_0);
  5324. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "ERRORTYPE_NULL", ERRORTYPE_NULL);
  5325. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_DEFAULT", PAPER_DEFAULT);
  5326. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_LETTER", PAPER_LETTER);
  5327. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_LETTERSMALL", PAPER_LETTERSMALL);
  5328. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_TABLOID", PAPER_TABLOID);
  5329. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_LEDGER", PAPER_LEDGER);
  5330. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_LEGAL", PAPER_LEGAL);
  5331. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_STATEMENT", PAPER_STATEMENT);
  5332. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_EXECUTIVE", PAPER_EXECUTIVE);
  5333. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_A3", PAPER_A3);
  5334. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_A4", PAPER_A4);
  5335. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_A4SMALL", PAPER_A4SMALL);
  5336. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_A5", PAPER_A5);
  5337. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_B4", PAPER_B4);
  5338. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_B5", PAPER_B5);
  5339. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_FOLIO", PAPER_FOLIO);
  5340. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_QUATRO", PAPER_QUATRO);
  5341. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_10x14", PAPER_10x14);
  5342. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_10x17", PAPER_10x17);
  5343. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_NOTE", PAPER_NOTE);
  5344. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_9", PAPER_ENVELOPE_9);
  5345. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_10", PAPER_ENVELOPE_10);
  5346. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_11", PAPER_ENVELOPE_11);
  5347. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_12", PAPER_ENVELOPE_12);
  5348. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_14", PAPER_ENVELOPE_14);
  5349. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_C_SIZE", PAPER_C_SIZE);
  5350. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_D_SIZE", PAPER_D_SIZE);
  5351. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_E_SIZE", PAPER_E_SIZE);
  5352. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_DL", PAPER_ENVELOPE_DL);
  5353. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_C5", PAPER_ENVELOPE_C5);
  5354. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_C3", PAPER_ENVELOPE_C3);
  5355. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_C4", PAPER_ENVELOPE_C4);
  5356. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_C6", PAPER_ENVELOPE_C6);
  5357. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_C65", PAPER_ENVELOPE_C65);
  5358. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_B4", PAPER_ENVELOPE_B4);
  5359. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_B5", PAPER_ENVELOPE_B5);
  5360. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_B6", PAPER_ENVELOPE_B6);
  5361. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE", PAPER_ENVELOPE);
  5362. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_ENVELOPE_MONARCH", PAPER_ENVELOPE_MONARCH);
  5363. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_US_ENVELOPE", PAPER_US_ENVELOPE);
  5364. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_FANFOLD", PAPER_FANFOLD);
  5365. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_GERMAN_STD_FANFOLD", PAPER_GERMAN_STD_FANFOLD);
  5366. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "PAPER_GERMAN_LEGAL_FANFOLD", PAPER_GERMAN_LEGAL_FANFOLD);
  5367. #if LIBXL_VERSION >= 0x03020000
  5368. REGISTER_EXCEL_CLASS_CONST_LONG(book, "PICTURETYPE_PNG", PICTURETYPE_PNG);
  5369. REGISTER_EXCEL_CLASS_CONST_LONG(book, "PICTURETYPE_JPEG", PICTURETYPE_JPEG);
  5370. REGISTER_EXCEL_CLASS_CONST_LONG(book, "PICTURETYPE_WMF", PICTURETYPE_WMF);
  5371. REGISTER_EXCEL_CLASS_CONST_LONG(book, "PICTURETYPE_DIB", PICTURETYPE_DIB);
  5372. REGISTER_EXCEL_CLASS_CONST_LONG(book, "PICTURETYPE_EMF", PICTURETYPE_EMF);
  5373. REGISTER_EXCEL_CLASS_CONST_LONG(book, "PICTURETYPE_PICT", PICTURETYPE_PICT);
  5374. REGISTER_EXCEL_CLASS_CONST_LONG(book, "PICTURETYPE_TIFF", PICTURETYPE_TIFF);
  5375. #endif
  5376. #if LIBXL_VERSION >= 0x03050401
  5377. REGISTER_EXCEL_CLASS_CONST_LONG(book, "SCOPE_UNDEFINED", SCOPE_UNDEFINED);
  5378. REGISTER_EXCEL_CLASS_CONST_LONG(book, "SCOPE_WORKBOOK", SCOPE_WORKBOOK);
  5379. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "RIGHT_TO_LEFT", 1);
  5380. REGISTER_EXCEL_CLASS_CONST_LONG(sheet, "LEFT_TO_RIGHT", 0);
  5381. #endif
  5382. #if LIBXL_VERSION >= 0x03060000
  5383. REGISTER_EXCEL_CLASS_CONST_LONG(book, "SHEETTYPE_SHEET", SHEETTYPE_SHEET);
  5384. REGISTER_EXCEL_CLASS_CONST_LONG(book, "SHEETTYPE_CHART", SHEETTYPE_CHART);
  5385. REGISTER_EXCEL_CLASS_CONST_LONG(book, "SHEETTYPE_UNKNOWN", SHEETTYPE_UNKNOWN);
  5386. #endif
  5387. #if LIBXL_VERSION >= 0x03060300
  5388. REGISTER_EXCEL_CLASS_CONST_LONG(book, "POSITION_MOVE_AND_SIZE", POSITION_MOVE_AND_SIZE);
  5389. REGISTER_EXCEL_CLASS_CONST_LONG(book, "POSITION_ONLY_MOVE", POSITION_ONLY_MOVE);
  5390. REGISTER_EXCEL_CLASS_CONST_LONG(book, "POSITION_ABSOLUTE", POSITION_ABSOLUTE);
  5391. #endif
  5392. return SUCCESS;
  5393. }
  5394. /* }}} */
  5395. /* {{{ PHP_MINFO_FUNCTION
  5396. */
  5397. PHP_MINFO_FUNCTION(excel)
  5398. {
  5399. char temp_api[25];
  5400. php_info_print_table_start();
  5401. php_info_print_table_header(2, "excel support", "enabled");
  5402. php_info_print_table_header(2, "Excel Version", PHP_EXCEL_VERSION);
  5403. snprintf(temp_api, sizeof(temp_api), "%x", LIBXL_VERSION);
  5404. php_info_print_table_header(2, "LibXL Version", temp_api);
  5405. php_info_print_table_end();
  5406. }
  5407. /* }}} */
  5408. /* {{{ PHP_GINIT_FUNCTION
  5409. */
  5410. static PHP_GINIT_FUNCTION(excel)
  5411. {
  5412. memset(excel_globals, 0, sizeof(*excel_globals));
  5413. }
  5414. /* }}} */
  5415. /* {{{ excel_functions[]
  5416. */
  5417. zend_function_entry excel_functions[] = {
  5418. {NULL, NULL, NULL}
  5419. };
  5420. /* }}} */
  5421. /* {{{ excel_module_entry
  5422. */
  5423. zend_module_entry excel_module_entry = {
  5424. STANDARD_MODULE_HEADER,
  5425. "excel",
  5426. excel_functions,
  5427. PHP_MINIT(excel),
  5428. NULL,
  5429. NULL,
  5430. NULL,
  5431. PHP_MINFO(excel),
  5432. PHP_EXCEL_VERSION,
  5433. PHP_MODULE_GLOBALS(excel),
  5434. PHP_GINIT(excel),
  5435. NULL,
  5436. NULL,
  5437. STANDARD_MODULE_PROPERTIES_EX
  5438. };
  5439. /* }}} */
  5440. /*
  5441. * Local variables:
  5442. * tab-width: 4
  5443. * c-basic-offset: 4
  5444. * End:
  5445. * vim600: noet sw=4 ts=4 fdm=marker
  5446. * vim<600: noet sw=4 ts=4
  5447. */