WordprocessingDocument C#中的SUM值等于单词contentControl

时间:2018-09-13 10:53:58

标签: c# ms-word openxml-sdk memorystream calculation

因此,该论坛上的某人可能对如何轻松解决此问题提供了很好的建议,我正在努力寻找可能是解决此问题的最佳方法。 下面是我的代码的摘录,它读取了传入的消息,在这种情况下,该消息是具有这样声明的XML

<Key> Avg_exkl_moms </Key>
<Value>123</Value>
<Key> Tjal_exkl_moms </Key>
<Value>321</Value>
<Key> Prov_exkl_moms </Key>
<Value>7375</Value>

<Key> Avg _moms </Key>
<Value>13</Value>
<Key> Tjal _moms </Key>
<Value>31</Value>
<Key> Prov _moms </Key>
<Value>75</Value>

<Key> Avg_ inkl _moms </Key>
<Value>456</Value>
<Key> Tjal_ inkl _moms </Key>
<Value>555</Value>
<Key> Prov_ inkl _moms </Key>
<Value>555</Value>

word文档具有相应的contentControlTagName,因此将使用7375的字段值填充Avg_inkl_moms 下面是提取文档的提取代码。

      private static void FillContentControls(Dictionary<string, string> parameters, MemoryStream stream)
            {
                using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(stream, true))
                {
                    foreach (KeyValuePair<string, string> parameter in parameters)
                    {

   string contentControlTagName = parameter.Key;
                        string newValue = parameter.Value;
                        IEnumerable<XElement> contentControls = wordDoc.MainDocumentPart.GetXDocument().Descendants(sdt)
                                                                   .Elements(sdtContent)
                                                                   .Descendants(wordText)
                                                                   .Where(e => ((string)e.Ancestors(sdt)
                                                                   .Elements(sdtPr)
                                                                   .Elements(tag)
                                                                   .Attributes(tagVal).First().Value == contentControlTagName));

                        int i = 0;
                        foreach (XElement element in contentControls)
                        {

                            element.Value = (i == 0 ? newValue : String.Empty);
                            i++;
                        }

现在我要做的是求和不同的值

Avg_exkl_moms + Tjal_exkl_moms + Prov_exkl_moms = total_exlk_moms
Avg_moms + Tjal_moms + Prov_moms = total_moms
Avg_inkl_moms + Tjal_ inkl _moms + Prov_ inkl _moms = total_ inkl _moms

然后将它们放在相应的contentControlTagName中。

有关如何处理此问题的任何建议?

1 个答案:

答案 0 :(得分:0)

非常简单,创建了3个列表,这些列表将所有值相加,然后加总。