Ver Fonte

Feat(setRow): Support Multiple lines

viest há 6 anos atrás
pai
commit
e2c00f5856
3 ficheiros alterados com 29 adições e 2 exclusões
  1. 4 0
      kernel/include.h
  2. 20 1
      kernel/write.c
  3. 5 1
      tests/012.phpt

+ 4 - 0
kernel/include.h

@@ -55,6 +55,9 @@ static inline xls_object *php_vtiful_xls_fetch_object(zend_object *obj) {
 #define ROW(range) \
     lxw_name_to_row(range)
 
+#define ROWS(range) \
+    lxw_name_to_row(range), lxw_name_to_row_2(range)
+
 #define SHEET_LINE_INIT(obj_p) \
     obj_p->line = 0;
 
@@ -82,6 +85,7 @@ void auto_filter(zend_string *range, xls_resource_t *res);
 void merge_cells(zend_string *range, zend_string *value, xls_resource_t *res);
 void set_column(zend_string *range, double width, xls_resource_t *res, lxw_format *format);
 void set_row(zend_string *range, double height, xls_resource_t *res, lxw_format *format);
+void worksheet_set_rows(lxw_row_t start, lxw_row_t end, double height, xls_resource_t *res, lxw_format *format);
 lxw_error workbook_file(xls_resource_t *self);
 
 void xls_file_path(zend_string *file_name, zval *dir_path, zval *file_path);

+ 20 - 1
kernel/write.c

@@ -89,7 +89,26 @@ void set_column(zend_string *range, double width, xls_resource_t *res, lxw_forma
  */
 void set_row(zend_string *range, double height, xls_resource_t *res, lxw_format *format)
 {
-    worksheet_set_row(res->worksheet, ROW(ZSTR_VAL(range)), height, format);
+    char *rows = ZSTR_VAL(range);
+
+    if (strchr(rows, ':')) {
+        worksheet_set_rows(ROWS(rows), height, res, format);
+    } else {
+        worksheet_set_row(res->worksheet, ROW(rows), height, format);
+    }
+}
+
+/*
+ * Set rows format
+ */
+void worksheet_set_rows(lxw_row_t start, lxw_row_t end, double height, xls_resource_t *res, lxw_format *format)
+{
+    while (1) {
+        worksheet_set_row(res->worksheet, end, height, format);
+        if (end == start)
+            break;
+        end--;
+    }
 }
 
 /*

+ 5 - 1
tests/012.phpt

@@ -13,8 +13,12 @@ $fileHandle = $fileObject->getHandle();
 $boldStyle = \Vtiful\Kernel\Format::bold($fileHandle);
 
 $filePath = $fileObject->header(['name', 'age'])
-    ->data([['viest', 21]])
+    ->data([
+        ['viest', 21],
+        ['wjx',   21]
+    ])
     ->setRow('A1', 200, $boldStyle)
+    ->setRow('A2:A3', 200, $boldStyle)
     ->output();
 
 var_dump($filePath);