我有一些代码打开xls工作簿;
Excel.Workbooks workBooks;
workBooks = excelApp.Workbooks;
workbook = workBooks.Open(sourceFilePath + sourceFileName + ".xls");
Run Code Online (Sandbox Code Playgroud)
然后我得到工作表;
worksheets = workbook.Worksheets;
worksheet = worksheets.get_Item("Standard");
Run Code Online (Sandbox Code Playgroud)
然后我将文件保存为csv;
worksheet.SaveAs(sourceFilePath + sourceFileName + ".csv", Excel.XlFileFormat.xlCSVWindows, Type.Missing, Type.Missing, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing);
Run Code Online (Sandbox Code Playgroud)
然后我尝试关闭工作簿;
Marshal.FinalReleaseComObject(worksheet);
Marshal.FinalReleaseComObject(worksheets);
workbook.Close();
Marshal.FinalReleaseComObject(workbook);
Run Code Online (Sandbox Code Playgroud)
但是,每次进入line workbook.Close()时,系统都会停止.
如果我不执行SaveAs,那么工作簿就会关闭.
如何关闭工作簿?
编辑
查看任务管理器向我显示Excel.exe仍在运行.关闭它会在我的代码中产生错误.
编辑2
我已经看过引用的SO帖子,但它没有解决问题.
这是解决方案
第一:
using EXCEL = Microsoft.Office.Interop.Excel;
然后,path是你的excel所在的位置.
EXCEL.Application excel = new EXCEL.Application();
try
{
EXCEL.Workbook book = excel.Application.Workbooks.Open(path);
EXCEL.Worksheet sheet = book.Worksheets[1];
// yout operation
}
catch (Exception ex) { MessageBox.Show("readExcel:" + ex.Message); }
finally
{
KillExcel(excel);
System.Threading.Thread.Sleep(100);
}
[DllImport("User32.dll")]
public static extern int GetWindowThreadProcessId(IntPtr hWnd, out int ProcessId);
private static void KillExcel(EXCEL.Application theApp)
{
int id = 0;
IntPtr intptr = new IntPtr(theApp.Hwnd);
System.Diagnostics.Process p = null;
try
{
GetWindowThreadProcessId(intptr, out id);
p = System.Diagnostics.Process.GetProcessById(id);
if (p != null)
{
p.Kill();
p.Dispose();
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show("KillExcel:" + ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么不合并2。这将解决保存完成之前关闭的所有问题。该Close方法中有一个选项可以保存文件。
workbook.Close(true, fileName, Missing.Value);
Run Code Online (Sandbox Code Playgroud)
同样,如果文件保存正确,而您的问题纯粹是因为excel.exe进程仍在运行,则可能是因为您没有关闭并释放所需的一切。我以前有过这个,并制定了一个更完整的关机程序。我关闭Excel文件的代码是:
book.Close(true, fileName, Missing.Value); //close and save individual book
allBooks.Close(); //close all books
excel.Quit();
Marshal.ReleaseComObject(allCells); //any used range objects
Marshal.ReleaseComObject(sheet);
Marshal.ReleaseComObject(sheets);
Marshal.ReleaseComObject(book);
Marshal.ReleaseComObject(allBooks);
Marshal.ReleaseComObject(excel);
Run Code Online (Sandbox Code Playgroud)
这对我来说是100%的时间。
| 归档时间: |
|
| 查看次数: |
14385 次 |
| 最近记录: |