2016-01-20 131 views
0

似乎大多數關於通過C#處理Excel文件的問題都是以全自動的方式解決的。我有一個稍微不同的問題。打開excel文件進​​行手動編輯並保存

代碼應該工作的方式。

  1. 啓動創建在給定位置.txt文件,通過一個SQL查詢的結果填充一個批次。 (完成和工作)

  2. 在Excel中打開文件(我之所以使用.txt是因爲.csv通過刪除前導零等來弄亂我的數字)並使其對用戶可見。代碼停止工作,並將其餘部分留給用戶。

  3. 用戶自己對文件進行更改並手動保存並退出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(); 
     } 
    } 

我如何讓用戶保存更改,而不把他們手動打開從操作系統級別的文件嗎?

+0

你需要調用Mashal.ReleaseComObject所有已創建您只發布工作簿嘗試做釋放了'excel'對象上也 – MethodMan

+0

releaseObject(該對象excelWorkbook); releaseObject(excel); 第二條語句釋放了excel對象 - 或者至少是我認爲的 - 但它仍然沒有區別。 – NotCaring

+0

爲什麼進行2次調用時,您可以更改方法簽名以採取兩個對象,然後在您的方法調用..更改您的方法 '私人無效releaseObject(對象obj,對象obj2)' – MethodMan

回答