openTbs标记未更新

时间:2015-09-26 19:33:38

标签: php ms-word opentbs

我需要根据相邻的细胞调整背景细胞颜色。

我的模板是一个word文档,我将单元格颜色设置为一些随机颜色,所以我感兴趣的xml看起来像这样:

<w:tc>
  <w:tcPr>
    <w:tcW w:w="5400" w:type="dxa"/>
    <w:tcBorders>
      <w:left w:val="single" w:sz="4" w:space="0" w:color="D9D9D9" w:themeColor="background1" w:themeShade="D9"/>
    </w:tcBorders>
    <w:shd w:val="clear" w:color="auto" w:fill="D9D9D9" w:themeFill="background1" w:themeFillShade="D9"/>
  </w:tcPr>
  <w:pPr><w:rPr><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr></w:pPr>
  <w:r>
  <w:rPr>
     <w:sz w:val="20"/><w:szCs w:val="20"/>
   </w:rPr>
   <w:t>[title.bg;att=w:shd#w:fill][title.quoteFOB]</w:t>
  </w:r>

重点是:

  • 我有一个带有wfill ='D9D9D9'属性的w:shd标签
  • 我在模板中有一个[title.bg; att = w:shd #w:fill]条目 将合并块title.bg路由到wfill属性。
  • 我有一个合并条目[title.quoteFOB],用于路由合并 字段title.quoteFOB到单元格内容。

执行合并的调用如下所示:

$TBS->MergeField('title', array('custName' => $custName, 
    'compName' => $compName, 'custAddress1' => $custAddr1, 
    'custAddress2' => $custAddr2, 'quoteNum' => $quoteNum, 
    'quoteRev' => $quoteRev, 'quoteForm' => $quoteForm, 
    'quoteExpDate' => $quoteExp, quoteTerms' => $quoteTerm, 
    'quoteFOB' => $quoteFob, bg'=>'00FF00'));

这是包含多个单元格更新的多个合并块之一,所有这些更新似乎都按预期工作。除细胞颜色外的所有变化。

我尝试了很多可能导致问题的事情,例如:禁用除一个合并之外的所有内容,重新排列字段的顺序,以及读取许多stackoverflow条目的方式。这些都没有奏效。

我以为我是个白痴,我可以通过查看代码来解决这个问题。并通过代码进行跟踪。我发现在Show()之前调用TBS-&gt; Source就像预期的那样。发生了所有合并,并且在修改后的XML中正确替换了w:fill值。但是当我打电话时

$TBS->Show(OPENTBS_DOWNLOAD, "$fileName.docx") and
$TBS->Show(OPENTBS_STRING);

输出docx文件不包含-w:fill change。在它之前和之后的一切,但不是那个改变。现在我回想起我是个白痴,我做错了什么。

任何想法我做错了什么?,请帮助我。

1 个答案:

答案 0 :(得分:1)

仅使用'[title.bg; att = w:shd #w:fill]'更改-w:fill属性是不够的。只要-w:themeFill =“background1”就在那里,MS-Word似乎忽略了这个属性。一旦我添加'[title.tf; att = w:shd #w:themeFill]将themeFill属性更改为空字符串,一切都按预期工作。

我很尴尬花了多长时间才退后一步,第二次/第三次查看输出XML。我希望这可以帮助其他人避免浪费尽可能多的时间。