ฉันจะแทนที่ข้อความภายในกล่องข้อความ MS-Word ได้อย่างไร

ฉันเขียนโปรแกรม Windows Forms โดยใช้ C# ประกอบด้วยกล่องข้อความและตารางข้อมูล

ฉันต้องการส่งออกข้อมูลเป็นไฟล์ Word เพื่อใช้เทมเพลต ฉันเพิ่มไลบรารีของ Microsoft Word ลงในโค้ดของฉัน

นอกจากนี้ ฉันยังสร้างกล่องข้อความ "รูปร่าง" ภายในไฟล์ Word และใส่ข้อความไว้ข้างในเพื่อค้นหาจากโปรแกรม c# ของฉัน

สำหรับตอนนี้ ทุกอย่างดูโอเค แต่ฉันติดอยู่ที่ฝั่ง C# ฉันสามารถแทนที่ข้อความปกติได้ แต่ไม่ใช่ข้อความที่อยู่ในกล่องข้อความ "Inside the word file"

และนี่คือรหัสของฉัน:

private void FindAndReplace(Word.Application wordapp, object ToFindText, object replaceWithText)

        {
            object matchCase = true;
            object matchWholeWord = true;
            object matchWildCards = false;
            object matchSoundLike = false;
            object matchAllforms = false;
            object forward = true;
            object format = false;
            object matchKashida = false;
            object matchDiactitics = false;
            object matchAlefHamza = false;
            object matchControl = false;
            object matchread_only = false;
            object visible = true;
            object replace = 2;
            object wrap = 1;

            wordapp.Selection.Find.Execute(ref ToFindText,
                ref matchCase, ref matchWholeWord,
                ref matchWildCards, ref matchSoundLike,
                ref matchAllforms, ref forward,
                ref wrap, ref format, ref replaceWithText,
                ref replace, ref matchKashida,
                ref matchDiactitics, ref matchAlefHamza,
                ref matchControl);

        }


        private void CreateWordDocument(object filename, object SaveAs)
        {
            Word.Application wordApp = new Word.Application();
            object missing = Missing.Value;
            Word.Document myWordDoc = null;

            if (File.Exists((string)filename))

            {
                object readOnly = false;
                object isVisible = false;
                wordApp.Visible = false;

                myWordDoc = wordApp.Documents.Open(ref filename, ref missing, ref readOnly,
                    ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing);

                myWordDoc.Activate();

                //find and replave
                this.FindAndReplace(wordApp, "<date1>", textBox2.Text);
                this.FindAndReplace(wordApp, "<date2>", textBox3.Text);

            }

            else
            {
                MessageBox.Show("File not found!");
            }

            //Svae as
            myWordDoc.SaveAs2(ref SaveAs, ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing);


            myWordDoc.Close();
            wordApp.Quit();
            MessageBox.Show("File Created!");


         }

person jason5137715    schedule 02.09.2018    source แหล่งที่มา
comment
คุณให้ข้อมูลไม่เพียงพอ มีสาขาอะไรบ้าง? คำพูดมีมากมายหลายประเภท นอกจากนี้ ทำไมไม่ใช้ บุ๊กมาร์ก เป็นเป้าหมายข้อมูล หรือการควบคุมเนื้อหา? นอกเหนือจากข้อมูลนี้ คุณควรแสดงรหัสพื้นฐานที่คุณต้องโต้ตอบกับ Word ให้เราทราบ นั่นเกี่ยวข้องกับปัญหามากกว่ารหัส WinForms ที่คุณรวมไว้... ใช้ลิงก์แก้ไขด้านล่างคำถามเพื่อเพิ่มข้อมูลเพิ่มเติม กรุณาตรงไปที่คำถาม   -  person Cindy Meister    schedule 02.09.2018
comment
ฟิลด์หรือบุ๊กมาร์กชนิดใดก็ได้ ฉันแค่อยากให้มันใช้งานได้ ฉันไม่ได้รวมโค้ด c# ที่สามารถกรอกข้อมูลลงในไฟล์คำได้ เพราะจริงๆ แล้วฉันไม่เข้าใจว่ามันทำงานอย่างไร ลบทุกอย่าง และต้องการเริ่มต้น ตั้งแต่เริ่มต้นจนเข้าใจ ฉันเหนื่อยกับตัวอย่างมากมาย ไม่มีอะไรได้ผลสำหรับฉัน ฉันกำลังทำสิ่งนี้มาหนึ่งสัปดาห์แล้ว..   -  person jason5137715    schedule 02.09.2018
comment
@CindyMeister ฉันเพิ่งอัปเดตคำถามของฉัน   -  person jason5137715    schedule 03.09.2018
comment
คุณทำงานกับไฟล์ .doc หรือไฟล์ .docx หรือไม่ หากเป็น .docx คุณควรหยุดใช้ไลบรารี interop และเปลี่ยนไปใช้ OpenXML SDK ซึ่งเป็น Microsoft Office ทีมงานให้บริการบน NuGet มีความทันสมัยกว่ามากและไม่ต้องพึ่งพา COM ดังนั้นคุณจึงไม่ต้องกังวลว่าอินสแตนซ์ของ word.exe จะถูกเปิดทิ้งไว้เนื่องจากการล้างข้อมูลทรัพยากรที่ไม่เหมาะสม   -  person Scott Chamberlain    schedule 03.09.2018
comment
ใน MS-Word เนื่องจากกล่องข้อความเป็นรูป ดังนั้นคุณต้องวนซ้ำรูปร่างต่างๆ และค้นหารูปร่างที่เป็นกล่องข้อความ จากนั้นเป็นคำสั่ง Shape.Range.Text ง่ายๆ เพื่อรับเนื้อหา   -  person Rich Michaels    schedule 03.09.2018
comment
Word มีกล่องข้อความมากกว่าหนึ่งชนิด โปรดอธิบายว่าคำสั่งใดที่คุณใช้ใส่กล่องข้อความลงในเอกสาร นอกจากนี้คุณต้องการกล่องหรือไม่? หรือเฉพาะจุดเป้าหมายที่โค้ดของคุณสามารถเขียนถึงได้?   -  person Cindy Meister    schedule 03.09.2018
comment
@ScottChamberlain ขอบคุณสำหรับคำแนะนำ แต่ฉันไม่รู้ว่าจะใช้มันอย่างไร ฉันต้องใช้เวลาหนึ่งสัปดาห์กว่าจะใช้ไลบรารีคำปกติเพื่อให้มันใช้งานได้ แต่ฉันจะตรวจสอบ   -  person jason5137715    schedule 03.09.2018
comment
@RichMichaels คุณช่วยบอกฉันหน่อยได้ไหมว่าฉันควรเปลี่ยนอะไรในโค้ดของฉันเพื่อให้อ่านว่าอะไรอยู่ในรูปร่าง?   -  person jason5137715    schedule 03.09.2018
comment
@CindyMeister รหัสของฉันดูข้อความภายในเอกสาร word แล้วแทนที่ด้วยข้อความอื่น มันไม่ได้แทรกกล่องข้อความ ปัญหาของฉันคือรหัสของฉันสามารถอ่านได้เฉพาะย่อหน้าข้อความปกติ ไม่ใช่ข้อความภายในกล่องข้อความรูปร่าง   -  person jason5137715    schedule 03.09.2018
comment
คำถามของคุณถูกถามมาก่อน ดู stackoverflow.com/questions/14256417/   -  person Cindy Meister    schedule 03.09.2018