-
Couldn't load subscription status.
- Fork 2.7k
Open
Labels
@dmgruben
Description
Describe the problem
Word 2007 uses <w:checkBox> instead of w14:checkBox and <w:ffData> instead of <w:sdt>:
<w:ffData> <w:checkBox> <w:size w:val="20" /> <w:checked w:val="true" /> </w:checkBox> </w:ffData>
Describe the expected behavior
I wrote a method in a subclass that supports this:
/** * Extend setCheckbox so it allows for the <w:checkBox> and <w:checked> tag within <w::ffData> * @see https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.wordprocessing.checkbox?view=openxml-3.0.1#remarks * @see https://learn.microsoft.com/en-us/dotnet/api/documentformat.openxml.wordprocessing.checked?view=openxml-3.0.1#remarks * @param string $search * @param bool $checked * @return void */ public function setCheckbox(string $search, bool $checked): void { parent::setCheckbox($search, $checked); $search = parent::ensureMacroCompleted($search); $blockType = 'w:ffData'; $where = $this->findContainingXmlBlockForMacro($search, $blockType); if (!is_array($where)) { return; } $checkbox_end_tag = '</w:checkBox>'; $block = $this->getSlice($where['start'], $where['end']); // test if the block contains the <w:checkBox> tag if (!is_string($block) || !str_contains($block, $checkbox_end_tag)) { return; } $val = $checked ? 'true' : 'false'; $block = preg_replace('@(<w:checked w:val=)".*?"(/>)@', '1ドル"'.$val.'"2ドル', $block, -1, $checked_replaced); // in case there is a <w:checked/> tag, then above does not match. // this shouldn't happen, but still, don't trust spreadsheet clients too much if (!$checked_replaced) { $checked_tag = '<w:checked w:val="'.$val.'" />'; $block = preg_replace('@<w:checked[^>]*>@', $checked_tag, $block, -1, $checked_replaced); } // the <w:checked> tag is not always present and is being added on first change. if (!$checked_replaced) { // there is no checked tag yet, so we add it $block = str_replace($checkbox_end_tag, $checked_tag.$checkbox_end_tag, $block); } $this->replaceXmlBlock($search, $block, $blockType); }
Priority
- I want to crowdfund the feature (with @algora-io) and fund a community developer.
- I want to pay the feature and fund a maintainer for that. (Contact @Progi1984)