"Встает" прога после начала выполнения функции записи в документ Word
На форме tabControl с парой вкладок, в каждой из них DataGridView. Функция(приведена ниже) должна записывать значение каждой ячейки, в соответствующее текстовое поле в таблице документа Word. Однако, если я правильно понял дебаггер, как только прога пытается записать данные - тут же встает, а в процессах вечно висит Word и что-то сделать пытается. Прошу вашей помощи, гуру шаманов.
private void GenerateWordDocument() //Создание документа и запись
{
// Создание нового Word документа
var wordApp = new Microsoft.Office.Interop.Word.Application();
var doc = wordApp.Documents.Add(@"C:\Users\ilya2\source\repos\schedule\schedule\source\template2.dotx");
try
{
// Цикл по вкладкам, начиная с 6-й
for (int tabIndex = 5; tabIndex < tab.TabPages.Count; tabIndex++)
{
var tabPage = tab.TabPages[tabIndex];
// Получение номера класса из заголовка вкладки
int classNumber = int.Parse(tabPage.Text);
// Цикл по DataGridView в каждой вкладке
foreach (Control control in tabPage.Controls)
{
if (control is DataGridView dataGridView)
{
// Цикл по строкам и столбцам в DataGridView
for (int rowIndex = 0; rowIndex < dataGridView.Rows.Count; rowIndex++)
{
for (int columnIndex = 1; columnIndex < dataGridView.Columns.Count; columnIndex++)
{
// Получение значения ячейки
string cellValue = dataGridView[columnIndex, rowIndex].Value?.ToString();
// Формирование имени текстового поля в документе Word
string fieldName = $"{tabIndex.ToWords()}_{columnIndex}_{rowIndex + 1}";
// Вставка значения в текстовое поле в документе Word
ReplaceFormFieldText(doc, fieldName, cellValue);
}
}
}
}
}
// Сохранение документа
string filePath = "C:\\Users\\ilya2\\source\\repos\\schedule\\schedule\\source\\text.docx";
doc.SaveAs2(filePath);
}
catch (Exception ex)
{
MessageBox.Show("Произошла ошибка: " + ex.Message);
}
finally
{
// Закрытие Word приложения
wordApp.Quit();
}
}
Вот функция ReplaceFormFieldText, которая непосредственно записывает данные в поля:
private void ReplaceFormFieldText(Document doc, string fieldName, string text)
{
// Замена текста в текстовом поле документа Word
foreach (Field field in doc.Fields)
{
if (field.Type == WdFieldType.wdFieldFormTextInput)
{
string fieldCode = field.Code.Text;
if (fieldCode.Contains(fieldName))
{
field.Result.Text = text; //если я правильно понял, то прога встает на этом моменте
}
}
}
}