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