示例#1
0
        public void app_WindowBeforeRightClick(Word.Selection selection, ref bool Cancel)
        {
            if (null == selection)
            {
                return;
            }
            range = selection.Range;

            switch (selection.Type)
            {
            case Word.WdSelectionType.wdSelectionIP:
                range.Expand(Word.WdUnits.wdWord);                         // expand range to be a whole word
                break;

            case Word.WdSelectionType.wdSelectionNormal:                     // word(s) selected
                break;

            default: return;
            }
            // Trim range, so when we replace the query we don't trample on the spaces between words
            while (range.Characters.First.Text == " ")
            {
                range.MoveStart(Word.WdUnits.wdCharacter);
            }
            while (range.Characters.Last.Text == " ")
            {
                range.MoveEnd(Word.WdUnits.wdCharacter, -1);
            }

            if (!string.IsNullOrEmpty(range.Text))
            {
                ShowMenu(range.Text);
            }
        }
示例#2
0
        private async void GetUpdateSentenceText()
        {
            ////通过选取类型来获取光标位置
            Word.Selection currentSelection = Application.Selection;

            //// 暂存当前用户的 Overtype 设置
            bool userOvertype = Application.Options.Overtype;

            // 确保 Overtype false.
            if (Application.Options.Overtype)
            {
                Application.Options.Overtype = false;
            }

            // 判断当前选取是否是一个插入点(编辑区光标)
            if (currentSelection.Type == Word.WdSelectionType.wdSelectionIP)
            {
                // 当前选取的Range位置,即光标位置
                int _cur_start = currentSelection.Range.Start;
                int _cur_end   = currentSelection.Range.End;

                //// 以当前光标位置作为Range起始区间
                Word.Range rng = this.Application.ActiveDocument.Range(_cur_start, _cur_end);
                ////通过扩展Range范围来获取更新后的句子
                rng.MoveStart(Word.WdUnits.wdSentence, -1);
                rng.MoveEnd(Word.WdUnits.wdSentence, 1);
                string _curRangeText = rng.Text;

                // Debug.WriteLine(_curRangeText);
                TaskPanel.DetectTextLabel.Text = _curRangeText;

                //// 正则匹配,如果是完整句子,发送到服务端。
                string _sentenceRegex = @"(\.|。|\?|?|\!|!|……)";
                if (Regex.IsMatch(_curRangeText, _sentenceRegex))
                {
                    //// 去掉重复句子
                    if (cacheUpdateText != _curRangeText)
                    {
                        string _jsonParam = "{\"sentence\":\"" + _curRangeText + "\"}";

                        string _requestUrl = ConfigurationManager.AppSettings["RequestSentenceUrl"];

                        HttpWebResponse hwr = await HttpTool.RequesPostAsync(_requestUrl, _jsonParam);

                        HttpTool.ResponseResult _curResult = HttpTool.GetResponseJson <HttpTool.ResponseResult>(hwr);

                        cacheUpdateText = _curRangeText;
                    }
                }
            }

            // 恢复用户 Overtype
            Application.Options.Overtype = userOvertype;
        }
示例#3
0
        public Action AddToWordDocument(IResumeDataObject rdo, IResumeFormatObject rfo, Word.Document wordDoc)
        {
            return(() =>
            {
                if (rdo.ExpertiseEntities.Count > 0)
                {
                    // Expertise label
                    Word.Paragraph tagLineLabelPara = wordDoc.Content.Paragraphs.Add();
                    Word.Range r4label = tagLineLabelPara.Range;
                    r4label.Text = "Expertise";
                    r4label.InsertParagraphAfter();
                    r4label.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
                    r4label.Font.Name = rfo.HeaderFontName;
                    r4label.Font.Color = rfo.HeaderColorWord;
                    r4label.Font.Size = rfo.HeaderFontSize;

                    // Expertise item-headers
                    List <string> cats = rdo.ExpertiseEntities.Select(T => T.Category).Distinct().ToList();
                    for (int i = 0; i < cats.Count; i++)
                    {
                        Word.Paragraph p = wordDoc.Content.Paragraphs.Add();
                        Word.Range r4 = p.Range;
                        r4.Text = cats[i] + ": ";
                        int titleLength = r4.Text.Length;

                        // Insert expertise(s)
                        List <string> exps = rdo.ExpertiseEntities.Where(T => T.Category == cats[i]).Select(T => T.Expertise).ToList();
                        for (int j = 0; j < exps.Count; j++)
                        {
                            r4.Font.Name = rfo.BodyFontName;
                            r4.Font.Size = rfo.BodyFontSize;
                            r4.InsertAfter(exps[j] + " " + '\u2022' + " ");
                        }
                        r4.Text = r4.Text.Remove(r4.Text.Length - 2);

                        Word.Range titleRange = r4.Duplicate;
                        titleRange.MoveEnd(Word.WdUnits.wdCharacter, titleLength - 1 - titleRange.Characters.Count);
                        titleRange.MoveStart(Word.WdUnits.wdCharacter, 0);
                        titleRange.Font.Name = rfo.CategoryFontName;
                        titleRange.Font.Size = rfo.CategoryFontSize;

                        r4.InsertParagraphAfter();
                    }
                }
            });
        }
示例#4
0
        //---------------------------------------------------------------------
        private void Test8()
        {
            //<Snippet38>
            // Define a range of 7 characters.
            //<Snippet39>
            Word.Range rng = this.Application.ActiveDocument.Range(0, 7);
            //</Snippet39>

            // Move the start position 7 characters.
            //<Snippet40>
            rng.MoveStart(Word.WdUnits.wdCharacter, 7);
            //</Snippet40>

            // Move the end position 7 characters.
            //<Snippet41>
            rng.MoveEnd(Word.WdUnits.wdCharacter, 7);
            //</Snippet41>
            //</Snippet38>
        }
示例#5
0
        //---------------------------------------------------------------------
        private void Test8()
        {
            //<Snippet38>
            // Define a range of 7 characters.
            //<Snippet39>
            object start = 0;
            object end   = 7;

            Word.Range rng = this.Range(ref start, ref end);
            //</Snippet39>

            // Move the start position 7 characters.
            //<Snippet40>
            rng.MoveStart(Word.WdUnits.wdCharacter, 7);
            //</Snippet40>

            // Move the end position 7 characters.
            //<Snippet41>
            rng.MoveEnd(Word.WdUnits.wdCharacter, 7);
            //</Snippet41>
            //</Snippet38>
        }
示例#6
0
        internal static string ConvertToWPMLBlock(string stylesXml, string paraXml, int paraIdx, int sentIdx, int charidx)
        {
            StringBuilder builder   = new StringBuilder();
            XmlDocument   document  = new XmlDocument();
            XmlDocument   paragraph = new XmlDocument();
            bool          updStyles = false;

            if (!stylesXml.Equals(""))
            {
                updStyles = true;
            }

            try
            {
                Globals.ThisAddIn.Application.ActiveDocument.Content.Select();
                string docxml = Globals.ThisAddIn.Application.Selection.WordOpenXML;
                document.LoadXml(docxml);

                //now have to reset range, currently whole document selected.
                //Works to insert after current currently selected paragraph
                //now try to insert in middle of sentence. (in middle of paragraph).
                int tmpstart = Globals.ThisAddIn.Application.ActiveDocument.Paragraphs[1].Range.Start;
                int tmpend   = Globals.ThisAddIn.Application.ActiveDocument.Paragraphs[paraIdx].Range.End;

                int diff           = tmpend - tmpstart;
                int charstartrange = 0;

                if (charidx + 1 == tmpend)
                {
                    charstartrange = tmpend;
                }
                else if (charidx < tmpend)
                {
                    charstartrange = charidx - tmpstart;
                }
                else
                {
                    charstartrange = diff;
                }

                object     start = tmpstart;
                object     end   = tmpend;
                Word.Range rng   = Globals.ThisAddIn.Application.ActiveDocument.Range(ref start, ref end);
                object     unit  = Word.WdUnits.wdCharacter;
                object     count = charstartrange;
                rng.MoveStart(ref unit, ref count);
                rng.End = charstartrange;
                rng.Select();

                XmlNode body = document.SelectSingleNode(bodyXPath, NamespaceManager);
                body.InnerXml = paraXml;

                if (updStyles)
                {
                    XmlNode styles = document.SelectSingleNode(stylesXPath, NamespaceManager);
                    styles.InnerXml = stylesXml;
                }

                using (StringWriter writer = new StringWriter(builder))
                {
                    document.Save(writer);
                }
            }
            catch (Exception e)
            {
                string errMsg = e.Message;
            }
            return(builder.ToString());
        }
示例#7
0
        private void BTNprintGen_Click(object sender, EventArgs e)// кнопка печати сгенерированного билета
        {
            // var namespec = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
            //int q2 dataGridViewResult.SelectedRows[2].Cells[3].Value();


            try
            {
                var q1       = dataGridViewResult.Rows[1].Cells[0].Value.ToString();
                var namespec = dataGridViewResult.Rows[1].Cells[2].Value.ToString();
                ////var spec = dataGridViewResult.CurrentRow.Cells[16].Value.ToString();
                var numTik = dataGridViewResult.Rows[1].Cells[4].Value.ToString();
                var q2     = dataGridViewResult.Rows[2].Cells[0].Value.ToString();
                var q3     = dataGridViewResult.Rows[3].Cells[0].Value.ToString();
                // var q4 = dataGridViewResult.Rows[4].Cells[1].Value.ToString();
                // var q5 = dataGridViewResult.Rows[5].Cells[1].Value.ToString();
                var wordApp = new Word.Application();
                wordApp.Visible = false;

                try
                {
                    var worddocument = wordApp.Documents.Open(FileName);
                    var range        = worddocument.Content;
                    range.Copy();/*
                                  * Object start = Type.Missing;
                                  * Object end = Type.Missing;
                                  * Word.Range rng = worddocument.Range(ref start, ref end);
                                  * rng.Select();
                                  * string quantity = worddocument.Characters.Count.ToString();// общие количество символов в документе
                                  * MessageBox.Show("Characters:"  + worddocument.Characters.Count.ToString());
                                  *
                                  *
                                  * Object unit = Word.WdUnits.wdCharacter;
                                  * Object count = quantity;
                                  * rng.MoveStart(ref unit, ref count);
                                  */
                    //string bookmarkName = "T";
                    //object rStart = 0;
                    //object rEnd = worddocument.Content.End;
                    //Word.Document worddocument2 = wordApp.ActiveDocument;
                    //worddocument2.Bookmarks.Add("{T}", rEnd);

                    //Word.Bookmark bookm =
                    //worddocument.Range(ref rStart, ref rEnd).InsertAfter("Новая строка");



                    ReplaceWordStop("{namespec}", namespec, worddocument);
                    //ReplaceWordSHAB("{T}", _table, worddocument);
                    //ReplaceBookmarkText(worddocument, ref "T", textBox1.Text);
                    ReplaceWordStop("{numTik}", numTik, worddocument);
                    ReplaceWordStop("{q1}", q1, worddocument);
                    ReplaceWordStop("{q2}", q2, worddocument);
                    ReplaceWordStop("{q3}", q3, worddocument);
                    //ReplaceWordStop("{q4}", q4, worddocument);
                    //ReplaceWordStop("{q5}", q5, worddocument);
                    //wordApp.Selection.Bookmarks
                    Object     start = Type.Missing;
                    Object     end   = Type.Missing;
                    Word.Range rng   = worddocument.Range(ref start, ref end);
                    rng.Select();
                    string quantity = worddocument.Characters.Count.ToString();// общие количество символов в документе
                    MessageBox.Show("Characters:" + worddocument.Characters.Count.ToString());


                    Object unit  = Word.WdUnits.wdCharacter;
                    Object count = quantity;
                    rng.MoveStart(ref unit, ref count);
                    rng.Paste();
                    worddocument.SaveAs(@"D:\ticket.docx");

                    wordApp.Visible = true;
                }
                catch
                {
                    MessageBox.Show("ошибка печати");
                }
            }
            catch
            {
                MessageBox.Show("oh");
            }
        }
        /*
         * Note the THREE places style info can appear:
         *
         *   <w:sdt>
         *      <w:sdtPr>
         *        <w:rPr>
         *          <w:rStyle w:val="Heading1Char"/>
         *        </w:rPr>
         *        <w:id w:val="968472055"/>
         *        <w:placeholder>
         *          <w:docPart w:val="DefaultPlaceholder_1082065158"/>
         *        </w:placeholder>
         *        <w:showingPlcHdr/>
         *        <w:text/>
         *      </w:sdtPr>
         *      <w:sdtEndPr>
         *        <w:rPr>
         *          <w:rStyle w:val="DefaultParagraphFont"/>
         *          <w:rFonts w:asciiTheme="minorHAnsi" w:eastAsiaTheme="minorEastAsia" w:hAnsiTheme="minorHAnsi" w:cstheme="minorBidi"/>
         *          <w:b w:val="0"/>
         *          <w:bCs w:val="0"/>
         *          <w:color w:val="FF0000"/>
         *          <w:sz w:val="36"/>
         *          <w:szCs w:val="22"/>
         *        </w:rPr>
         *      </w:sdtEndPr>
         *
         *      <w:sdtContent>
         *        <w:r w:rsidRPr="00616F57">
         *          <w:rPr>
         *            <w:u w:val="single"/>
         *          </w:rPr>
         *          <w:t>ahhaaaaaaaaaa</w:t>
         *        </w:r>
         *      </w:sdtContent>
         *
         * A content control inserted programmatically or via Word 2010 Developer
         * menu appears to set:
         *
         *       <w:sdt>
         *          <w:sdtPr>
         *            <w:rPr>
         *              <w:color w:val="FF0000"/>
         *              <w:sz w:val="32"/>
         *            </w:rPr>
         *            <w:id w:val="1015963520"/>
         *            <w:placeholder>
         *              <w:docPart w:val="DefaultPlaceholder_1082065158"/>
         *            </w:placeholder>
         *            <w:text/>
         *          </w:sdtPr>
         *          <w:sdtContent>
         *            <w:proofErr w:type="gramStart"/>
         *            <w:r w:rsidR="00EF4BC6">
         *              <w:rPr>
         *                <w:color w:val="FF0000"/>
         *                <w:sz w:val="32"/>
         *              </w:rPr>
         *              <w:t>kkk</w:t>
         *            </w:r>
         *            <w:proofErr w:type="gramEnd"/>
         *          </w:sdtContent>
         *        </w:sdt>
         *
         * ie not w:sdtEndPr, which cc.set_DefaultTextStyle(ref style) sets
         *
         * Tested insertion at :
         * - first character in paragraph
         * - last character in paragraph (with and without paragraph mark formatted)
         * - between 2 differently formatted runs
         *
         * The rule seems to be that Word uses the formatting to the left,
         * except when it is at the beginning, in which case it uses the formatting
         * of the character to the right. If the character to the right is the
         * paragraph mark, it will use that.
         *
         */

        //public Word.ContentControl CopyAdjacentFormat(Word.ContentControl cc, bool foo) // foo arg does nothing, it is just to match delegate signature
        //{
        //    return CopyAdjacentFormat(cc);
        //}

        public Word.ContentControl CopyAdjacentFormat(Word.ContentControl cc)
        {
            //Thread.Sleep(200);
            object collapseStart = Word.WdCollapseDirection.wdCollapseStart;
            object collapseEnd   = Word.WdCollapseDirection.wdCollapseEnd;
            object unitCharacter = Word.WdUnits.wdCharacter;

            Word.Document activeDoc = Globals.ThisAddIn.Application.ActiveDocument;

            Word.Range leftRange  = cc.Range.Duplicate;
            Word.Range rightRange = cc.Range.Duplicate;

            Word.Range pRange    = activeDoc.Windows[1].Selection.Paragraphs[1].Range;
            int        pStartPos = pRange.Start;

            object countL = -2; // -1 is not enough

            leftRange.MoveStart(ref unitCharacter, ref countL);

            leftRange.Collapse(ref collapseStart); // it is ok for the range to be completely collapsed
            //leftRange.Text = "@";

            if (pStartPos > leftRange.Start)
            {
                // Oops, we were at the start of the paragraph,
                // so use the character to the right
                log.Info("Applying RIGHT formatting...");
                object countR = +1; // -1 is not enough
                rightRange.MoveEnd(ref unitCharacter, ref countR);
                rightRange.Collapse(ref collapseEnd);

                rightRange.Select();
            }
            else
            {
                // Usual case
                log.Info("Applying LEFT formatting...");
                leftRange.Select();
            }
            // Now apply the formatting
            activeDoc.Windows[1].Selection.CopyFormat();
            cc.Range.Select();
            activeDoc.Windows[1].Selection.PasteFormat();

            cc.Application.ScreenUpdating = true;
            cc.Application.ScreenRefresh();

            return(cc);

            //WORKS
            ////cc.Range.Font = leftRange.Font;
            //cc.Range.Bold = 1;
            //cc.Range.Underline = Word.WdUnderline.wdUnderlineDotDashHeavy;
            //cc.Range.Italic = 1;

            // but DOESN'T WORK- NOT CLEAR WHY
            ////cc.Range.Font = leftRange.Font;
            //cc.Range.Bold = leftRange.Bold;
            //cc.Range.Underline = leftRange.Underline;
            //cc.Range.Italic = leftRange.Italic;

            //string te = cc.Range.Text;
            //cc.Range.FormattedText = leftRange.FormattedText;

            //Tools.PlainTextContentControl pptc = cc as Tools.PlainTextContentControl;
        }