c#操作WORD打开一个文档,代码的内容是先将这个文档中的表格复制,再运行替换的代码,根据我的固定内容进行替换,再进行粘贴刚才复制的表,继续进行替换固定内容。直到数据集合完成,行成一个最终要的表
以下为固定的表格中的表:
最终要的效果为以下
现在程序能达到效果,就是内容没有发生变化,只能替换第一个表格中的内容
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("升成完成!");