Я реализую некоторый код для встраивания листа Excel в документ Word. В рамках процесса Print driver host for applications
открывается, когда вставить (вставить специальные) скопированный диапазон Excel на Word. Я создал некоторый пример кода для воссоздания проблемы.
private void button1_Click(object sender, EventArgs e)
{
string path = @"C:\Users\Aps\Desktop\excelDoc.xlsx";
Word.Document doc = GetActiveDocument();
Type ExcelType = Type.GetTypeFromProgID("Excel.Application");
dynamic ExcelInst = Activator.CreateInstance(ExcelType);
excelapp = ExcelInst;
excelapp.Visible = false;
workbook = excelapp.Workbooks.Open(path, true);
Excel.Worksheet sheet = workbook.Sheets[1];
Excel.Range excelRange = sheet.Range["A1","E7"];
sheet.Activate();
excelRange.Copy();
Word.Range wordRange = doc.Range();
wordRange.InsertParagraphAfter();
wordRange.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
// insert embedded worksheet
wordRange.PasteSpecial(
Link: false,
DataType: Word.WdPasteDataType.wdPasteOLEObject,
Placement: Word.WdOLEPlacement.wdInLine,
DisplayAsIcon: false
);
CloseWorkbook();
}
private void CloseWorkbook()
{
try
{
if (workbook != null)
{
workbook.RefreshAll();
workbook.Close(SaveChanges: true);
}
if (excelapp != null)
{
var process = Process.GetProcessesByName("EXCEL").OrderByDescending(p => p.StartTime).First();
if (!process.HasExited)
{
process.Kill();
}
}
}
catch
{
//Erorr handling
}
}
private Word.Document GetActiveDocument()
{
object word;
Word.Document _activeDocument;
try
{
word = System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
//If there is a running Word instance, it gets saved into the word variable
}
catch (Exception ex)
{
//If there is no running instance, it creates a new one
Type type = Type.GetTypeFromProgID("Word.Application");
word = System.Activator.CreateInstance(type);
}
Word.Application oWord = (Word.Application)word;
_activeDocument = oWord.ActiveDocument;
return _activeDocument;
}
В моем приложении я использую файл MyStyles.dotx, где мы храним собственные стили для полей слов. Из-за этого хоста драйвера принтера для приложения не закрывается проблема, после использования функции встраивания Excel кажется, что файл MyStyles.dotx закрывается неправильно, и при следующем запуске машины открывается копия MyStyles.dotx. Я попытался вручную закрыть хост драйвера печати для приложений, использующих диспетчер задач, и тогда проблема с повторным открытием MyStyles.dotx при запуске компьютера больше не существовала.
Почему это приложение хоста драйвера принтера для приложений открывается в wordRange.PasteSpecial
?
Есть ли способ избежать открытия приложения "Узел драйвера принтера для приложений", когда wordRange.PasteSpecial
?
Если нет, то как закрыть этот «узел драйвера принтера для приложений» после встраивания Excel в слово?