删除一个图像,并在你的地方放一个文本- Word文件与c#

本文关键字:文本 方放一 文件 Word 一个 图像 删除 | 更新日期: 2023-09-27 18:11:07

我有一个包含各种段落和一些图像的word文件。我想删除这些图像,并在它们的位置上放一些文字,比如:"这里是图像1"。但我不知道该怎么做。我有我的代码的一部分,但文本已发送到页面的最后。

Int16 imgCount;
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
object miss = System.Reflection.Missing.Value;
object path = @"C:'File.docx";
object readOnly = false;
Microsoft.Office.Interop.Word.Document docs = word.Documents.Open(ref path, ref miss,
    ref readOnly, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss,
    ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);
List<string> lista = new List<string>();

for (int i = 0; i < docs.Paragraphs.Count; i++)
{
    string temp = docs.Paragraphs[i + 1].Range.Text.Trim();
    if (temp != string.Empty)
        lista.Add(temp);

    imgCount = 0;
    foreach (Microsoft.Office.Interop.Word.InlineShape ilshp in docs.InlineShapes)
    {
        ilshp.Application.Selection.MoveEnd();
        if (ilshp.Type == Microsoft.Office.Interop.Word.WdInlineShapeType.wdInlineShapePicture)
        {                        
            imgCount++;
            ilshp.Delete();
            //break;
        }
        Microsoft.Office.Interop.Word.Paragraph prfo = docs.Paragraphs.Add(miss);                    
        docs.Paragraphs[i + 1].Range.Text =  "Here was the image " + i + ".";
    }

}
docs.Close(ref miss, ref miss, ref miss);

删除一个图像,并在你的地方放一个文本- Word文件与c#

这似乎是这个问题的重复

然而,要回答这个问题,你要在当前段落之后添加文本,但你可以直接在你刚刚删除的范围之后添加:

int imgCount = 0;
        Application word = new Microsoft.Office.Interop.Word.Application();
        object miss = System.Reflection.Missing.Value;
        object path = @"C:'File.docx";
        object readOnly = false;
        Microsoft.Office.Interop.Word.Document docs = word.Documents.Open(ref path, ref miss, ref readOnly, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);
        List<string> lista = new List<string>();
        for (int i = 0; i < docs.Paragraphs.Count; i++)
        {
            string temp = docs.Paragraphs[i + 1].Range.Text.Trim();
            if (temp != string.Empty)
                lista.Add(temp);
            List<Range> ranges = new List<Range>();
            foreach (Microsoft.Office.Interop.Word.InlineShape ilshp in docs.InlineShapes)
            {
                ilshp.Application.Selection.MoveEnd();
                if (ilshp.Type == Microsoft.Office.Interop.Word.WdInlineShapeType.wdInlineShapePicture)
                {
                    ranges.Add(ilshp.Range);
                    ilshp.Delete();
                    //break;
                }
                Microsoft.Office.Interop.Word.Paragraph prfo = docs.Paragraphs.Add(miss);
            }
            int j = 1;
            foreach (Range imgRange in ranges)
            {
                imgRange.InsertAfter("Here was image " + j++ + ".");
            }
        }
        docs.Close(ref miss, ref miss, ref miss);

这将删除所有的图像范围,将每个范围存储在一个列表中,然后可以访问InsertAfter,使用该循环的迭代器跟踪图像编号。

你可以在链接的文章中找到更详细的解释,但是上面的代码应该可以帮助你解决你的问题。请注意,添加的列表"ranges"上的额外foreach循环正在执行文本添加。好运!