Build the OLE Part for DocumentSummary Information.
563 {
564
565
566 $data = pack(
'v', 0xFFFE);
567
568 $data .= pack(
'v', 0x0000);
569
570 $data .= pack(
'v', 0x0106);
571
572 $data .= pack(
'v', 0x0002);
573
574 $data .= pack(
'VVVV', 0x00, 0x00, 0x00, 0x00);
575
576 $data .= pack(
'V', 0x0001);
577
578
579 $data .= pack(
'vvvvvvvv', 0xD502, 0xD5CD, 0x2E9C, 0x101B, 0x9793, 0x0008, 0x2C2B, 0xAEF9);
580
581 $data .= pack(
'V', 0x30);
582
583
584 $dataSection = array();
585 $dataSection_NumProps = 0;
586 $dataSection_Summary = '';
587 $dataSection_Content = '';
588
589
590 $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x01),
591 'offset' => array('pack' => 'V'),
592 'type' => array('pack' => 'V', 'data' => 0x02),
593 'data' => array('data' => 1252));
594 $dataSection_NumProps++;
595
596
597 if($this->_phpExcel->getProperties()->getCategory()){
598 $dataProp = $this->_phpExcel->getProperties()->getCategory();
599 $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x02),
600 'offset' => array('pack' => 'V'),
601 'type' => array('pack' => 'V', 'data' => 0x1E),
602 'data' => array('data' => $dataProp, 'length' => strlen($dataProp)));
603 $dataSection_NumProps++;
604 }
605
606 $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x17),
607 'offset' => array('pack' => 'V'),
608 'type' => array('pack' => 'V', 'data' => 0x03),
609 'data' => array('pack' => 'V', 'data' => 0x000C0000));
610 $dataSection_NumProps++;
611
612 $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x0B),
613 'offset' => array('pack' => 'V'),
614 'type' => array('pack' => 'V', 'data' => 0x0B),
615 'data' => array('data' => false));
616 $dataSection_NumProps++;
617
618 $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x10),
619 'offset' => array('pack' => 'V'),
620 'type' => array('pack' => 'V', 'data' => 0x0B),
621 'data' => array('data' => false));
622 $dataSection_NumProps++;
623
624 $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x13),
625 'offset' => array('pack' => 'V'),
626 'type' => array('pack' => 'V', 'data' => 0x0B),
627 'data' => array('data' => false));
628 $dataSection_NumProps++;
629
630 $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x16),
631 'offset' => array('pack' => 'V'),
632 'type' => array('pack' => 'V', 'data' => 0x0B),
633 'data' => array('data' => false));
634 $dataSection_NumProps++;
635
636
637
638
639
640 $dataProp = pack('v', 0x0001);
641 $dataProp .= pack('v', 0x0000);
642
643
644 $dataProp .= pack('v', 0x000A);
645 $dataProp .= pack('v', 0x0000);
646
647 $dataProp .= 'Worksheet'.chr(0);
648
649 $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x0D),
650 'offset' => array('pack' => 'V'),
651 'type' => array('pack' => 'V', 'data' => 0x101E),
652 'data' => array('data' => $dataProp, 'length' => strlen($dataProp)));
653 $dataSection_NumProps++;
654
655
656
657
658 $dataProp = pack('v', 0x0002);
659 $dataProp .= pack('v', 0x0000);
660
661
662
663 $dataProp .= pack('v', 0x001E);
664
665 $dataProp .= pack('v', 0x0000);
666
667
668 $dataProp .= pack('v', 0x0013);
669 $dataProp .= pack('v', 0x0000);
670
671 $dataProp .= 'Feuilles de calcul';
672
673
674 $dataProp .= pack('v', 0x0300);
675
676 $dataProp .= pack('v', 0x0000);
677
678 $dataProp .= pack('v', 0x0100);
679 $dataProp .= pack('v', 0x0000);
680 $dataProp .= pack('v', 0x0000);
681 $dataProp .= pack('v', 0x0000);
682
683 $dataSection[] = array('summary'=> array('pack' => 'V', 'data' => 0x0C),
684 'offset' => array('pack' => 'V'),
685 'type' => array('pack' => 'V', 'data' => 0x100C),
686 'data' => array('data' => $dataProp, 'length' => strlen($dataProp)));
687 $dataSection_NumProps++;
688
689
690
691
692 $dataSection_Content_Offset = 8 + $dataSection_NumProps * 8;
693 foreach ($dataSection as $dataProp){
694
695 $dataSection_Summary .= pack($dataProp['summary']['pack'], $dataProp['summary']['data']);
696
697 $dataSection_Summary .= pack($dataProp['offset']['pack'], $dataSection_Content_Offset);
698
699 $dataSection_Content .= pack($dataProp['type']['pack'], $dataProp['type']['data']);
700
701 if($dataProp['type']['data'] == 0x02){
702 $dataSection_Content .= pack('V', $dataProp['data']['data']);
703
704 $dataSection_Content_Offset += 4 + 4;
705 }
706 elseif($dataProp['type']['data'] == 0x03){
707 $dataSection_Content .= pack('V', $dataProp['data']['data']);
708
709 $dataSection_Content_Offset += 4 + 4;
710 }
711 elseif($dataProp['type']['data'] == 0x0B){
712 if($dataProp['data']['data'] == false){
713 $dataSection_Content .= pack('V', 0x0000);
714 } else {
715 $dataSection_Content .= pack('V', 0x0001);
716 }
717 $dataSection_Content_Offset += 4 + 4;
718 }
719 elseif($dataProp['type']['data'] == 0x1E){
720
721 $dataProp['data']['data'] .= chr(0);
722 $dataProp['data']['length'] += 1;
723
724 $dataProp['data']['length'] = $dataProp['data']['length'] + ((4 - $dataProp['data']['length'] % 4)==4 ? 0 : (4 - $dataProp['data']['length'] % 4));
725 $dataProp['data']['data'] = str_pad($dataProp['data']['data'], $dataProp['data']['length'], chr(0), STR_PAD_RIGHT);
726
727 $dataSection_Content .= pack('V', $dataProp['data']['length']);
728 $dataSection_Content .= $dataProp['data']['data'];
729
730 $dataSection_Content_Offset += 4 + 4 + strlen($dataProp['data']['data']);
731 }
732 elseif($dataProp['type']['data'] == 0x40){
733 $dataSection_Content .= $dataProp['data']['data'];
734
735 $dataSection_Content_Offset += 4 + 8;
736 }
737 else {
738
739 $dataSection_Content .= $dataProp['data']['data'];
740
741 $dataSection_Content_Offset += 4 + $dataProp['data']['length'];
742 }
743 }
744
745
746
747
748
749 $data .= pack(
'V', $dataSection_Content_Offset);
750
751 $data .= pack(
'V', $dataSection_NumProps);
752
753 $data .= $dataSection_Summary;
754
755 $data .= $dataSection_Content;
756
758 }