@@ -294,6 +294,23 @@ public function getTables()
294
294
return $ tables ;
295
295
}
296
296
297
+ /**
298
+ *
299
+ */
300
+ protected function getTableHeader ()
301
+ {
302
+ $ header = [];
303
+ $ headerRow = $ this ->getRow (0 );
304
+ foreach ($ headerRow as $ colIndex => $ colName ) {
305
+ if (empty ($ colName )) {
306
+ continue ;
307
+ }
308
+ $ header [$ colName ] = $ colIndex ;
309
+ }
310
+
311
+ return $ header ;
312
+ }
313
+
297
314
/**
298
315
* @param $row
299
316
* @param $col
@@ -422,8 +439,11 @@ public function insert($row)
422
439
{
423
440
$ this ->requireSheet ();
424
441
425
- $ sheetTitle = $ this ->sheet ->getProperties ()->getTitle ();
442
+ if (self ::isKeyValueRow ($ row )) {
443
+ $ row = $ this ->convertKeyValueRow ($ row );
444
+ }
426
445
446
+ $ sheetTitle = $ this ->sheet ->getProperties ()->getTitle ();
427
447
$ range = $ sheetTitle .'!A:A ' ;
428
448
$ requestBody = new \Google \Service \Sheets \ValueRange ([
429
449
'values ' => [
@@ -480,12 +500,43 @@ public function getTranskey() {
480
500
public function getRow ($ row )
481
501
{
482
502
$ this ->requireSheetTitle ();
483
- $ range = '\'' .$ this ->sheetTitle .'\'! ' . $ row .': ' .$ row ;
503
+ $ range = '\'' .$ this ->sheetTitle .'\'!A ' .( $ row + 1 ) .': ' .( $ row + 1 ) ;
484
504
$ response = $ this ->service ->spreadsheets_values ->get ($ this ->spreadsheetId , $ range );
485
505
486
506
return $ response ->values [0 ];
487
507
}
488
508
509
+ /**
510
+ *
511
+ */
512
+ protected function convertKeyValueRow ($ row )
513
+ {
514
+ $ tempRow = $ row ;
515
+ $ size = count ($ tempRow );
516
+ if (!isset ($ row [$ size - 1 ])) {
517
+ $ row [$ size - 1 ] = '' ;
518
+ }
519
+ $ header = $ this ->getTableHeader ();
520
+ foreach ($ tempRow as $ key => $ value ) {
521
+ if (isset ($ header [$ key ])) {
522
+ if (isset ($ row [$ header [$ key ]])) {
523
+ $ row [] = $ row [$ header [$ key ]];
524
+ }
525
+ $ row [$ header [$ key ]] = $ value ;
526
+ unset($ row [$ key ]);
527
+ }
528
+ }
529
+ $ maxKey = max (array_keys ($ row ));
530
+ for ($ index = 0 ; $ index < $ maxKey ; $ index ++) {
531
+ if (!isset ($ row [$ index ])) {
532
+ $ row [$ index ] = '' ;
533
+ }
534
+ }
535
+ ksort ($ row );
536
+
537
+ return $ row ;
538
+ }
539
+
489
540
/**
490
541
* @return int
491
542
*/
@@ -697,4 +748,16 @@ protected static function transformArrayToOneBased($values)
697
748
698
749
return $ newValues ;
699
750
}
751
+
752
+ /**
753
+ *
754
+ */
755
+ protected static function isKeyValueRow ($ row )
756
+ {
757
+ if (array () === $ row ) {
758
+ return false ;
759
+ }
760
+
761
+ return array_keys ($ row ) !== range (0 , count ($ row ) - 1 );
762
+ }
700
763
}
0 commit comments