Esempio n. 1
5
        public ResultType_enum Create(Document document, Word.Application application, out Word._Document doc, out string message)
        {
            try
            {
                isWork = true;
                message = "";

                Object trueObj = true;
                Object falseObj = false;
                Object begin = Type.Missing;
                Object end = Type.Missing;
                doc = null;

                // Если вылетим не этом этапе, приложение останется открытым
                try
                {
                    doc = application.Documents.Add(ref missingObj, ref missingObj, ref missingObj, ref missingObj);
                    // Стиль
                    object patternstyle = Word.WdStyleType.wdStyleTypeParagraph;
                    Word.Style wordstyle = doc.Styles.Add("myStyle", ref patternstyle);
                    wordstyle.Font.Size = 9;
                    wordstyle.Font.Name = "Times New Roman";
                    Word.Range wordrange = doc.Range(ref begin, ref end);
                    object oWordStyle = wordstyle;
                    wordrange.set_Style(ref oWordStyle);

                    // Вставляем параграфы
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);

                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);

                    doc.Paragraphs[1].Range.Text = "Приложение № 1";
                    doc.Paragraphs[1].Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
                    doc.Paragraphs[1].Range.ParagraphFormat.LeftIndent = 300;
                    doc.Paragraphs[1].Range.ParagraphFormat.LineSpacing = 11;
                    //doc.Paragraphs[1].Range.ParagraphFormat.LineUnitBefore = 0;
                    doc.Paragraphs[1].SpaceAfter = 0;
                    doc.Paragraphs[1].SpaceBefore = 0;
                    doc.Paragraphs[2].LineUnitAfter = 0;
                    doc.Paragraphs[2].LineUnitBefore = 0;
                    doc.Paragraphs[3].LineUnitAfter = 0;
                    doc.Paragraphs[3].LineUnitBefore = 0;
                    doc.Paragraphs[4].LineUnitAfter = 0;
                    doc.Paragraphs[4].LineUnitBefore = 0;
                    //doc.Paragraphs[1].LineSpacingRule = Word.WdLineSpacing.wdLineSpaceSingle;

                    doc.Paragraphs[2].Range.Text = "к Техническому заданию";
                    doc.Paragraphs[2].Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
                    doc.Paragraphs[2].Range.ParagraphFormat.LeftIndent = 300;

                    doc.Paragraphs[4].Range.Text = "ТРЕБОВАНИЯ К ТОВАРАМ, ИСПОЛЬЗУЕМЫМ ПРИ ВЫПОЛНЕНИИ РАБОТ";
                    doc.Paragraphs[4].Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    //Добавляем таблицу (но перед этим узнаем сколько продуктов)
                    string productsMessage = "";

                    Object defaultTableBehavior =
                     Word.WdDefaultTableBehavior.wdWord9TableBehavior;
                    Object autoFitBehavior =
                     Word.WdAutoFitBehavior.wdAutoFitWindow;
                    Word.Table wordtable = doc.Tables.Add(doc.Paragraphs[5].Range, 3 + document.Products.Count, 6,
                      ref defaultTableBehavior, ref autoFitBehavior);

                    // Объединение ячеек
                    object begCell = wordtable.Cell(1, 1).Range.Start;
                    object endCell = wordtable.Cell(2, 1).Range.End;
                    Word.Range wordcellrange = doc.Range(ref begCell, ref endCell);
                    wordcellrange.Select();
                    application.Selection.Cells.Merge();

                    begCell = wordtable.Cell(1, 2).Range.Start;
                    endCell = wordtable.Cell(1, 3).Range.End;
                    wordcellrange = doc.Range(ref begCell, ref endCell);
                    wordcellrange.Select();
                    application.Selection.Cells.Merge();

                    begCell = wordtable.Cell(1, 3).Range.Start;
                    endCell = wordtable.Cell(1, 4).Range.End;
                    wordcellrange = doc.Range(ref begCell, ref endCell);
                    wordcellrange.Select();
                    application.Selection.Cells.Merge();

                    begCell = wordtable.Cell(1, 4).Range.Start;
                    endCell = wordtable.Cell(2, 6).Range.End;
                    wordcellrange = doc.Range(ref begCell, ref endCell);
                    wordcellrange.Select();
                    application.Selection.Cells.Merge();

                    // Окраска строки с номерами
                    begCell = wordtable.Cell(3, 1).Range.Start;
                    endCell = wordtable.Cell(3, 6).Range.End;
                    wordcellrange = doc.Range(ref begCell, ref endCell);
                    wordcellrange.Select();
                    application.Selection.Shading.BackgroundPatternColor = Word.WdColor.wdColorGray10;

                    // Заполнение заголовка
                    doc.Tables[1].Cell(1, 1).Range.Text = "№ п/п";
                    doc.Tables[1].Cell(1, 1).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 2).Range.Text = "Требования, установленные заказчиком";
                    doc.Tables[1].Cell(1, 2).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 3).Range.Text = "Значение, предлагаемое участником";
                    doc.Tables[1].Cell(1, 3).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 4).Range.Text = "Сведения о сертификации";
                    doc.Tables[1].Cell(1, 4).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    doc.Tables[1].Cell(2, 2).Range.Text = "Наименование применяемых товаров (материалов)";
                    doc.Tables[1].Cell(2, 2).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(2, 3).Range.Text = "Требуемый параметр и требуемое значение";
                    doc.Tables[1].Cell(2, 3).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(2, 4).Range.Text = "Требуемый параметр и требуемое значение";
                    doc.Tables[1].Cell(2, 4).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(2, 5).Range.Text = "Указание на товарный знак, фирменное наименование, патенты, полезные модели, промышленные образцы, наименование места происхождения товара или наименование производителя товар";
                    doc.Tables[1].Cell(2, 5).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    doc.Tables[1].Cell(3, 1).Range.Text = "1";
                    doc.Tables[1].Cell(3, 1).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(3, 2).Range.Text = "2";
                    doc.Tables[1].Cell(3, 2).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(3, 3).Range.Text = "3";
                    doc.Tables[1].Cell(3, 3).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(3, 4).Range.Text = "4";
                    doc.Tables[1].Cell(3, 4).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(3, 5).Range.Text = "5";
                    doc.Tables[1].Cell(3, 5).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(3, 6).Range.Text = "6";
                    doc.Tables[1].Cell(3, 6).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    // Заполняем продукты
                    for (int i = 0; i < document.Products.Count; i++)
                    {
                        if (!isWork) break;
                        doc.Tables[1].Cell(i + 4, 1).Range.Text = Convert.ToString(i + 1) + '.';
                        doc.Tables[1].Cell(i + 4, 1).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                        doc.Tables[1].Cell(i + 4, 2).Range.Text = document.Products.ElementAt(i).Name;
                        doc.Tables[1].Cell(i + 4, 2).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphJustify;

                        doc.Tables[1].Cell(i + 4, 5).Range.Text = document.Products.ElementAt(i).TradeMark;
                        doc.Tables[1].Cell(i + 4, 5).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphJustify;

                        // Получим свойства продукта на шаблон
                        //Product productTest = document.Products.ElementAt(i);
                        //IColl<Param> paramsTemplate = mvm.dc.Templates.FirstOrDefault(p => p.Name.Trim().ToLower() == "свобода").Param;
                        //ICollection<Property> productProperties = document.Products.ElementAt(i).SelectMany(m => m.ParamValues.Where(l => l.Param.Template.Name.Trim().ToLower() == "свобода"));
                        //ICollection<Param> paramColl = (ICollection<Param>)paramsTemplate;
                        var myTemplate = document.Products.ElementAt(i).Templates.FirstOrDefault(m => m.Name.Trim().ToLower() == "свобода");
                        IEnumerable<Property> productProperties = document.Products.ElementAt(i).Properties.SelectMany(m => m.ParamValues.Where(p => myTemplate.Param.Contains(p.Param))).Select(f => f.Property).Distinct();

                        // В данном шаблоне одно свойство(строка) у продукта
                        if (productProperties.Count() != 1)
                        {
                            message = "Ошибка при составлении шаблона";
                            return ResultType_enum.Error;
                        }
                        Property property = productProperties.First();

                        ParamValue paramValue = null;
                        // Требования заказчика
                        paramValue = property.ParamValues.FirstOrDefault(m => m.Param.Name == "Требования заказчика");
                        if (paramValue != null)
                        {
                            doc.Tables[1].Cell(i + 4, 3).Range.Text = paramValue.Value;
                        }
                        else
                        {
                            doc.Tables[1].Cell(i + 4, 3).Range.Text = "";
                        }
                        doc.Tables[1].Cell(i + 4, 3).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphJustify;

                        // Требования участника
                        paramValue = property.ParamValues.FirstOrDefault(m => m.Param.Name == "Требования участника");
                        if (paramValue != null)
                        {
                            doc.Tables[1].Cell(i + 4, 4).Range.Text = paramValue.Value;
                        }
                        else
                        {
                            doc.Tables[1].Cell(i + 4, 4).Range.Text = "";
                        }
                        doc.Tables[1].Cell(i + 4, 4).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphJustify;

                        // Сертификация
                        paramValue = property.ParamValues.FirstOrDefault(m => m.Param.Name == "Сертификация");
                        if (paramValue != null)
                        {
                            doc.Tables[1].Cell(i + 4, 6).Range.Text = paramValue.Value;
                        }
                        else
                        {
                            doc.Tables[1].Cell(i + 4, 6).Range.Text = "";
                        }
                        doc.Tables[1].Cell(i + 4, 6).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphJustify;
                    }

                    application.Visible = true;
                }

                catch (Exception er)
                {
                    if (doc != null)
                        doc.Close(ref falseObj, ref missingObj, ref missingObj);
                    doc = null;
                }

                return ResultType_enum.Done;
            }
            catch (Exception ex)
            {
                doc = null;
                message = ex.Message + '\n' + ex.StackTrace;
                return ResultType_enum.Error;
            }
            finally
            {
                isWork = false;
            }
        }
Esempio n. 2
2
 /// <summary>
 /// 在指定范围内匹配,如果范围的start、end都为0,专门为答案识别
 /// </summary>
 /// <param name="doc"></param>
 /// <param name="progressBarSpot"></param>
 /// <param name="matchArray"></param>
 /// <param name="start">指定范围的起始</param>
 /// <param name="end">指定范围的结束</param>
 /// <param name="prelength">前缀长度</param>
 /// <returns></returns>
 public List<SubjectInfo> answerSpot(Word.Document doc, ref ProgressBar progressBarSpot, string[] matchArray, int start, int end)
 {
     List<SubjectInfo> list = new List<SubjectInfo>();
     object start1 = start;
     object end1 = end;
     int count = 0;//总共有多少段落
     count = doc.Range(ref start1, ref end1).Paragraphs.Count;//正对选定的部分统计数据行数
     for (int i = 0; i < count; i++)
     {
         string text = "";
         text = doc.Range(ref start1, ref end1).Paragraphs[i + 1].Range.Text;
         if (text.ToString().Length > 1)//通过字段长度过滤来提高性能;
         {
             try
             {
                 doc.Range(ref start1, ref end1).Paragraphs[i + 1].Range.Copy();
                 text = ClipboardHelper.getClipboardText();
             }
             catch
             {
                 text = doc.Range(ref start1, ref end1).Paragraphs[i + 1].Range.Text;
             }
             if (MatchContent.match(matchArray, text))
             {
                 SubjectInfo si = new SubjectInfo();
                 si.paragraphsNum = i;
                 si.paragraphsStart = doc.Range(ref start1, ref end1).Paragraphs[i + 1].Range.Start;
                 si.paragraphsEnd = doc.Range(ref start1, ref end1).Paragraphs[i + 1].Range.End;
                 if (checkThisContentIsInTable(si.paragraphsStart, doc))//判断是否在表格范围
                 {
                     list.Add(si);
                 }
             }
         }
     }
     //排序题目信息(SubjectInfo)列表
     list.Sort(CompareSubJectInfo);
     return list;
 }
Esempio n. 3
0
        /// <summary>
        /// itemの内容をtargetにペーストする
        /// </summary>
        /// <param name="target"></param>
        /// <param name="item"></param>
        static public void Paste(this Word.Document document, Word.Document item)
        {
            try
            {
                // コピー
                item.Range(item.Content.Start, item.Content.End).Copy();

                // ペースト
                var rng = document.Range(document.Content.End - 1, document.Content.End - 1);
                rng.Paste();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Esempio n. 4
0
        public void MakeDropDownElementsText(Word.Document doc)
        {
            //Comparison doesn't work with drop down controls so get rid of them!

            //Now step through the doc
            object start = doc.Content.Start;
            object end = doc.Content.End;
            Word.Range r = doc.Range(ref start, ref end);

            // Step through and select the one passed
            foreach (Word.ContentControl cc in r.ContentControls)
            {
                string tag = cc.Tag;
                if (tag != null && tag != "" && cc.Tag.Contains('|'))
                {
                    string[] taga = cc.Tag.Split('|');
                    if (taga[0] == "Element")
                    {
                        if (cc.Type == Word.WdContentControlType.wdContentControlDropdownList || cc.Type == Word.WdContentControlType.wdContentControlComboBox)
                        {
                            cc.Type = Word.WdContentControlType.wdContentControlText;
                        }

                    }
                }
            }
        }
Esempio n. 5
0
        public string GetFootnotes(Word.Document doc,string ConceptId)
        {
            string rtn = "";
            if (isTemplate(doc))
            {

                foreach (Word.ContentControl c in doc.Range().ContentControls)
                {
                    if (c.Tag != null)
                    {
                        string tag = Convert.ToString(c.Tag);
                        if (tag.StartsWith("Concept|" + ConceptId))
                        {
                            if (c.Range.Footnotes.Count > 0)
                            {
                                for (int z = 1; z <= c.Range.Footnotes.Count; z++)
                                {
                                    string foot = c.Range.Footnotes[z].Range.Text;
                                    if(foot.StartsWith("\t")) foot = foot.Substring(1);
                                    rtn += foot + "\n";
                                }
                            }

                        }
                    }
                }
            }
            else if (isClause(doc))
            {
                for (int z = 1; z <= doc.Range().Footnotes.Count; z++)
                {
                    string foot = doc.Range().Footnotes[z].Range.Text;
                    if (foot.StartsWith("\t")) foot = foot.Substring(1);
                    rtn += foot + "\n";
                }
            }

            return rtn;
        }
Esempio n. 6
0
        public void UpdateContractTemplatesConceptTag(Word.Document doc, string conceptid, string clauseid, string lastmodified)
        {
            if (doc == null) doc = Application.ActiveDocument;
            //Is it one of ours
            if (isTemplate(doc))
            {

                string templateid = GetDocId(doc);

                //Now step through the doc and update the concept TAG if it matches the one we just updated
                object start = doc.Content.Start;
                object end = doc.Content.End;
                Word.Range r = doc.Range(ref start, ref end);

                //Create an array of concept content controls in the doc - have to copy or we get into problems with the range including the new ones
                //that we created
                Word.ContentControl[] ccs = new Word.ContentControl[r.ContentControls.Count];
                int cnt = 0;
                foreach (Word.ContentControl cc in r.ContentControls)
                {
                    ccs[cnt++] = cc;
                }

                //Now step through all the Contact Controls and update the XML so we get the newest clauses
                foreach (Word.ContentControl cc in ccs)
                {
                    string tag = cc.Tag;
                    if (tag != null && tag != "" && cc.Tag.Contains('|'))
                    {
                        string[] taga = cc.Tag.Split('|');
                        if (taga[0] == "Concept" && Convert.ToString(taga[1]) == conceptid)
                        {
                            // update the tag
                            if (clauseid == "")
                            {
                                cc.Tag = "Concept|" + conceptid;
                            }
                            else
                            {
                                cc.Tag = "Concept|" + conceptid + "|" + clauseid + "|" + lastmodified;
                            }
                        }
                    }

                }
            }
        }
Esempio n. 7
0
        // this is used in the Template Import - updates the ContentControl tags to match the new
        // ids that have been created - this one does both the Clauses and the Elements that are
        // being displayed in the current template clause selection
        public void UpdateContractTemplateContentControls(Word.Document doc, Dictionary<string, string> ConceptMapping,Dictionary<string, string> ClauseMapping, Dictionary<string, string> ElementMapping)
        {
            //Is it one of ours
            if (isTemplate(doc))
            {
                //Remove the handler - won't have any hanlders yet - loaded it as an exporttemplate
                // Microsoft.Office.Tools.Word.Document vstoDoc = Globals.Factory.GetVstoObject(doc);
                // vstoDoc.ContentControlOnExit -= new Word.DocumentEvents2_ContentControlOnExitEventHandler(vstoDoc_ContentControlOnExit);

                string contractid = GetDocId(doc);

                //Now step through the doc
                object start = doc.Content.Start;
                object end = doc.Content.End;
                Word.Range r = doc.Range(ref start, ref end);

                foreach (Word.ContentControl cc in r.ContentControls)
                {
                    string tag = cc.Tag;
                    if (tag != null && tag != "" && cc.Tag.Contains('|'))
                    {
                        string[] taga = cc.Tag.Split('|');

                        if (taga.Length > 1 && ((taga[0] == "Concept" && taga[1] != "")))
                        {
                            // Concept is the format Concept|ConceptId|SelectedClauseId|LastModified
                            // as we are importing this everything should be up to date - set the LastModified to "0000"
                            // to indicate it is up to date - need to do this cause I don't have the last modified date

                            string ConceptIdOld = taga[1].ToString();
                            string ClauseIdOld = "";
                            if (taga.Length > 2)
                            {
                                ClauseIdOld = taga[2].ToString();
                            }

                            // if we have the new clause id then set the tag so that we know its the one in the doc
                            // "0000" indicates it has been loaded so is up to date
                            if (ClauseMapping.ContainsKey(ClauseIdOld))
                            {
                                cc.Tag = "Concept|" + ConceptMapping[ConceptIdOld] + "|" + ClauseMapping[ClauseIdOld] + "|0000";
                            }
                            else
                            {
                                cc.Tag = "Concept|" + ConceptMapping[ConceptIdOld];
                            }

                        }
                        else if ((taga[0] == "Element" && taga[1] != ""))
                        {
                            // Element tag is the format Element|ElementId|ClauseId
                            string ElementIdOld = taga[1].ToString();
                            string ClauseIdOld = taga[2].ToString();

                            // if its not in the mapping leave it be
                            if (ElementMapping.ContainsKey(ElementIdOld))
                            {
                                if (ClauseMapping.ContainsKey(ClauseIdOld))
                                {
                                    cc.Tag = "Element|" + ElementMapping[ElementIdOld] + "|" + ClauseMapping[ClauseIdOld];
                                }
                                else
                                {
                                    cc.Tag = "Element|" + ElementMapping[ElementIdOld];
                                }
                            }
                        }
                    }
                }
            }
        }
Esempio n. 8
0
        public void UpdateClauseTemplateContentControls(Word.Document doc, Dictionary<string, string> ConceptMapping, Dictionary<string, string> ClauseMapping, Dictionary<string, string> ElementMapping)
        {
            //Is it one of ours
            if (isClause(doc))
            {
                // Remove the handler - won't have any hanlders yet - loaded it as an exporttemplate
                // Microsoft.Office.Tools.Word.Document vstoDoc = Globals.Factory.GetVstoObject(doc);
                // vstoDoc.ContentControlOnExit -= new Word.DocumentEvents2_ContentControlOnExitEventHandler(vstoDoc_ContentControlOnExit);

                // Now step through the doc
                object start = doc.Content.Start;
                object end = doc.Content.End;
                Word.Range r = doc.Range(ref start, ref end);

                foreach (Word.ContentControl cc in r.ContentControls)
                {
                    string tag = cc.Tag;
                    if (tag != null && tag != "" && cc.Tag.Contains('|'))
                    {
                        string[] taga = cc.Tag.Split('|');

                        if ((taga[0] == "Element" && taga[1] != ""))
                        {
                            // Element tag is the format Element|ElementId|ClauseId

                            string ElementIdOld = taga[1].ToString();
                            string ClauseIdOld = taga[2].ToString();

                            // if its not in the mapping leave it be
                            if (ElementMapping.ContainsKey(ElementIdOld))
                            {
                                if (ClauseMapping.ContainsKey(ClauseIdOld))
                                {
                                    cc.Tag = "Element|" + ElementMapping[ElementIdOld] + "|" + ClauseMapping[ClauseIdOld];
                                }
                                else
                                {
                                    cc.Tag = "Element|" + ElementMapping[ElementIdOld];
                                }
                            }
                        }
                    }
                }
            }
        }
        static Wd.Range FindFirstAttachmentStyleByName(Wd.Document doc, Wd.Range range, Wd.Range result, string style)
        {
            if (doc.Styles.Exists(style))
            {
                Wd.Range search = range.Duplicate;
                if (result == null || !result.Find.Found)
                    search.End = doc.Range().End;
                else
                    search.End = result.Start;

                Wd.Range result_temp = search.Find(null, doc.Styles[style]);

                if (result_temp.Find.Found && (result == null || result.Start > result_temp.Start))
                    return result_temp;
            }
            return result;
        }
Esempio n. 10
0
        private void next_occur(Word._Document oDoc, string search_font, ref int start_pos, ref int end_pos)
        {
            Word.Range oRange;
            Word.Font oFont;
            int length, pos;
            object position;

            length = oDoc.Characters.Count;
            if (end_pos == (length-1))
                pos = 0;
            else
                pos = end_pos;

            // find the beginning of the next occurance of the search font

            while (true)
            {
                position = pos;
                oRange = oDoc.Range(ref position, ref position);
                oFont = oRange.Font;
                if (oFont.Name.Equals(search_font))
                   break;
                else
                    pos++;
                if (pos == length)
                    pos = 0;
            }

            start_pos = pos;

            // find the end of this occurance

            while (true)
            {
                position = pos;
                oRange = oDoc.Range(ref position, ref position);
                oFont = oRange.Font;
                if (!oFont.Name.Equals(search_font))
                    break;
                else
                    pos++;
                if (pos == length)
                {
                    pos--;
                    break;
                }
            }

            end_pos = pos;

            return;
        }
Esempio n. 11
0
        public ResultType_enum Create(Document document, Word.Application application, out Word._Document doc, out string message)
        {
            try
            {
                isWork = true;
                message = "";

                Object trueObj = true;
                Object falseObj = false;
                Object begin = Type.Missing;
                Object end = Type.Missing;
                doc = null;

                // если вылетим не этом этапе, приложение останется открытым
                try
                {
                    doc = application.Documents.Add(ref missingObj, ref missingObj, ref missingObj, ref missingObj);
                    // Общий Стиль
                    object patternstyle = Word.WdStyleType.wdStyleTypeParagraph;
                    Word.Style wordstyle = doc.Styles.Add("myStyle", ref patternstyle);
                    wordstyle.Font.Size = 9;
                    wordstyle.Font.Name = "Times New Roman";
                    Word.Range wordrange = doc.Range(ref begin, ref end);
                    object oWordStyle = wordstyle;
                    wordrange.set_Style(ref oWordStyle);

                    // Вставляем параграфы
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);

                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);

                    doc.Paragraphs[1].Range.Text = "«Утверждаю»";
                    doc.Paragraphs[1].Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
                    doc.Paragraphs[1].Range.ParagraphFormat.LeftIndent = 300;
                    doc.Paragraphs[1].Range.ParagraphFormat.LineSpacing = 11;
                    doc.Paragraphs[1].SpaceAfter = 0;
                    doc.Paragraphs[1].SpaceBefore = 0;
                    doc.Paragraphs[2].LineUnitAfter = 0;
                    doc.Paragraphs[2].LineUnitBefore = 0;
                    doc.Paragraphs[3].LineUnitAfter = 0;
                    doc.Paragraphs[3].LineUnitBefore = 0;
                    doc.Paragraphs[4].LineUnitAfter = 0;
                    doc.Paragraphs[4].LineUnitBefore = 0;

                    doc.Paragraphs[2].Range.Text = "Руководитель";
                    doc.Paragraphs[2].Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
                    doc.Paragraphs[2].Range.ParagraphFormat.LeftIndent = 300;

                    doc.Paragraphs[4].Range.Text = "Форма 2. Сведения о качестве, технических характеристиках товара, его безопасности, функциональных характеристиках (потребительских свойствах) товара, размере и иные сведения о товаре, представление которых предусмотрено документацией об аукционе в электронной форме";
                    doc.Paragraphs[4].Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    // Подсчитываем количество строк у продуктов (потому что одно свойство продукта занимает одну строку)
                    int propertiesCount = 0;
                    foreach (Product product in document.Products)
                    {
                        var myTemplate = product.Templates.FirstOrDefault(m => m.Name.Trim().ToLower() == "форма 2");
                        IEnumerable<Property> productProperties = product.Properties.SelectMany(m => m.ParamValues.Where(p => myTemplate.Param.Contains(p.Param))).Select(f => f.Property).Distinct();

                        propertiesCount += productProperties.Count();
                    }

                    Object defaultTableBehavior =
                     Word.WdDefaultTableBehavior.wdWord9TableBehavior;
                    Object autoFitBehavior =
                     Word.WdAutoFitBehavior.wdAutoFitWindow;
                    Word.Table wordtable = doc.Tables.Add(doc.Paragraphs[5].Range, 3 + propertiesCount, 8,
                      ref defaultTableBehavior, ref autoFitBehavior);

                    // Объединение ячеек
                    object begCell = wordtable.Cell(1, 1).Range.Start;
                    object endCell = wordtable.Cell(2, 1).Range.End;
                    Word.Range wordcellrange = doc.Range(ref begCell, ref endCell);
                    wordcellrange.Select();
                    application.Selection.Cells.Merge();

                    begCell = wordtable.Cell(1, 2).Range.Start;
                    endCell = wordtable.Cell(2, 2).Range.End;
                    wordcellrange = doc.Range(ref begCell, ref endCell);
                    wordcellrange.Select();
                    application.Selection.Cells.Merge();

                    begCell = wordtable.Cell(1, 3).Range.Start;
                    endCell = wordtable.Cell(2, 3).Range.End;
                    wordcellrange = doc.Range(ref begCell, ref endCell);
                    wordcellrange.Select();
                    application.Selection.Cells.Merge();

                    begCell = wordtable.Cell(1, 4).Range.Start;
                    endCell = wordtable.Cell(1, 6).Range.End;
                    wordcellrange = doc.Range(ref begCell, ref endCell);
                    wordcellrange.Select();
                    application.Selection.Cells.Merge();

                    begCell = wordtable.Cell(1, 5).Range.Start;
                    endCell = wordtable.Cell(2, 7).Range.End;
                    wordcellrange = doc.Range(ref begCell, ref endCell);
                    wordcellrange.Select();
                    application.Selection.Cells.Merge();

                    begCell = wordtable.Cell(1, 6).Range.Start;
                    endCell = wordtable.Cell(2, 8).Range.End;
                    wordcellrange = doc.Range(ref begCell, ref endCell);
                    wordcellrange.Select();
                    application.Selection.Cells.Merge();

                    /*begCell = wordtable.Cell(4, 6).Range.Start;
                    endCell = wordtable.Cell(propertiesCount + 4, 6).Range.End;
                    wordcellrange = doc.Range(ref begCell, ref endCell);
                    wordcellrange.Select();
                    application.Selection.Cells.Merge();*/

                    // Окраска строки с номерами
                    begCell = wordtable.Cell(3, 1).Range.Start;
                    endCell = wordtable.Cell(3, 8).Range.End;
                    wordcellrange = doc.Range(ref begCell, ref endCell);
                    wordcellrange.Select();
                    application.Selection.Shading.BackgroundPatternColor = Word.WdColor.wdColorGray10;

                    // Заполнение заголовка
                    doc.Tables[1].Cell(1, 1).Range.Text = "№ п/п";
                    doc.Tables[1].Cell(1, 1).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 2).Range.Text = "Наименование материала";
                    doc.Tables[1].Cell(1, 2).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 3).Range.Text = "Указание на товарный знак (его словесное обозначение) (при наличии), знак обслуживания (при наличии), фирменное наименование (при наличии), патенты (при наличии), полезные модели (при наличии), промышленные образцы (при наличии), наименование страны происхождения товара";
                    doc.Tables[1].Cell(1, 3).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 4).Range.Text = "Технические характеристики";
                    doc.Tables[1].Cell(1, 4).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    doc.Tables[1].Cell(2, 4).Range.Text = "Требуемый параметр";
                    doc.Tables[1].Cell(2, 4).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(2, 5).Range.Text = "Требуемое значение";
                    doc.Tables[1].Cell(2, 5).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(2, 6).Range.Text = "Значение, предлагаемое участником";
                    doc.Tables[1].Cell(2, 6).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    doc.Tables[1].Cell(1, 5).Range.Text = "Единица измерения";
                    doc.Tables[1].Cell(1, 5).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 6).Range.Text = "Сведения о сертификации";
                    doc.Tables[1].Cell(1, 6).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    doc.Tables[1].Cell(3, 1).Range.Text = "1";
                    doc.Tables[1].Cell(3, 1).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(3, 2).Range.Text = "2";
                    doc.Tables[1].Cell(3, 2).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(3, 3).Range.Text = "3";
                    doc.Tables[1].Cell(3, 3).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(3, 4).Range.Text = "4";
                    doc.Tables[1].Cell(3, 4).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(3, 5).Range.Text = "5";
                    doc.Tables[1].Cell(3, 5).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(3, 6).Range.Text = "6";
                    doc.Tables[1].Cell(3, 6).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(3, 7).Range.Text = "7";
                    doc.Tables[1].Cell(3, 7).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(3, 8).Range.Text = "8";
                    doc.Tables[1].Cell(3, 8).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    // Заполняем продукты
                    ParamValue paramValue = null;
                    int productIndexCompilator = 0;
                    int propertyIndexCompilator = 0;
                    for (int i = 0; i < propertiesCount; i++)
                    {
                        if (!isWork) break;
                        // Получаем свойства продукта на шаблон
                        var myTemplate = document.Products.ElementAt(productIndexCompilator).Templates.FirstOrDefault(m => m.Name.Trim().ToLower() == "форма 2");
                        IEnumerable<Property> productProperties = document.Products.ElementAt(productIndexCompilator).Properties.SelectMany(m => m.ParamValues.Where(p => myTemplate.Param.Contains(p.Param))).Select(f => f.Property).Distinct();

                        if (propertyIndexCompilator == 0)
                        {
                            // Объединяем ячейки по продукту (т.к. свойство занимает строку)
                            begCell = wordtable.Cell(i + 4, 1).Range.Start;
                            endCell = wordtable.Cell(i + 4 + productProperties.Count() - 1, 1).Range.End;
                            wordcellrange = doc.Range(ref begCell, ref endCell);
                            wordcellrange.Select();
                            try
                            {
                                application.Selection.Cells.Merge();
                            }
                            catch
                            {

                            }

                            begCell = wordtable.Cell(i + 4, 2).Range.Start;
                            endCell = wordtable.Cell(i + 4 + productProperties.Count() - 1, 2).Range.End;
                            wordcellrange = doc.Range(ref begCell, ref endCell);
                            wordcellrange.Select();
                            try
                            {
                                application.Selection.Cells.Merge();
                            }
                            catch
                            {

                            }

                            begCell = wordtable.Cell(i + 4, 3).Range.Start;
                            endCell = wordtable.Cell(i + 4 + productProperties.Count() - 1, 3).Range.End;
                            wordcellrange = doc.Range(ref begCell, ref endCell);
                            wordcellrange.Select();
                            try
                            {
                                application.Selection.Cells.Merge();
                            }
                            catch
                            {

                            }

                            begCell = wordtable.Cell(i + 4, 8).Range.Start;
                            endCell = wordtable.Cell(i + 4 + productProperties.Count() - 1, 8).Range.End;
                            wordcellrange = doc.Range(ref begCell, ref endCell);
                            wordcellrange.Select();
                            try
                            {
                                application.Selection.Cells.Merge();
                            }
                            catch
                            {

                            }

                            doc.Tables[1].Cell(i + 4, 1).Range.Text = Convert.ToString(productIndexCompilator + 1) + '.';
                            doc.Tables[1].Cell(i + 4, 1).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                            doc.Tables[1].Cell(i + 4, 2).Range.Text = document.Products.ElementAt(productIndexCompilator).Name;
                            doc.Tables[1].Cell(i + 4, 2).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphJustify;

                            doc.Tables[1].Cell(i + 4, 3).Range.Text = document.Products.ElementAt(productIndexCompilator).TradeMark;
                            doc.Tables[1].Cell(i + 4, 3).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphJustify;

                            // Сертификация
                            paramValue = productProperties.ElementAt(propertyIndexCompilator).ParamValues.FirstOrDefault(m => m.Param.Name == "Сертификация");
                            if (paramValue != null)
                            {
                                doc.Tables[1].Cell(i + 4, 8).Range.Text = paramValue.Value;
                            }
                            else
                            {
                                doc.Tables[1].Cell(i + 4, 8).Range.Text = "";
                            }

                            doc.Tables[1].Cell(i + 4, 8).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                        }

                        // Требуемый параметр
                        paramValue = productProperties.ElementAt(propertyIndexCompilator).ParamValues.FirstOrDefault(m => m.Param.Name == "Требуемый параметр");
                        if (paramValue != null)
                        {
                            doc.Tables[1].Cell(i + 4, 4).Range.Text = paramValue.Value;
                        }
                        else
                        {
                            doc.Tables[1].Cell(i + 4, 4).Range.Text = "";
                        }
                        doc.Tables[1].Cell(i + 4, 4).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                        // Требуемое значение
                        paramValue = productProperties.ElementAt(propertyIndexCompilator).ParamValues.FirstOrDefault(m => m.Param.Name == "Требуемое значение");
                        if (paramValue != null)
                        {
                            doc.Tables[1].Cell(i + 4, 5).Range.Text = paramValue.Value;
                        }
                        else
                        {
                            doc.Tables[1].Cell(i + 4, 5).Range.Text = "";
                        }
                        doc.Tables[1].Cell(i + 4, 5).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                        // Значение, предлагаемое участником
                        paramValue = productProperties.ElementAt(propertyIndexCompilator).ParamValues.FirstOrDefault(m => m.Param.Name == "Значение, предлагаемое участником");
                        if (paramValue != null)
                        {
                            doc.Tables[1].Cell(i + 4, 6).Range.Text = paramValue.Value;
                        }
                        else
                        {
                            doc.Tables[1].Cell(i + 4, 6).Range.Text = "";
                        }
                        doc.Tables[1].Cell(i + 4, 6).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                        // Единица измерения
                        paramValue = productProperties.ElementAt(propertyIndexCompilator).ParamValues.FirstOrDefault(m => m.Param.Name == "Единица измерения");
                        if (paramValue != null)
                        {
                            doc.Tables[1].Cell(i + 4, 7).Range.Text = paramValue.Value;
                        }
                        else
                        {
                            doc.Tables[1].Cell(i + 4, 7).Range.Text = "";
                        }
                        doc.Tables[1].Cell(i + 4, 7).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                        propertyIndexCompilator++;
                        if (productProperties.Count() == propertyIndexCompilator)
                        {
                            propertyIndexCompilator = 0;
                            productIndexCompilator++;
                        }

                    }
                }

                catch (Exception er)
                {
                    if (doc != null)
                        doc.Close(ref falseObj, ref missingObj, ref missingObj);
                    doc = null;
                }

                application.Visible = true;
                return ResultType_enum.Done;
            }
            catch (Exception ex)
            {
                doc = null;
                message = ex.Message + '\n' + ex.StackTrace;
                return ResultType_enum.Error;
            }
            finally {
                isWork = false;
            }
        }
        private static Word.Range GetAmendmentDocumentInsertPosition(List<AmendClause> clauses, int orderNumber, Word.Document amend)
        {
            Word.Range insPosition = null;

            int insertAfter = 0;
            // Sor the list before doing this
            object wdth = Environment.NewLine.Length;
            for (int i = 0; i < clauses.Count; i++)
            {
                if (clauses[i].InitialPosition > orderNumber)
                {
                    insertAfter = clauses[i].InitialPosition;
                    Word.Range rng = amend.Range(clauses[i].Clause.Range.Start - 1, clauses[i].Clause.Range.End);
                    rng.InsertBefore(Environment.NewLine);
                    insPosition = clauses[i].Clause.Range.Previous(Word.WdUnits.wdCharacter, ref wdth);
                    return insPosition;
                }
            }
            return null;
        }
Esempio n. 13
0
 /// <summary>
 /// 在指定范围内匹配,如果范围的start、end都为0,则在整个文件匹配
 /// </summary>
 /// <param name="doc"></param>
 /// <param name="progressBarSpot"></param>
 /// <param name="matchArray"></param>
 /// <param name="start">指定范围的起始</param>
 /// <param name="end">指定范围的结束</param>
 /// <param name="prelength">前缀长度</param>
 /// <returns></returns>
 public List<SubjectInfo> subjectSpot(Word.Document doc, ref ProgressBar progressBarSpot, string[] matchArray, int start, int end)
 {
     List<SubjectInfo> list = new List<SubjectInfo>();
     object start1 = start;
     object end1 = end;
     int count = 0;//总共有多少段落
     //int prelength = 0;//匹配题目前缀如(1、)的长度用于截断
     if (start == 0 && end == 0)
     {
         count = doc.Paragraphs.Count;//针对整个文件统计数据行数
     }
     else
     {
         count = doc.Range(ref start1, ref end1).Paragraphs.Count;//正对选定的部分统计数据行数
     }
     for (int i = 0; i < count; i++)
     {
         string text = "";
         if (start == 0 && end == 0)
         {
             text = doc.Paragraphs[i + 1].Range.Text;
         }
         else
         {
             text = doc.Range(ref start1, ref end1).Paragraphs[i + 1].Range.Text;
         }
         if (text.ToString().Length > 1)//通过字段长度过滤来提高性能;
         {
             if (start == 0 && end == 0)//取整个文本中对应行的数据
             {
                 try
                 {
                     doc.Paragraphs[i + 1].Range.Copy();
                     text = ClipboardHelper.getClipboardText();//取整个文本中对应行的数据
                 }
                 catch
                 {
                     text = doc.Paragraphs[i + 1].Range.Text;//取整个文本中对应行的数据
                 }
             }
             else//取整个文本中选择的文本中对应行的数据
             {
                 try
                 {
                     doc.Range(ref start1, ref end1).Paragraphs[i + 1].Range.Copy();
                     text = ClipboardHelper.getClipboardText();
                 }
                 catch
                 {
                     text = doc.Range(ref start1, ref end1).Paragraphs[i + 1].Range.Text;
                 }
             }
             if (MatchContent.match(matchArray, text))
             {
                 SubjectInfo si = new SubjectInfo();
                 si.paragraphsNum = i;
                 if (start == 0 && end == 0)
                 {
                     si.paragraphsStart = doc.Paragraphs[i + 1].Range.Start;
                     si.paragraphsEnd = doc.Paragraphs[i + 1].Range.End;
                 }
                 else
                 {
                     si.paragraphsStart = doc.Range(ref start1, ref end1).Paragraphs[i + 1].Range.Start;
                     si.paragraphsEnd = doc.Range(ref start1, ref end1).Paragraphs[i + 1].Range.End;
                 }
                 if (checkThisContentIsInTable(si.paragraphsStart, doc))//判断是否在表格范围
                 {
                     list.Add(si);
                 }
             }
         }
     }
     //排序题目信息(SubjectInfo)列表
     list.Sort(CompareSubJectInfo);
     return list;
 }
Esempio n. 14
0
        public ResultType_enum Create(Document document, Word.Application application, out Word._Document doc, out string message)
        {
            try
            {
                isWork = true;
                message = "";

                Object trueObj = true;
                Object falseObj = false;
                Object begin = Type.Missing;
                Object end = Type.Missing;
                doc = null;

                // если вылетим не этом этапе, приложение останется открытым
                try
                {
                    doc = application.Documents.Add(ref missingObj, ref missingObj, ref missingObj, ref missingObj);
                    // Стиль
                    object patternstyle = Word.WdStyleType.wdStyleTypeParagraph;
                    Word.Style wordstyle = doc.Styles.Add("myStyle", ref patternstyle);
                    wordstyle.Font.Size = 9;
                    wordstyle.Font.Name = "Times New Roman";
                    Word.Range wordrange = doc.Range(ref begin, ref end);
                    object oWordStyle = wordstyle;
                    wordrange.set_Style(ref oWordStyle);

                    // Вставляем параграфы
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);

                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);
                    doc.Paragraphs.Add(ref missingObj);

                    doc.Paragraphs[1].Range.Text = "Приложение № 3";
                    doc.Paragraphs[1].Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
                    doc.Paragraphs[1].Range.ParagraphFormat.LeftIndent = 300;
                    doc.Paragraphs[1].Range.ParagraphFormat.LineSpacing = 11;
                    doc.Paragraphs[1].SpaceAfter = 0;
                    doc.Paragraphs[1].SpaceBefore = 0;
                    doc.Paragraphs[2].LineUnitAfter = 0;
                    doc.Paragraphs[2].LineUnitBefore = 0;
                    doc.Paragraphs[3].LineUnitAfter = 0;
                    doc.Paragraphs[3].LineUnitBefore = 0;
                    doc.Paragraphs[4].LineUnitAfter = 0;
                    doc.Paragraphs[4].LineUnitBefore = 0;

                    doc.Paragraphs[2].Range.Text = "к Техническому заданию";
                    doc.Paragraphs[2].Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
                    doc.Paragraphs[2].Range.ParagraphFormat.LeftIndent = 300;

                    doc.Paragraphs[4].Range.Text = "СВЕДЕНИЯ О КАЧЕСТВЕ, ТЕХНИЧЕСКИХ ХАРАКТЕРИСТИКАХ ТОВАРА, ЕГО БЕЗОПАСНОСТИ, ФУНКЦИОНАЛЬНЫХ ХАРАКТЕРИСТИКАХ (ПОТРЕБИТЕЛЬСКИХ СВОЙСТВАХ) ТОВАРА, РАЗМЕРЕ, УПАКОВКЕ, ОТГРУЗКЕ ТОВАРА И ИНЫЕ СВЕДЕНИЯ О ТОВАРЕ, ПРЕДСТАВЛЕНИЕ КОТОРЫХ ПРЕДУСМОТРЕНО ДОКУМЕНТАЦИЕЙ ОБ АУКЦИОНЕ В ЭЛЕКТРОННОЙ ФОРМЕ";
                    doc.Paragraphs[4].Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    // Подсчитываем количество строк у продуктов (потому что одно свойство продукта занимает одну строку)
                    int propertiesCount = 0;
                    foreach (Product product in document.Products)
                    {
                        var myTemplate = product.Templates.FirstOrDefault(m => m.Name.Trim().ToLower() == "комитет");
                        IEnumerable<Property> productProperties = product.Properties.SelectMany(m => m.ParamValues.Where(p => myTemplate.Param.Contains(p.Param))).Select(f => f.Property).Distinct();

                        propertiesCount += productProperties.Count();
                    }

                    Object defaultTableBehavior =
                     Word.WdDefaultTableBehavior.wdWord9TableBehavior;
                    Object autoFitBehavior =
                     Word.WdAutoFitBehavior.wdAutoFitWindow;
                    Word.Table wordtable = doc.Tables.Add(doc.Paragraphs[5].Range, 1 + propertiesCount, 9,
                      ref defaultTableBehavior, ref autoFitBehavior);

                    // Заполнение заголовка
                    doc.Tables[1].Cell(1, 1).Range.Text = "№ п/п";
                    doc.Tables[1].Cell(1, 1).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 2).Range.Text = "Наименование товара";
                    doc.Tables[1].Cell(1, 2).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 3).Range.Text = "Наименование показателя";
                    doc.Tables[1].Cell(1, 3).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 4).Range.Text = "Минимальные значения показателей";
                    doc.Tables[1].Cell(1, 4).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 5).Range.Text = "Максимальные значения показателей";
                    doc.Tables[1].Cell(1, 5).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 6).Range.Text = "Значения показателей, которые не могут изменяться";
                    doc.Tables[1].Cell(1, 6).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 7).Range.Text = "Конкретные показатели используемого товара, соответствующие значениям, установленным документацией, предлагаемые участником закупки";
                    doc.Tables[1].Cell(1, 7).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 8).Range.Text = "Единица измерения";
                    doc.Tables[1].Cell(1, 8).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                    doc.Tables[1].Cell(1, 9).Range.Text = "Товарный знак";
                    doc.Tables[1].Cell(1, 9).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    // Заполнение продуктами
                    int productIndexCompilator = 0;
                    int propertyIndexCompilator = 0;
                    for (int i = 0; i < propertiesCount; i++)
                    {
                        if (!isWork) break;
                        // Получаем свойства продукта на шаблон
                        var myTemplate = document.Products.ElementAt(productIndexCompilator).Templates.FirstOrDefault(m => m.Name.Trim().ToLower() == "комитет");
                        IEnumerable<Property> productProperties = document.Products.ElementAt(productIndexCompilator).Properties.SelectMany(m => m.ParamValues.Where(p => myTemplate.Param.Contains(p.Param))).Select(f => f.Property).Distinct();

                        if (propertyIndexCompilator == 0)
                        {
                            // Объединяем ячейки по продукту
                            // Номер
                            object begCell = wordtable.Cell(i + 2, 1).Range.Start;
                            object endCell = wordtable.Cell(i + 2 + productProperties.Count() - 1, 1).Range.End;
                            Word.Range wordcellrange = doc.Range(ref begCell, ref endCell);
                            wordcellrange.Select();
                            try
                            {
                                application.Selection.Cells.Merge();
                            }
                            catch
                            {

                            }

                            // Название продукта
                            begCell = wordtable.Cell(i + 2, 2).Range.Start;
                            endCell = wordtable.Cell(i + 2 + productProperties.Count() - 1, 2).Range.End;
                            wordcellrange = doc.Range(ref begCell, ref endCell);
                            wordcellrange.Select();
                            try
                            {
                                application.Selection.Cells.Merge();
                            }
                            catch
                            {

                            }

                            // Товарный знак
                            begCell = wordtable.Cell(i + 2, 9).Range.Start;
                            endCell = wordtable.Cell(i + 2 + productProperties.Count() - 1, 9).Range.End;
                            wordcellrange = doc.Range(ref begCell, ref endCell);
                            wordcellrange.Select();
                            try
                            {
                                application.Selection.Cells.Merge();
                            }
                            catch
                            {

                            }

                            doc.Tables[1].Cell(i + 2, 1).Range.Text = Convert.ToString(productIndexCompilator + 1) + '.';
                            doc.Tables[1].Cell(i + 2, 1).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                            doc.Tables[1].Cell(i + 2, 2).Range.Text = document.Products.ElementAt(productIndexCompilator).Name;
                            doc.Tables[1].Cell(i + 2, 2).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphJustify;

                            doc.Tables[1].Cell(i + 2, 9).Range.Text = document.Products.ElementAt(productIndexCompilator).TradeMark;
                            doc.Tables[1].Cell(i + 2, 9).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphJustify;
                        }

                        ParamValue paramValue = null;
                        // Наименование показателя
                        paramValue = productProperties.ElementAt(propertyIndexCompilator).ParamValues.FirstOrDefault(m => m.Param.Name == "Наименование показателя");
                        if (paramValue != null)
                        {
                            doc.Tables[1].Cell(i + 2, 3).Range.Text = paramValue.Value;
                        }
                        else
                        {
                            doc.Tables[1].Cell(i + 2, 3).Range.Text = "";
                        }
                        doc.Tables[1].Cell(i + 2, 3).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                        // Минимальные значения показателей
                        paramValue = productProperties.ElementAt(propertyIndexCompilator).ParamValues.FirstOrDefault(m => m.Param.Name == "Минимальные значения показателей");
                        if (paramValue != null)
                        {
                            doc.Tables[1].Cell(i + 2, 4).Range.Text = paramValue.Value;
                        }
                        else
                        {
                            doc.Tables[1].Cell(i + 2, 4).Range.Text = "";
                        }
                        doc.Tables[1].Cell(i + 2, 4).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                        // Максимальные значения показателей
                        paramValue = productProperties.ElementAt(propertyIndexCompilator).ParamValues.FirstOrDefault(m => m.Param.Name == "Максимальные значения показателей");
                        if (paramValue != null)
                        {
                            doc.Tables[1].Cell(i + 2, 5).Range.Text = paramValue.Value;
                        }
                        else
                        {
                            doc.Tables[1].Cell(i + 2, 5).Range.Text = "";
                        }
                        doc.Tables[1].Cell(i + 2, 5).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                        // Значения показателей, которые не могут изменяться
                        paramValue = productProperties.ElementAt(propertyIndexCompilator).ParamValues.FirstOrDefault(m => m.Param.Name == "Значения показателей, которые не могут изменяться");
                        if (paramValue != null)
                        {
                            doc.Tables[1].Cell(i + 2, 6).Range.Text = paramValue.Value;
                        }
                        else
                        {
                            doc.Tables[1].Cell(i + 2, 6).Range.Text = "";
                        }
                        doc.Tables[1].Cell(i + 2, 6).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                        // Конкретные показатели
                        paramValue = productProperties.ElementAt(propertyIndexCompilator).ParamValues.FirstOrDefault(m => m.Param.Name == "Конкретные показатели");
                        if (paramValue != null)
                        {
                            doc.Tables[1].Cell(i + 2, 7).Range.Text = paramValue.Value;
                        }
                        else
                        {
                            doc.Tables[1].Cell(i + 2, 7).Range.Text = "";
                        }
                        doc.Tables[1].Cell(i + 2, 7).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                        // Единица измерения
                        paramValue = productProperties.ElementAt(propertyIndexCompilator).ParamValues.FirstOrDefault(m => m.Param.Name == "Единица измерения");
                        if (paramValue != null)
                        {
                            doc.Tables[1].Cell(i + 2, 8).Range.Text = paramValue.Value;
                        }
                        else
                        {
                            doc.Tables[1].Cell(i + 2, 8).Range.Text = "";
                        }
                        doc.Tables[1].Cell(i + 2, 8).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                        propertyIndexCompilator++;
                        if (productProperties.Count() == propertyIndexCompilator)
                        {
                            propertyIndexCompilator = 0;
                            productIndexCompilator++;
                        }

                    }

                }

                catch (Exception er)
                {
                    if (doc != null)
                        doc.Close(ref falseObj, ref missingObj, ref missingObj);
                    doc = null;
                }

                application.Visible = true;
                return ResultType_enum.Done;
            }
            catch (Exception ex)
            {
                doc = null;
                message = ex.Message + '\n' + ex.StackTrace;
                return ResultType_enum.Error;
            }
            finally
            {
                isWork = false;
            }
        }
Esempio n. 15
0
        public void UnlockContractConcept(string conceptid,Word.Document doc)
        {
            //Is it one of ours
            if (isContract(doc))
            {
                //Remove the handler
                Microsoft.Office.Tools.Word.Document vstoDoc = Globals.Factory.GetVstoObject(doc);
                vstoDoc.ContentControlOnExit -= new Word.DocumentEvents2_ContentControlOnExitEventHandler(vstoDoc_ContentControlOnExit);

                string contractid = GetDocId(doc);

                //Now step through the doc
                object start = doc.Content.Start;
                object end = doc.Content.End;
                Word.Range r = doc.Range(ref start, ref end);

                Word.ContentControl[] ccs = new Word.ContentControl[r.ContentControls.Count];
                foreach (Word.ContentControl cc in r.ContentControls)
                {
                    string tag = cc.Tag;
                    if (tag != null && tag != "" && cc.Tag.Contains('|'))
                    {
                        string[] taga = cc.Tag.Split('|');
                        if (taga[0] == "Concept" && Convert.ToString(taga[1]) == conceptid)
                        {

                            // unlock the clause
                            cc.LockContents = false;
                            cc.LockContentControl = true;

                            // also have to unlock any other controls in the range
                            foreach (Word.ContentControl child in cc.Range.ContentControls)
                            {
                                if (child.ID != cc.ID)
                                {
                                    child.LockContents = false;
                                    child.LockContentControl = true;
                                }
                            }

                            // update the tag to set the modified to be unlocked so we know to load the clause
                            // from the database
                            cc.Tag = "Concept|" + taga[1].ToString() + "|" + taga[2].ToString() + "|" + "Unlocked";

                        }

                    }
                    //Add back in the handler
                    vstoDoc.ContentControlOnExit += new Word.DocumentEvents2_ContentControlOnExitEventHandler(vstoDoc_ContentControlOnExit);

                }
            }
        }
Esempio n. 16
0
        private void RemovePage(Word._Document doc, int pageNo)
        {
            object oMissing = System.Reflection.Missing.Value;
            int pages = doc.ComputeStatistics(Word.WdStatistic.wdStatisticPages, ref oMissing);
            object objWhat = Word.WdGoToItem.wdGoToPage;
            object objWhich = Word.WdGoToDirection.wdGoToAbsolute;
            object objPage = pageNo;//指定页
            Word.Range range1 = doc.GoTo(ref objWhat, ref objWhich, ref objPage, ref oMissing);
            Word.Range range2 = range1.GoToNext(Word.WdGoToItem.wdGoToPage);
            object objStart = range1.Start;
            object objEnd = range2.Start;
            if (range1.Start == range2.Start)
                objEnd = doc.Characters.Count;//最后一页

            string str = doc.Range(ref objStart, ref objEnd).Text;

            object unit = (int)Word.WdUnits.wdCharacter;
            object count = 1;
            doc.Range(ref objStart, ref objEnd).Delete(ref unit, ref count);
        }
Esempio n. 17
0
        public void UnlockLockTemplateConcept(Word.Document doc,string conceptid,bool lck)
        {
            //Is it one of ours
            if (isTemplate(doc))
            {
                //Remove the handler
                Microsoft.Office.Tools.Word.Document vstoDoc = Globals.Factory.GetVstoObject(doc);
                vstoDoc.ContentControlOnExit -= new Word.DocumentEvents2_ContentControlOnExitEventHandler(vstoDoc_ContentControlOnExit);

                string templateid = GetDocId(doc);

                //Now step through the doc
                object start = doc.Content.Start;
                object end = doc.Content.End;
                Word.Range r = doc.Range(ref start, ref end);

                Word.ContentControl[] ccs = new Word.ContentControl[r.ContentControls.Count];
                int cnt = 0;
                foreach (Word.ContentControl cc in r.ContentControls)
                {
                    string tag = cc.Tag;
                    if (tag != null && tag != "" && cc.Tag.Contains('|'))
                    {
                        string[] taga = cc.Tag.Split('|');
                        if (taga[0] == "Concept" && Convert.ToString(taga[1]) == conceptid)
                        {

                            cc.LockContents = lck;
                            cc.LockContentControl = true;

                        }
                    }
                    //Add back in the handler
                    vstoDoc.ContentControlOnExit += new Word.DocumentEvents2_ContentControlOnExitEventHandler(vstoDoc_ContentControlOnExit);

                }
            }
        }
Esempio n. 18
0
 static void CopyAllContent(Wd.Document target, Wd.Document source)
 {
     source.Range().Copy();
     target.Range().Paste();
     ClipboardHelper.Clear();
 }
Esempio n. 19
0
        //Contract Instance Stuff - might be the same as ContractTemplate
        public void UpdateContractConcept(string conceptid, string clauseid, string xml,string lastmodified, Word.Document doc, Dictionary<string, string> elementValues)
        {
            //Is it one of ours
            if (isContract(doc))
            {
                //Remove the handler
                Microsoft.Office.Tools.Word.Document vstoDoc = Globals.Factory.GetVstoObject(doc);
                vstoDoc.ContentControlOnExit -= new Word.DocumentEvents2_ContentControlOnExitEventHandler(vstoDoc_ContentControlOnExit);

                string contractid = GetDocId(doc);

                //Now step through the doc and update the concept if it matches the one we just updated
                object start = doc.Content.Start;
                object end = doc.Content.End;
                Word.Range r = doc.Range(ref start, ref end);

                //Create an array of concept content controls in the doc - have to copy or we get into problems with the range including the new ones
                //that we created
                Word.ContentControl[] ccs = new Word.ContentControl[r.ContentControls.Count];
                int cnt = 0;
                foreach (Word.ContentControl cc in r.ContentControls)
                {
                    ccs[cnt++] = cc;
                }

                Globals.ThisAddIn.Application.ScreenUpdating = false;

                //scratch do to hold the clause
                Word.Document scratch = Application.Documents.Add(Visible: false);

                //hold the old clauses xml;
                string oldxml = "";

                //Now step through all the Contact Controls and update the XML so we get the newest clauses
                foreach (Word.ContentControl cc in ccs)
                {
                    string tag = cc.Tag;
                    if (tag != null && tag != "" && cc.Tag.Contains('|'))
                    {
                        string[] taga = cc.Tag.Split('|');
                        if (taga[0] == "Concept" && Convert.ToString(taga[1]) == conceptid)
                        {

                            // Get the details of the clause - this would be too chatty when connected to salesforce
                            // store the xml in the tree instead and pass into the function
                            // DataReturn dr = _d.GetClause(clauseid);

                            string txt = "";
                            if (clauseid!="" && xml == "")
                            {
                                xml = "";
                                txt = "Sorry! problem clause doesn't exist!";
                            }

                            if (cc.PlaceholderText != null)
                            {
                                cc.SetPlaceholderText(Text: "");
                            }

                            // Populate the content control with the values from the database
                            // have to unlock it first
                            cc.LockContents = false;
                            cc.LockContentControl = true;

                            //Also have to unlock any other controls in the range
                            foreach (Word.ContentControl child in cc.Range.ContentControls)
                            {
                                if (child.ID != cc.ID)
                                {
                                    child.LockContents = false;
                                    child.LockContentControl = false;
                                }
                            }

                            oldxml = cc.Range.WordOpenXML;

                            // OK having lots of problems with large paragraphs inserting into the content
                            // control - had a play manually and it worked when cutting and pasting
                            // *so* get the XML in a sepearate page and then get the formatted text and update
                            // this seems to fix it! need to do some more digging to see if there is a better way

                            Utility.UnlockContentControls(scratch);
                            scratch.Range(scratch.Content.Start, scratch.Content.End).Delete();
                            if (xml != "") scratch.Range(0).InsertXML(xml);

                            // if clauseid is blank then its a "select none" so do it even though the xml is blank
                            if (clauseid=="" || xml != "")
                            {
                                //cc.Range.InsertXML(xml);

                                //Track changes?
                                if (doc.TrackRevisions)
                                {

                                    // OK - gets more complicated! save the old paragraph to a scratch doc and undo any changes
                                    // then get the new one in another scratch doc - stop tracking changes in the current doc
                                    // do a diff and then insert that in the parra

                                    Word.Document oldclause=Globals.ThisAddIn.Application.Documents.Add(Visible: false);
                                    string oldclausefilename = Utility.SaveTempFile(doc.Name + "-oldclause");
                                    oldclause.Range().InsertXML(oldxml);

                                    // get rid of any changes - have to make it the active doc to do this
                                    oldclause.Activate();
                                    oldclause.RejectAllRevisions();

                                    MakeDropDownElementsText(oldclause);

                                    // Now update the elements of the scratch
                                    Utility.UnlockContentControls(scratch);
                                    UpdateElements(scratch, elementValues);
                                    // Dropdowns don't diff well (they show as changes, so change the content controls to text - they'll get changed back by initiate)
                                    MakeDropDownElementsText(scratch);

                                    // Now run a diff - do it from the old doc rather than a compare so it gives us the redline rather than blue line compare
                                    string scratchfilename = Utility.SaveTempFile(doc.Name + "-newclause");
                                    scratch.SaveAs2(FileName: scratchfilename, FileFormat: Word.WdSaveFormat.wdFormatXMLDocument, CompatibilityMode: Word.WdCompatibilityMode.wdCurrent);
                                    // this is how you do it as a pure compare - Word.Document compare = Application.CompareDocuments(oldclause, scratch,Granularity:Word.WdGranularity.wdGranularityCharLevel);

                                    oldclause.Compare(scratchfilename, CompareTarget: Word.WdCompareTarget.wdCompareTargetCurrent, AddToRecentFiles: false);
                                    oldclause.ActiveWindow.Visible = false;

                                    // Activate the doc - switch of tracking and insert the marked up dif
                                    doc.Activate();
                                    doc.TrackRevisions = false;

                                    // delete out what is there
                                    cc.Range.Delete();

                                    // delete out the styles!
                                    cc.Range.set_Style(Word.WdBuiltinStyle.wdStyleNormal);

                                    // delete out the pesky tables
                                    for (int tablesi = cc.Range.Tables.Count; tablesi > 0; tablesi--)
                                    {
                                        cc.Range.Tables[tablesi].Delete();
                                    }

                                    cc.Range.FormattedText = oldclause.Content.FormattedText;
                                    doc.Activate();
                                    doc.TrackRevisions = true;

                                    var doccloseoldclause = (Microsoft.Office.Interop.Word._Document)oldclause;
                                    doccloseoldclause.Close(false);

                                }
                                else
                                {
                                    try
                                    {
                                        // delete out what is there
                                        cc.Range.Delete();

                                        // delete out the styles!
                                        cc.Range.set_Style(Word.WdBuiltinStyle.wdStyleNormal);

                                        // delete out the pesky tables
                                        for (int tablesi = cc.Range.Tables.Count; tablesi > 0; tablesi--)
                                        {
                                            cc.Range.Tables[tablesi].Delete();
                                        }

                                        Word.Range newr = scratch.Range();
                                        cc.Range.FormattedText = newr.FormattedText;
                                    }
                                    catch (Exception)
                                    {
                                    }
                                }
                            }
                            else
                            {
                                cc.Range.InsertAfter(txt);
                            }

                            // sort out the formatting problems caused by inserting into the container
                            doc.Activate();
                            bool tchanges = doc.TrackRevisions;
                            doc.TrackRevisions = false;

                            // When we insert into the clause it adds a \r - have to get rid of it
                            // had a bunch of ways to do it - this seems to work!
                            try
                            {
                                Word.Range newr = doc.Range(cc.Range.End - 1, cc.Range.End);
                                if (newr.Characters.Count == 1)
                                {
                                    if (newr.Characters[1].Text == "\r")
                                    {  // Characters starts at 1 - gets me everytime
                                       newr.Delete();
                                    }
                                }

                            }
                            catch (Exception)
                            {

                            }

                            doc.TrackRevisions = tchanges;

                            //close the scratch
                            var docclosescratch = (Microsoft.Office.Interop.Word._Document)scratch;
                            docclosescratch.Close(false);
                            System.Runtime.InteropServices.Marshal.ReleaseComObject(docclosescratch);

                            // update the tag
                            cc.Tag = "Concept|" + conceptid + "|" + clauseid + "|" + lastmodified;

                            //relock
                            cc.LockContents = true;
                            cc.LockContentControl = true;
                        }
                    }

                }

                Globals.ThisAddIn.Application.ScreenUpdating = true;

                //Add back in the handler
                vstoDoc.ContentControlOnExit += new Word.DocumentEvents2_ContentControlOnExitEventHandler(vstoDoc_ContentControlOnExit);

            }
        }
Esempio n. 20
0
        public void RemoveConcept(Word.Document doc,string conceptid)
        {
            if (isTemplate(doc))
            {

                //Remove the handler
                Microsoft.Office.Tools.Word.Document vstoDoc = Globals.Factory.GetVstoObject(doc);
                vstoDoc.ContentControlOnEnter -= new Word.DocumentEvents2_ContentControlOnEnterEventHandler(doc_ContentControlOnEnter);
                //Now step through the doc and update the concept if it matches the one we just updated
                object start = doc.Content.Start;
                object end = doc.Content.End;
                Word.Range r = doc.Range(ref start, ref end);

                //Create an array of concept content controls in the doc - have to copy or we get into problems with the range including the new ones
                //that we created
                Word.ContentControl[] ccs = new Word.ContentControl[r.ContentControls.Count];
                int cnt = 0;
                foreach (Word.ContentControl cc in r.ContentControls)
                {
                    ccs[cnt++] = cc;
                }

                //Now step through all the Contact Controls and update the XML so we get the newest clauses
                foreach (Word.ContentControl cc in ccs)
                {
                    string tag = cc.Tag;
                    if (tag != null && tag != "" && cc.Tag.Contains('|'))
                    {
                        string[] taga = cc.Tag.Split('|');
                        if (taga[0] == "Concept" && Convert.ToString(taga[1]) == conceptid)
                        {

                            //Remove the content control
                            //have to unlock it first
                            cc.LockContents = false;
                            cc.LockContentControl = false;

                            //Also have to unlock any other controls in the range
                            foreach (Word.ContentControl child in cc.Range.ContentControls)
                            {
                                if (child.ID != cc.ID)
                                {
                                    child.LockContents = false;
                                    child.LockContentControl = false;
                                }
                            }

                            cc.Range.Select();
                            Globals.ThisAddIn.Application.Selection.Delete();
                            cc.Delete();

                        }
                    }

                }

                //Add back in the handler
                vstoDoc.ContentControlOnEnter += new Word.DocumentEvents2_ContentControlOnEnterEventHandler(doc_ContentControlOnEnter);
            }
        }
Esempio n. 21
0
        public void UpdateContractTemplatesConcept(Word.Document doc,string conceptid, string clauseid,string xml,string lastmodified)
        {
            if(doc==null) doc = Application.ActiveDocument;
            //Is it one of ours
            if (isTemplate(doc))
            {

                //Remove the handler
                Microsoft.Office.Tools.Word.Document vstoDoc = Globals.Factory.GetVstoObject(doc);
                try
                {
                    vstoDoc.ContentControlOnEnter -= new Word.DocumentEvents2_ContentControlOnEnterEventHandler(doc_ContentControlOnEnter);
                } catch(Exception){

                }

                string templateid = GetDocId(doc);

                //Now step through the doc and update the concept if it matches the one we just updated
                object start = doc.Content.Start;
                object end = doc.Content.End;
                Word.Range r = doc.Range(ref start, ref end);

                //Create an array of concept content controls in the doc - have to copy or we get into problems with the range including the new ones
                //that we created
                Word.ContentControl[] ccs = new Word.ContentControl[r.ContentControls.Count];
                int cnt = 0;
                foreach (Word.ContentControl cc in r.ContentControls)
                {
                    ccs[cnt++] = cc;
                }

                //Now step through all the Contact Controls and update the XML so we get the newest clauses
                foreach (Word.ContentControl cc in ccs)
                {
                    string tag = cc.Tag;
                    if (tag != null && tag != "" && cc.Tag.Contains('|'))
                    {
                        string[] taga = cc.Tag.Split('|');
                        if (taga[0] == "Concept" && Convert.ToString(taga[1]) == conceptid)
                        {

                            // check if we have to do this - when the contract is initially loaded the containters are already
                            // populated so don't update them if not required

                            bool selectedclause = false;
                            if (taga.Length > 3)
                            {
                                if (taga[2] == clauseid && lastmodified == taga[3])
                                {
                                    selectedclause = true;
                                }
                            }

                            if (!selectedclause)
                            {

                                //scratch do to hold the clause
                                Word.Document scratch = Application.Documents.Add(Visible: false);

                                string txt = "";

                                //Get the details of the clause - this would be too chatty when connected to salesforce
                                //store the xml in the tree instead and pass into the function

                                //xml = d.GetClauseXML(clauseid).strRtn;

                                if (xml == "")
                                {
                                    xml = "";
                                    txt = "Sorry! problem clause doesn't exist!";
                                }

                                //Populate the content control with the values from the database
                                //have to unlock it first
                                cc.LockContents = false;
                                cc.LockContentControl = false;

                                //Also have to unlock any other controls in the range
                                foreach (Word.ContentControl child in cc.Range.ContentControls)
                                {
                                    if (child.ID != cc.ID)
                                    {
                                        child.LockContents = false;
                                        child.LockContentControl = false;
                                    }
                                }

                                //OK having lots of problems with large paragraphs inserting into the content
                                //control - had a play manually and it worked when cutting and pasting
                                //*so* get the XML in a sepearate page and then get the formatted text and update
                                //this seems to fix it! need to do some more digging to see if there is a better way
                                Utility.UnlockContentControls(scratch);
                                scratch.Range(scratch.Content.Start, scratch.Content.End).Delete();

                                if (xml != "") scratch.Range().InsertXML(xml);

                                if (xml != "")
                                {
                                    try
                                    {
                                        // delete out what is there
                                        cc.Range.Delete();

                                        // delete out the styles!
                                        cc.Range.set_Style(Word.WdBuiltinStyle.wdStyleNormal);

                                        // delete out the pesky tables
                                        for (int tablesi = cc.Range.Tables.Count; tablesi > 0; tablesi--)
                                        {
                                            cc.Range.Tables[tablesi].Delete();
                                        }

                                        // When we insert into the clause it adds a \r - have to get rid of it
                                        // had a bunch of ways to do it - this seems to work!
                                        Word.Range newr = scratch.Range();
                                        cc.Range.FormattedText = newr.FormattedText;
                                        try{
                                            newr = doc.Range(cc.Range.End-1,cc.Range.End);
                                            if(newr.Characters.Count==1){
                                                if(newr.Characters[1].Text == "\r"){  // Characters starts at 1 - gets me everytime
                                                    newr.Delete();
                                                }
                                            }

                                        } catch(Exception){

                                        }

                                    }
                                    catch (Exception)
                                    {
                                    }

                                    // close the scratch
                                   var docclosescratch = (Microsoft.Office.Interop.Word._Document)scratch;
                                   docclosescratch.Close(false);
                                   System.Runtime.InteropServices.Marshal.ReleaseComObject(docclosescratch);

                                }
                                else
                                {
                                    cc.Range.InsertAfter(txt);
                                }

                                /* DO THIS IN THE SCRATCH NOW! this was causing all sorts of bother
                                //remove any trailing carriage returns

                                for (var i = cc.Range.Characters.Count; i > 0; i--)
                                {
                                    if (i <= cc.Range.Characters.Count)
                                    {
                                        if (cc.Range.Characters[i].Text == "\r")
                                        {
                                            cc.Range.Characters[i].Delete();
                                        }
                                        else
                                        {
                                            break;
                                        }
                                    }
                                }

                                /*if (cc.Range.Footnotes.Count == 0)
                                {
                                    while (cc.Range.Characters.Last.Text == "\r")
                                    {
                                        cc.Range.Characters.Last.Delete();
                                    }
                                }
                                */

                                // update the tag
                                cc.Tag = "Concept|" + conceptid + "|" + clauseid + "|" + lastmodified;

                                //relock
                                cc.LockContents = true;
                                cc.LockContentControl = true;

                            }
                        }
                    }

                }

                //Add back in the handler
                try
                {
                    vstoDoc.ContentControlOnEnter += new Word.DocumentEvents2_ContentControlOnEnterEventHandler(doc_ContentControlOnEnter);
                }
                catch (Exception)
                {

                }
            }
        }
Esempio n. 22
0
        public void RemoveContentControls(Word.Document doc)
        {
            //Is it one of ours
            if (isContract(doc))
            {
                //Remove the handler
                Microsoft.Office.Tools.Word.Document vstoDoc = Globals.Factory.GetVstoObject(doc);
                vstoDoc.ContentControlOnExit -= new Word.DocumentEvents2_ContentControlOnExitEventHandler(vstoDoc_ContentControlOnExit);

                string contractid = GetDocId(doc);

                //Now step through the doc
                object start = doc.Content.Start;
                object end = doc.Content.End;
                Word.Range r = doc.Range(ref start, ref end);

                foreach (Word.ContentControl cc in r.ContentControls)
                {
                    string tag = cc.Tag;
                    if (tag != null && tag != "" && cc.Tag.Contains('|'))
                    {
                        string[] taga = cc.Tag.Split('|');

                        if (taga.Length > 1 && ((taga[0] == "Concept" && taga[1] != "") || (taga[0] == "Element" && taga[1] != "")))
                        {
                            Word.Range ccr = cc.Range;
                            cc.LockContentControl = false;
                            cc.LockContents = false;
                            cc.Delete(false);

                            // *TODO* if none selected we may want to delete the extra return
                        }
                    }
                }
            }
        }
Esempio n. 23
0
        private void UpdateElements(Word.Document doc, Dictionary<string, string> elementValues)
        {
            //Now step through the doc and update the elements
            object start = doc.Content.Start;
            object end = doc.Content.End;
            Word.Range r = doc.Range(ref start, ref end);

            // Step through and select the one passed
            foreach (Word.ContentControl cc in r.ContentControls)
            {
                string tag = cc.Tag;
                if (tag != null && tag != "" && cc.Tag.Contains('|'))
                {
                    string[] taga = cc.Tag.Split('|');
                    if (taga[0] == "Element")
                    {
                        //OK - get the value from the dictionary and format it and update!
                        string id = taga[1];

                        if (elementValues.ContainsKey(id))
                        {
                            string value = elementValues[id];
                            string type = "";

                            try //put in a catch incase there are redline issues!
                            {
                                if (cc.Type == Word.WdContentControlType.wdContentControlComboBox)
                                {
                                    foreach (Word.ContentControlListEntry de in cc.DropdownListEntries)
                                    {
                                        if (de.Text == value) de.Select();
                                    }
                                }
                                else
                                {
                                    //Select
                                    //cc.Range.Select();
                                    if (value.EndsWith("\\n"))
                                    {
                                        value = value.Substring(0, value.Length - 2) + (char)11;
                                    }

                                    if (value == "") value = " ";

                                    // ok basic formatting support
                                    Word.Font f = cc.Range.Font.Duplicate;
                                    cc.Range.Text = value;
                                    cc.Range.Font = f;

                                }
                            }
                            catch (Exception e)
                            {
                            }

                        }

                    }
                }
            }
        }
Esempio n. 24
0
        public void RemoveElements(Word.Document doc,string id)
        {
            //Is it one of ours and is it a clause
            if (isClause(doc) || isTemplate(doc))
            {

                //Now step through the doc
                object start = doc.Content.Start;
                object end = doc.Content.End;
                Word.Range r = doc.Range(ref start, ref end);

                // Step through and select the one passed
                foreach (Word.ContentControl cc in r.ContentControls)
                {
                    string tag = cc.Tag;
                    if (tag != null && tag != "" && cc.Tag.Contains('|'))
                    {
                        string[] taga = cc.Tag.Split('|');
                        if (taga[0] == "Element" && taga[1] == id.ToString())
                        {
                            //Select
                            cc.Range.Select();

                            cc.LockContents = false;
                            cc.LockContentControl = false;

                            //Also have to unlock any other controls in the range
                            foreach (Word.ContentControl child in cc.Range.ContentControls)
                            {
                                if (child.ID != cc.ID)
                                {
                                    child.LockContents = false;
                                    child.LockContentControl = false;
                                }
                            }

                            cc.Range.Select();
                            Globals.ThisAddIn.Application.Selection.Delete();
                            cc.Delete();
                        }
                    }
                }
            }
        }
Esempio n. 25
0
        public Word.Range GetTemplateClauseRange(Word.Document doc, string conceptid)
        {
            Word.Range r = null;
            //Is it one of ours
            if (isTemplate(doc))
            {

                //Now step through the doc and update the concept if it matches the one we just updated
                object start = doc.Content.Start;
                object end = doc.Content.End;
                r = doc.Range(ref start, ref end);

                // Step through and select the one passed
                foreach (Word.ContentControl cc in r.ContentControls)
                {
                    string tag = cc.Tag;
                    if (tag != null && tag != "" && cc.Tag.Contains('|'))
                    {
                        string[] taga = cc.Tag.Split('|');
                        if (taga[0] == "Concept" && Convert.ToString(taga[1]) == conceptid)
                        {
                            //Get Text
                            r = cc.Range;
                        }
                    }
                }

            }

            return r;
        }
Esempio n. 26
0
        public void SelectContractTemplatesConcept(Word.Document doc,string conceptid)
        {
            //Is it one of ours
            if (isTemplate(doc))
            {
                string templateid = GetDocId(doc);

                //Now step through the doc and update the concept if it matches the one we just updated
                object start = doc.Content.Start;
                object end = doc.Content.End;
                Word.Range r = doc.Range(ref start, ref end);

                // Step through and select the one passed
                foreach (Word.ContentControl cc in r.ContentControls)
                {
                    string tag = cc.Tag;
                    if (tag != null && tag != "" && cc.Tag.Contains('|'))
                    {
                        string[] taga = cc.Tag.Split('|');
                        if (taga[0] == "Concept" && Convert.ToString(taga[1]) == conceptid)
                        {
                            //Select
                            cc.Range.Select();
                        }
                    }
                }

            }
        }
Esempio n. 27
0
        private void insertHtmlFile(ref Word._Application oWord, ref Word._Document oDoc, string fname, string title, string subTitle)
        {
            Object oTrue = true;
            Object oFalse = false;
            object oMissing = System.Reflection.Missing.Value;
            object oEndOfDoc = "\\endofdoc"; // \endofdoc is a predefined bookmark
            object oPageBreak = Word.WdBreakType.wdPageBreak;
            //Object styleHeading1 = "Heading 5";
            //Object styleHeading2 = "Heading 6";
            Object styleHeading1 = "MyHeading4";
            Object styleHeading2 = "MyHeading5";

            Word.Paragraph oHtmlTitle;
            Word.Paragraph oSectionTitle;
            oSectionTitle = oDoc.Content.Paragraphs.Add(ref oMissing);
            oSectionTitle.Range.Text = title;
            oSectionTitle.Range.Font.Bold = 1;
            oSectionTitle.Format.SpaceAfter = 24;    //24 pt spacing after paragraph.
            oSectionTitle.Range.set_Style(styleHeading1);
            oSectionTitle.Range.Paragraphs.OutlineLevel = Word.WdOutlineLevel.wdOutlineLevel4;
            oSectionTitle.Range.InsertParagraphAfter();

            oHtmlTitle = oDoc.Content.Paragraphs.Add(ref oMissing);
            oHtmlTitle.Range.Text = subTitle;
            oHtmlTitle.Range.Font.Bold = 1;
            oHtmlTitle.Format.SpaceAfter = 24;    //24 pt spacing after paragraph.
            oHtmlTitle.Range.set_Style(styleHeading2);
            oHtmlTitle.Range.Paragraphs.OutlineLevel = Word.WdOutlineLevel.wdOutlineLevel5;
            oHtmlTitle.Range.InsertParagraphAfter();

            Object oRngoBookMarkStart = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range.Start;

            String oMergePath1 = "c:/temp/word/merge.html";
            oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range.InsertFile(oMergePath1, ref oMissing, ref oFalse, ref oFalse, ref oFalse);

            Object oRngoBookMarkEnd = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range.Start;

            Word.Range rngBKMarkSelection = oDoc.Range(ref oRngoBookMarkStart, ref oRngoBookMarkEnd);
            //rngBKMarkSelection.set_Style(ref styleNormal);
            rngBKMarkSelection.Font.Shrink();
            rngBKMarkSelection.Font.Shrink();
            rngBKMarkSelection.Font.Shrink();
            rngBKMarkSelection.Font.Shrink();
            rngBKMarkSelection.Font.Shrink();

            //oWord.Selection.ClearFormatting();
        }
Esempio n. 28
0
        //Step through the Word Doc to get the order of the Concepts
        public string GetConceptOrder(Word.Document doc)
        {
            string orderlist = "";
            //Is it one of ours
            if (isTemplate(doc))
            {

                //Now step through the doc and update the concept if it matches the one we just updated
                object start = doc.Content.Start;
                object end = doc.Content.End;
                Word.Range r = doc.Range(ref start, ref end);

                // Step through and select the one passed
                foreach (Word.ContentControl cc in r.ContentControls)
                {
                    string tag = cc.Tag;
                    if (tag != null && tag != "" && cc.Tag.Contains('|'))
                    {
                        string[] taga = cc.Tag.Split('|');

                        if (taga.Length > 1 && taga[0] == "Concept" && taga[1] != "")
                        {
                            orderlist += (orderlist == "" ? "" : ",") + tag;
                        }
                    }
                }
            }
            return orderlist;
        }
            private void RemoveControls(Word.Document doc){
                object start = doc.Content.Start;
                object end = doc.Content.End;
                Word.Range r = doc.Range(ref start, ref end);

                foreach (Word.ContentControl cc in r.ContentControls)
                {
                    string tag = cc.Tag;
                    if (tag != null && tag != "" && cc.Tag.Contains('|'))
                    {
                        string[] taga = cc.Tag.Split('|');

                        if (taga.Length > 1 && ((taga[0] == "Concept" && taga[1] != "") || (taga[0] == "Element" && taga[1] != "")))
                        {
                            Word.Range ccr = cc.Range;
                            cc.LockContentControl = false;
                            cc.LockContents = false;
                            cc.Delete(false);

                            // *TODO* if none selected we may want to delete the extra return

                        }
                    }
                }

                // Switch of the element highliting
                // Need to select somewhere editable!
                doc.Characters.Last.Select();

                try
                {
                    Word.Style s = doc.Styles["ContentControl"];
                    if (s.Shading.BackgroundPatternColor != Word.WdColor.wdColorAutomatic)
                    {
                        s.Shading.BackgroundPatternColor = Word.WdColor.wdColorAutomatic;
                    }
                }
                catch (Exception)
                {
                }
            }
Esempio n. 30
0
        private bool createBookmarks(string targetDoc, int index, Word.Document wordDocPar, object strFileName)
        {
            int docLen = targetDoc.Length;
            string startText ="";
            if (docLen >= 250)
            {
                startText = targetDoc.Substring(0, 250);
            }
            else
            {
                startText = targetDoc;
            }

            Object Nothing = System.Reflection.Missing.Value;

            Word.Range rng = wordDocPar.Range();
            rng.Find.ClearFormatting();
            object findText = startText;

            if (rng.Find.Execute(ref findText,
                ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing,
                ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing,
                ref Nothing, ref Nothing))
            {
                // insert_one_bookmark(rng, index, anotherWordDoc);
                int start = rng.Start;
                //end = rng.End;
                object bookmark_rng = wordDocPar.Range(start, start + docLen);
                //MessageBox.Show(index.ToString());
                //MessageBox.Show(start.ToString(), end.ToString());
                string bookmark_name = "ST" + start.ToString(); //
                bookmark_list.Add(bookmark_name);
                wordDocPar.Bookmarks.Add(bookmark_name, ref bookmark_rng);
                //将WordDoc文档对象的内容保存为DOC文档
                wordDocPar.SaveAs(ref   strFileName, ref   Nothing, ref   Nothing, ref   Nothing, ref   Nothing, ref   Nothing, ref   Nothing, ref   Nothing, ref   Nothing, ref   Nothing, ref   Nothing, ref   Nothing, ref   Nothing, ref   Nothing, ref   Nothing, ref   Nothing);
                return true;
            }
            else
            {
                return false;
                //MessageBox.Show("Text not found.");
            }
        }