Цель:
Скопируйте указанный c лист из рабочей книги и вставьте его в новый файл Excel. (Готово)
Правильно закройте программу Excel, чтобы процесс не отображался в диспетчере задач. (Не выполнено) - Основной выпуск
Код:
public Excel.Application excelApp = null;
public Excel.Workbooks workbooks = null;
public Excel.Workbook target = null;
private void button1_Click(object sender, EventArgs e)
{
//Excel Application
excelApp = new Excel.Application();
//Excel Workbooks
workbooks = excelApp.Workbooks;
//Excel Workbook
target = workbooks.Add(@"C:\Users\LV98\Desktop\Test C#\test.xlsx");
//Excel all sheets from Workbook
Excel.Sheets sheets = target.Worksheets;
//Get specific sheet name
Excel.Worksheet workingSheet = (Excel.Worksheet)sheets.get_Item("Sheet2");
//New book
var newbook = excelApp.Workbooks.Add(1);
//Copy selected sheet to new book
workingSheet.Copy(newbook.Sheets[1]);
newbook.SaveAs(@"C:\Users\LV98\Desktop\Test C#\template.xlsx");
newbook.Close(0);
target.Close();
excelApp.Quit();
}
Подробности:
Работает как надо. Но исходный файл мы скопировали с листа. Процесс Excel все еще выполняется.
Это означает, что файл заблокирован для редактирования.
Что я пробовал :
public Excel.Application excelApp = null;
public Excel.Workbooks workbooks = null;
public Excel.Workbook target = null;
private void button1_Click(object sender, EventArgs e)
{
//Excel Application
excelApp = new Excel.Application();
//Excel Workbooks
workbooks = excelApp.Workbooks;
//Excel Workbook
target = workbooks.Add(@"C:\Users\LV98\Desktop\Test C#\test.xlsx");
//Excel all sheets from Workbook
Excel.Sheets sheets = target.Worksheets;
//Get specific sheet name
Excel.Worksheet workingSheet = (Excel.Worksheet)sheets.get_Item("Sheet2");
//New book
var newbook = excelApp.Workbooks.Add(1);
//Copy selected sheet to new book
workingSheet.Copy(newbook.Sheets[1]);
newbook.SaveAs(@"C:\Users\LV98\Desktop\Test C#\template.xlsx");
newbook.Close(0);
target.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(workingSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(sheets);
System.Runtime.InteropServices.Marshal.ReleaseComObject(newbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(target);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
}
Подробности:
Получил это здесь: { ссылка }
Это все еще делает не работа. Работает точно так же, как 1-й код, и процесс EXCEL.exe все еще выполняется.
Вопрос:
Почему он все еще выполняется как процесс? И как я могу это исправить?