科哥85 2023-03-09 22:26 采纳率: 0%
浏览 76
已结题

c# word 文件替换

c#操作WORD打开一个文档,代码的内容是先将这个文档中的表格复制,再运行替换的代码,根据我的固定内容进行替换,再进行粘贴刚才复制的表,继续进行替换固定内容。直到数据集合完成,行成一个最终要的表
以下为固定的表格中的表:

img


最终要的效果为以下

img

现在程序能达到效果,就是内容没有发生变化,只能替换第一个表格中的内容

public class WriteIntoWord
        {
            Microsoft.Office.Interop.Word.ApplicationClass app = null;//定义应用程序对象WORD
            Document doc = null;//定义 WORD文档对象
            Object missing = System.Reflection.Missing.Value;//定义空变量
            Object isReadOnly = false;
            //向WORD文档定稿数据
            public void OpenDocument(string FilePath)
            {
                object filePath = FilePath;
                app = new Microsoft.Office.Interop.Word.ApplicationClass();
                app.Visible = true;
                doc = app.Documents.Open(ref filePath, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing, ref missing);
                doc.Activate();
            }
            
            public void WordReplace(string findText,string replaceText) //效果一样不能替换后面粘贴的表格内容
            {
                object FindText = findText;
                object MatchCase = true;
                object ReplaceWith = replaceText;
                object Replace = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;
                app.Selection.Find.Execute(ref FindText, ref MatchCase, ref missing, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref ReplaceWith, ref Replace, ref missing, ref missing, ref missing, ref missing);
            }
                
            /// <summary>
            /// 查找规划    效果一样不能替换后面粘贴的内容
            /// </summary>
            /// <param name="oldlr">老字符串</param>
            /// <param name="newlr">新字符串</param>

            public void findlr(string oldlr, string newlr)
            {
                #region 文字区域
                object objReplace = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;
                app.Selection.Find.ClearFormatting();
                app.Selection.Find.Text = oldlr;
                app.Selection.Find.Replacement.ClearFormatting();
                app.Selection.Find.Replacement.Text = newlr;
                app.Selection.Find.Execute(oldlr, true, ref missing, ref missing
                                          , ref missing, ref missing, ref missing, ref missing
                                          , ref missing, newlr, ref objReplace, ref missing
                                          , ref missing, ref missing, ref missing);
                #endregion
                #region 文本框
                StoryRanges sr = doc.StoryRanges;
                foreach (Microsoft.Office.Interop.Word.Range r in sr)
                {
                    Microsoft.Office.Interop.Word.Range r1 = r;
                    if (WdStoryType.wdTextFrameStory == r.StoryType)
                    {
                        do
                        {
                            r1.Find.ClearFormatting();
                            r1.Find.Text = oldlr;
                            r1.Find.Replacement.ClearFormatting();
                            r1.Find.Replacement.Text = newlr;
                            r1.Find.Execute(ref missing, ref missing, ref missing, ref missing, ref missing,
                                            ref missing, ref missing, ref missing, ref missing, ref missing,
                                            ref objReplace, ref missing, ref missing, ref missing, ref missing);
                            r1 = r1.NextStoryRange;
                        } while (r1 != null);
                    }
                }
                #endregion
            }

            /// <summary>
            /// 写入数据
            /// </summary>
            /// <param name="BookmarkName">域标签</param>
            /// <param name="FillName">写入域中的内容</param>
            public void WriteIntoDocument(string BookmarkName, string FillName)
            {
                object bookmarkName = BookmarkName;
                Bookmark bm = doc.Bookmarks.get_Item(ref bookmarkName);
                bm.Range.Text = FillName;
            }
            /// <summary>
            /// 保存并关闭
            /// </summary>
            /// <param name="SaveDocPath">文档另存为的路径</param>
            public void Save_CloseDocument(string SaveDocPath)
            {
                object savePath = SaveDocPath;
                Object saveChanges = app.Options.BackgroundSave;
                doc.SaveAs2(ref savePath, ref missing, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing);
                doc.Close(ref saveChanges, ref missing, ref missing);
                app.Quit(ref missing, ref missing, ref missing);
            }

            /// <summary>
            /// 复制第一个表格
            /// </summary>
            public void CopyPaste()
            {
                doc.Tables[1].Select();
                app.Selection.Copy();
            }
            /// <summary>
            /// 粘贴表
            /// </summary>
            object unite = Microsoft.Office.Interop.Word.WdUnits.wdStory;

            public void PasteCopy()
            {
                app.Selection.Paste();
                app.Selection.EndKey(ref unite, ref missing);
            }
            /// <summary>
            /// 光标移动量  能达到效果,但是无用
            /// </summary>
            /// <param name="cou"></param>
            public void goTo(int cou)
            {
                object what = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToLine;
                object which = Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToNext;
                object count = cou;
                app.Selection.GoTo(ref what, ref which, ref count, ref missing);
            }
            public void hk1(int number)
            {
                app.Selection.Tables[number].Cell(1, 1).Select();
            }
        }
      

主程序部分:

  //数据读取完成
                WriteIntoWord wiw = new WriteIntoWord();
                string FilePath = "D:\\HK.docx";
                wiw.OpenDocument(FilePath);               
                wiw.CopyPaste();
                string cbbh1 = "cbbh"; string zwmc1 = "zwmc";
                string hwmc1 = "hwmc"; string htmj1 = "htmj";
                string scmj1 = "scmj";string ht11 = "ht1";string sc11 = "sc1";
                string ht22 = "ht2";string sc22 = "sc2";
                string ht33 = "ht3";string sc33 = "sc3";
                for (int i =0;i<hklist.Count;i++)
                {
                    string cbbh = hklist[i].cbbh;
                    string zwmc = hklist[i].zwmc;
                    string hwmc = hklist[i].hwmc;
                    string htmj = hklist[i].htmj;
                    string scmj = hklist[i].scmj;
                    string ht1 = hklist[i].ht1; string sc1 = hklist[i].sc1;
                    string ht2 = hklist[i].ht2;string sc2 = hklist[i].sc2;
                    string ht3 = hklist[i].ht3;string sc3 = hklist[i].sc3;
                    wiw.WordReplace(cbbh1, cbbh);
                    wiw.WordReplace(hwmc1, hwmc);
                    wiw.findlr(cbbh1 ,cbbh);
                    wiw.findlr(hwmc1, hwmc);
                    wiw.findlr(zwmc1, zwmc);wiw.findlr(htmj1, htmj);wiw.findlr(scmj1, scmj);
                    wiw.findlr(ht11, ht1);wiw.findlr(sc11, sc1);
                    wiw.findlr(ht22, ht2);wiw.findlr(sc22, sc2);
                    wiw.findlr(ht33, ht3);wiw.findlr(sc33, sc3);
                    wiw.goTo(3);
                    wiw.PasteCopy();                    
                    
                }
                wiw.Save_CloseDocument(savePath);
                MessageBox.Show("升成完成!");

  • 写回答

6条回答 默认 最新

  • 「已注销」 2023-03-09 22:30
    关注

    “Devil组”引证GPT后的撰写:

    • 根据描述,可能的原因是在替换文档内容时没有正确地指定需要替换的区域,导致新复制粘贴的表格没有被替换。

    在使用 C# 操作 Word 进行文档替换时,可以使用 Range 对象来定位需要替换的区域。具体来说,可以通过以下步骤来替换 Word 文档中的内容:

    • 打开 Word 文档,并获取文档的 Range 对象。

    • 使用 Range.Find.Execute() 方法来查找需要替换的内容,并在找到匹配项后使用 Range.Text 属性来替换内容。

    • 重复步骤 2,直到所有需要替换的内容都被替换为止。

    在执行这些操作时,需要注意以下几点:

    • 确保在查找和替换时使用正确的搜索选项和替换选项,以确保匹配到正确的文本。

    • 在复制表格并粘贴到文档中时,确保选择正确的粘贴选项,以确保表格被粘贴到正确的位置。

    • 确保在替换文档内容时使用正确的 Range 对象,以确保替换发生在正确的区域。

    • 如果遇到问题,可以尝试使用 Range.Select() 方法来手动选择需要替换的区域,以便更好地定位替换区域。另外,也可以使用调试器来检查代码是否正确执行,并查看在执行代码时发生的任何异常。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月10日
  • 修改了问题 3月10日
  • 创建了问题 3月9日

悬赏问题

  • ¥15 基于OPENCV的人脸识别
  • ¥20 51单片机学习中的问题
  • ¥30 Windows Server 2016利用兩張網卡處理兩個不同網絡
  • ¥15 Python中knn问题
  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!