Появляется ошибка при подсчёте количества страниц в word файле?
У меня есть довольно простое приложение Windows Forms с использованием библиотеки Microsoft.Office.Interop.Word, который считает страницы в указанном word файле. Идея простая: вводим путь к word файлу в TextBox и жмём кнопку для подсчёта.
OfficeApp.Application wordApp = new OfficeApp.Application();
OfficeApp.Document document = wordApp.Documents.Open(file.FullName);
int pageCount = document.ComputeStatistics(OfficeApp.WdStatistic.wdStatisticPages);
document.Close();
wordApp.Quit();
document = null;
wordApp = null;
MessageBox.Show(pageCount.ToString());
Количество страниц мне выводится правильно, но сразу после вывода, появляется исключение System.Runtime.InteropServices.COMException ("Файл повреждён"), хотя файл абсолютно нормальный и корректно открывается. Также я заметил через диспетчер задач, что с каждым новым нажатием на кнопку создаётся новый процесс word, который остаётся существовать не смотря на то, что в коде есть инструкции по закрытию и обнулению объектов (document.Close(); wordApp.Quit(); document = null; wordApp = null;). Стоит упомянуть что код Marshal.ReleaseComObject(wordDoc); Marshal.ReleaseComObject(wordApp); также не работает в моём случае, процессы всё равно остаются висеть. Помогите пожалуйста разобраться в чём может быть проблема? Может ли это быть связано с тем, что у меня не лицензионный Word и после открытия файла появляется диалоговое окно мастера активации Microsoft Office? Может кто-то подскажет альтернативный способ подсчёта страниц.
Ответы (1 шт):
У меня такой метод:
private void LoadInDataTable() // обработка файла и выгрузка данных в datatable
{
var excelApp = new Microsoft.Office.Interop.Excel.Application();
if (excelApp != null)
{
Workbook excelWorkbook = excelApp.Workbooks.Open(Filename: Path, 0, true,
5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true,
1, 0);
Worksheet excelWorksheet = (Worksheet)excelWorkbook.Sheets[CurrentSheet + 1];
Range excelRange = excelWorksheet.UsedRange;
int rowCount = excelRange.Rows.Count;
int colCount = excelRange.Columns.Count;
string cellValue = "";
string[] cellArr = new string[colCount];
TableColumnsList.Clear();
for (int i = 1; i <= colCount; i++)
{
TableColumnsList.Add(new ObservableCollection<TableColumns>
{
new()
{
Count = i
}
});
}
CurrentColumnLeft = 0;
CurrentColumnRight = 0;
GenerateDatatableColumnsAndRows(colCount);
for (int i = 1; i <= rowCount; i++)
{
for (int j = 1; j <= colCount; j++)
{
Range range = (excelWorksheet.Cells[i, j] as Range);
try
{
cellValue = range.Value.ToString();
}
catch (Exception e)
{
cellValue = "";
}
cellArr[j - 1] = cellValue;
}
Table.Rows.Add(cellArr); //добавление в дататэйбл целой строки из массива
}
excelWorkbook.Close();
excelApp.Quit();
}
}