Динамическая вставка изображения в текстовый документ на основе ячейки таблицы - PullRequest
1 голос
/ 09 мая 2019

Я добавляю изображение в документ word, он работает, но моя основная проблема заключается в следующем:

1) Вставить изображение в текстовом документе в таблицу в определенной ячейке.

2) Если в документе word много таблиц и я хочу вставить их в какую-то конкретную таблицу, что делать?

Я использую Microsoft.Office.Interop.Word dll для выполнения операций над словом. В коде я взял статическую таблицу, как добиться динамического?

Мой код выглядит следующим образом:

Microsoft.Office.Interop.Word.Document doc = app.Documents.Open(ref wordfilename, ref oMissing,
                    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                    ref oMissing, ref oMissing, ref oMissing, ref oMissing);

    Range rngPic = doc.Tables[1].Cell(1, 3).Range;    


                        // we can even select a particular cell in the table

                        //Range rngPic = rng.Tables[1].Cell(2, 3).Range;
                        string logoLocation = ConfigurationManager.AppSettings["LogoLocation"];
                        var LogoPath = Path.Combine((HttpContext.Current.Server.MapPath(logoLocation)), fpnInfo.LogoPath);

                        Microsoft.Office.Interop.Word.InlineShape picture = rngPic.InlineShapes.AddPicture(LogoPath, Type.Missing, Type.Missing, Type.Missing);
                        picture.Height = 50;
                        picture.Width = 50;

Пожалуйста, помогите мне заранее спасибо.

1 Ответ

0 голосов
/ 10 мая 2019

Я исправил это, используя определенный текст (заполнитель) в таблице, чтобы идентифицировать заполнитель и вставить изображение в этой позиции

            foreach (Microsoft.Office.Interop.Word.Table tb in doc.Tables)
            {
                int imageCounter = 0;
                for (int row = 1; row <= tb.Rows.Count; row++)
                {
                    for (int Cols = 1; Cols <= tb.Columns.Count; Cols++)
                    {
                        var tableCell = tb.Cell(row, Cols);
                        var cellText = tableCell.Range.Text;                            

                        if (cellText.Contains("Image1"))
                        {
                            tableCell.Range.Text = "";
                            if (fpnImage  != null && fpnImage.Any() && fpnImage[imageCounter].Path != null)
                            {
                                var MediaPathImage1 = Path.Combine((HttpContext.Current.Server.MapPath(mediaImage)), fpnImage[imageCounter].Path);
                                var rangePic = tb.Cell(row, Cols).Range;
                                Microsoft.Office.Interop.Word.InlineShape rangePicture = rangePic.InlineShapes.AddPicture(MediaPathImage1, Type.Missing, Type.Missing, Type.Missing);
                                rangePicture.Height = imageHeight;
                                rangePicture.Width = imageWidth;
                                imageCounter++;
                            }                                    
                        }

                    }
                }
            }
...