Interop Word AddPicture не добавляется после того, как несколько уже добавленыC#

Место общения программистов C#
Ответить
Anonymous
 Interop Word AddPicture не добавляется после того, как несколько уже добавлены

Сообщение Anonymous »

Я создаю файл Word с таблицей и несколькими строками, в некоторые из которых добавляю текст и изображения.
Теперь проблема, с которой я столкнулся, заключается в том, что после некоторых изображений метод AddPicture возвращает нулевое значение InlineShape. Если я запускаю этот процесс 100 раз, он всегда прекращает добавление в одном и том же месте.
Я изменил код так, чтобы он запускал файл Word с того места, где прекращается добавление изображений, и добавляю недостающие правильно.
Процесс выполняется в .net 8 и представляет собой консольное приложение.
Это проблема с памятью? Взаимодействие?
Код:

Код: Выделить всё

foreach (var img in item.Images)
{
if (File.Exists(img.Path))
{
tb.Rows.Add(Missing.Value);
actualRow = GetLastRowCount(tb);
tb.Cell(actualRow, 1).Split(1, 2);
tb.Cell(actualRow, 1).PreferredWidthType = WdPreferredWidthType.wdPreferredWidthPercent;
tb.Cell(actualRow, 1).SetWidth(150, WdRulerStyle.wdAdjustFirstColumn);

tb.Rows[actualRow].Range.Borders[WdBorderType.wdBorderTop].LineStyle = WdLineStyle.wdLineStyleNone;

PopulateCellEmpty(tb, actualRow, 1, false);

try
{
object oMissing = Missing.Value;
var autoScaledInlineShape = WordDocument.InlineShapes.AddPicture(img.Path, ref oMissing, true, tb.Cell(actualRow, 2).Range);
if(autoScaledInlineShape != null)
{
var cmsToPoints = WordApplication.CentimetersToPoints(17);
if (autoScaledInlineShape.Width > cmsToPoints)
autoScaledInlineShape.Width = cmsToPoints;
}
else
{
PopulateCell(tb, actualRow, 2, img.Name, false, false, false, WdParagraphAlignment.wdAlignParagraphLeft, WdCellVerticalAlignment.wdCellAlignVerticalTop);

LogSeriLogInformation($"GenerateTopicSection - autoScaledInlineShape es nullo - " +
$"Reporte: '{report.Id}', Seccion: '{title}', Imagen y path: '{img.Name}' y '{img.Path}', Fila: '{actualRow}', Columna: '{2}'");
}
}
catch (Exception e)
{
LogSeriLogInformation($"GenerateTopicSection - Exception - Al agregar imagen al archivo y modificar su tamaño. " +
$"Reporte: '{report.Id}', Seccion: '{title}', Imagen y path: '{img.Name}' y '{img.Path}', Fila: '{actualRow}', Columna: '{2}'");
throw;
}

tb.Rows.Add();
actualRow = GetLastRowCount(tb);
tb.Cell(actualRow, 1).Split(1, 2);
tb.Cell(actualRow, 1).PreferredWidthType = WdPreferredWidthType.wdPreferredWidthPercent;
tb.Cell(actualRow, 1).SetWidth(150, WdRulerStyle.wdAdjustFirstColumn);
tb.Rows[actualRow].Range.Borders[WdBorderType.wdBorderTop].LineStyle = WdLineStyle.wdLineStyleNone;
tb.Rows[actualRow].SetHeight(WordApplication.CentimetersToPoints((float)0.1), WdRowHeightRule.wdRowHeightExactly);
PopulateCellEmpty(tb, actualRow, 1, false);
}


Подробнее здесь: https://stackoverflow.com/questions/788 ... already-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»