Differences Between: [Versions 310 and 311] [Versions 311 and 400] [Versions 311 and 401] [Versions 311 and 402] [Versions 311 and 403] [Versions 39 and 311]
1 <?php 2 3 namespace PhpOffice\PhpSpreadsheet\Writer\Xlsx; 4 5 use PhpOffice\PhpSpreadsheet\Shared\XMLWriter; 6 use PhpOffice\PhpSpreadsheet\Spreadsheet; 7 8 class DocProps extends WriterPart 9 { 10 /** 11 * Write docProps/app.xml to XML format. 12 * 13 * @return string XML Output 14 */ 15 public function writeDocPropsApp(Spreadsheet $spreadsheet) 16 { 17 // Create XML writer 18 $objWriter = null; 19 if ($this->getParentWriter()->getUseDiskCaching()) { 20 $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); 21 } else { 22 $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); 23 } 24 25 // XML header 26 $objWriter->startDocument('1.0', 'UTF-8', 'yes'); 27 28 // Properties 29 $objWriter->startElement('Properties'); 30 $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties'); 31 $objWriter->writeAttribute('xmlns:vt', 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes'); 32 33 // Application 34 $objWriter->writeElement('Application', 'Microsoft Excel'); 35 36 // DocSecurity 37 $objWriter->writeElement('DocSecurity', '0'); 38 39 // ScaleCrop 40 $objWriter->writeElement('ScaleCrop', 'false'); 41 42 // HeadingPairs 43 $objWriter->startElement('HeadingPairs'); 44 45 // Vector 46 $objWriter->startElement('vt:vector'); 47 $objWriter->writeAttribute('size', '2'); 48 $objWriter->writeAttribute('baseType', 'variant'); 49 50 // Variant 51 $objWriter->startElement('vt:variant'); 52 $objWriter->writeElement('vt:lpstr', 'Worksheets'); 53 $objWriter->endElement(); 54 55 // Variant 56 $objWriter->startElement('vt:variant'); 57 $objWriter->writeElement('vt:i4', $spreadsheet->getSheetCount()); 58 $objWriter->endElement(); 59 60 $objWriter->endElement(); 61 62 $objWriter->endElement(); 63 64 // TitlesOfParts 65 $objWriter->startElement('TitlesOfParts'); 66 67 // Vector 68 $objWriter->startElement('vt:vector'); 69 $objWriter->writeAttribute('size', $spreadsheet->getSheetCount()); 70 $objWriter->writeAttribute('baseType', 'lpstr'); 71 72 $sheetCount = $spreadsheet->getSheetCount(); 73 for ($i = 0; $i < $sheetCount; ++$i) { 74 $objWriter->writeElement('vt:lpstr', $spreadsheet->getSheet($i)->getTitle()); 75 } 76 77 $objWriter->endElement(); 78 79 $objWriter->endElement(); 80 81 // Company 82 $objWriter->writeElement('Company', $spreadsheet->getProperties()->getCompany()); 83 84 // Company 85 $objWriter->writeElement('Manager', $spreadsheet->getProperties()->getManager()); 86 87 // LinksUpToDate 88 $objWriter->writeElement('LinksUpToDate', 'false'); 89 90 // SharedDoc 91 $objWriter->writeElement('SharedDoc', 'false'); 92 93 // HyperlinksChanged 94 $objWriter->writeElement('HyperlinksChanged', 'false'); 95 96 // AppVersion 97 $objWriter->writeElement('AppVersion', '12.0000'); 98 99 $objWriter->endElement(); 100 101 // Return 102 return $objWriter->getData(); 103 } 104 105 /** 106 * Write docProps/core.xml to XML format. 107 * 108 * @return string XML Output 109 */ 110 public function writeDocPropsCore(Spreadsheet $spreadsheet) 111 { 112 // Create XML writer 113 $objWriter = null; 114 if ($this->getParentWriter()->getUseDiskCaching()) { 115 $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); 116 } else { 117 $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); 118 } 119 120 // XML header 121 $objWriter->startDocument('1.0', 'UTF-8', 'yes'); 122 123 // cp:coreProperties 124 $objWriter->startElement('cp:coreProperties'); 125 $objWriter->writeAttribute('xmlns:cp', 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties'); 126 $objWriter->writeAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/'); 127 $objWriter->writeAttribute('xmlns:dcterms', 'http://purl.org/dc/terms/'); 128 $objWriter->writeAttribute('xmlns:dcmitype', 'http://purl.org/dc/dcmitype/'); 129 $objWriter->writeAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); 130 131 // dc:creator 132 $objWriter->writeElement('dc:creator', $spreadsheet->getProperties()->getCreator()); 133 134 // cp:lastModifiedBy 135 $objWriter->writeElement('cp:lastModifiedBy', $spreadsheet->getProperties()->getLastModifiedBy()); 136 137 // dcterms:created 138 $objWriter->startElement('dcterms:created'); 139 $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF'); 140 $objWriter->writeRawData(date(DATE_W3C, $spreadsheet->getProperties()->getCreated())); 141 $objWriter->endElement(); 142 143 // dcterms:modified 144 $objWriter->startElement('dcterms:modified'); 145 $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF'); 146 $objWriter->writeRawData(date(DATE_W3C, $spreadsheet->getProperties()->getModified())); 147 $objWriter->endElement(); 148 149 // dc:title 150 $objWriter->writeElement('dc:title', $spreadsheet->getProperties()->getTitle()); 151 152 // dc:description 153 $objWriter->writeElement('dc:description', $spreadsheet->getProperties()->getDescription()); 154 155 // dc:subject 156 $objWriter->writeElement('dc:subject', $spreadsheet->getProperties()->getSubject()); 157 158 // cp:keywords 159 $objWriter->writeElement('cp:keywords', $spreadsheet->getProperties()->getKeywords()); 160 161 // cp:category 162 $objWriter->writeElement('cp:category', $spreadsheet->getProperties()->getCategory()); 163 164 $objWriter->endElement(); 165 166 // Return 167 return $objWriter->getData(); 168 } 169 170 /** 171 * Write docProps/custom.xml to XML format. 172 * 173 * @return string XML Output 174 */ 175 public function writeDocPropsCustom(Spreadsheet $spreadsheet) 176 { 177 $customPropertyList = $spreadsheet->getProperties()->getCustomProperties(); 178 if (empty($customPropertyList)) { 179 return; 180 } 181 182 // Create XML writer 183 $objWriter = null; 184 if ($this->getParentWriter()->getUseDiskCaching()) { 185 $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); 186 } else { 187 $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); 188 } 189 190 // XML header 191 $objWriter->startDocument('1.0', 'UTF-8', 'yes'); 192 193 // cp:coreProperties 194 $objWriter->startElement('Properties'); 195 $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/officeDocument/2006/custom-properties'); 196 $objWriter->writeAttribute('xmlns:vt', 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes'); 197 198 foreach ($customPropertyList as $key => $customProperty) { 199 $propertyValue = $spreadsheet->getProperties()->getCustomPropertyValue($customProperty); 200 $propertyType = $spreadsheet->getProperties()->getCustomPropertyType($customProperty); 201 202 $objWriter->startElement('property'); 203 $objWriter->writeAttribute('fmtid', '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}'); 204 $objWriter->writeAttribute('pid', $key + 2); 205 $objWriter->writeAttribute('name', $customProperty); 206 207 switch ($propertyType) { 208 case 'i': 209 $objWriter->writeElement('vt:i4', $propertyValue); 210 211 break; 212 case 'f': 213 $objWriter->writeElement('vt:r8', $propertyValue); 214 215 break; 216 case 'b': 217 $objWriter->writeElement('vt:bool', ($propertyValue) ? 'true' : 'false'); 218 219 break; 220 case 'd': 221 $objWriter->startElement('vt:filetime'); 222 $objWriter->writeRawData(date(DATE_W3C, $propertyValue)); 223 $objWriter->endElement(); 224 225 break; 226 default: 227 $objWriter->writeElement('vt:lpwstr', $propertyValue); 228 229 break; 230 } 231 232 $objWriter->endElement(); 233 } 234 235 $objWriter->endElement(); 236 237 return $objWriter->getData(); 238 } 239 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body