似乎大多數關於通過C#處理Excel文件的問題都是以全自動的方式解決的。我有一個稍微不同的問題。打開excel文件進行手動編輯並保存
代碼應該工作的方式。
啓動創建在給定位置.txt文件,通過一個SQL查詢的結果填充一個批次。 (完成和工作)
在Excel中打開文件(我之所以使用.txt是因爲.csv通過刪除前導零等來弄亂我的數字)並使其對用戶可見。代碼停止工作,並將其餘部分留給用戶。
用戶自己對文件進行更改並手動保存並退出Excel。
我遇到的問題是,該過程不希望「將文件留在一邊」。它會正確打開,我編輯該值,然後保存,當我嘗試關閉它時,會詢問我是否要再次保存更改。我點擊是,然後立即出現另一個彈出窗口詢問同一個問題。
我不知道如何'釋放'該文件,以便其控件完全由用戶決定,而無需實際關閉Excel。
這是代碼,我用的是位:
{
(...)
RunBatch("Manual_adjustment");
string fileName = "Manual_Adjustment.txt";
Excel.Application excel = new Excel.Application();
object misValue = System.Reflection.Missing.Value;
Excel.Workbook excelWorkbook;
excel.Visible = true;
excelWorkbook = excel.Workbooks.Open(ConstantValues.FolderPathInput + + @"\" + fileName);
releaseObject(excelWorkbook);
releaseObject(excel);
}
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
}
finally
{
GC.Collect();
}
}
我如何讓用戶保存更改,而不把他們手動打開從操作系統級別的文件嗎?
你需要調用Mashal.ReleaseComObject所有已創建您只發布工作簿嘗試做釋放了'excel'對象上也 – MethodMan
releaseObject(該對象excelWorkbook); releaseObject(excel); 第二條語句釋放了excel對象 - 或者至少是我認爲的 - 但它仍然沒有區別。 – NotCaring
爲什麼進行2次調用時,您可以更改方法簽名以採取兩個對象,然後在您的方法調用..更改您的方法 '私人無效releaseObject(對象obj,對象obj2)' – MethodMan