2016-11-24 71 views
0

據我所知,有沒有錯誤在下面的代碼可言:C#無法保存文本數據到Excel文件

private Excel.Application Xls; 
    private Excel.Workbooks XlsB; 
    private Excel.Workbook WB; 
    private Excel.Worksheet WS; 
    private Excel.Sheets WBs; 

private void btnPrint_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      Xls = new Excel.Application(); 
      XlsB = Xls.Workbooks; 
      WB = XlsB.Open(lblPath.Text, 0, false, 5, "", "", true, 
       XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
      Sheets WBs = WB.Worksheets; 
      Worksheet WS = WBs.get_Item(1); 
      WS.Cells[1, 1] = txtTATW.Text; 
      WB.Save(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Write Excel: " + ex.Message); 
     } 
     finally 
     { 
      GC.Collect(); 
      GC.WaitForPendingFinalizers(); 
      releaseObject(WS); 
      releaseObject(WBs); 
      releaseObject(WB); 
      releaseObject(XlsB); 
      WB.Close(true, lblPath.Text, misValue); 
      Xls.Quit(); 
      releaseObject(Xls); 
     } 
    } 

最後釋放方法:

 private void releaseObject(object obj) 
    { 
     try 
     { 
      System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj); 
      obj = null; 
     } 
     catch (Exception ex) 
     { 
      obj = null; 
      MessageBox.Show("Unable to release the Object " + ex.ToString()); 
     } 

    } 

一些數據從不同的窗體中傳出,這在這裏是不可見的,但是所有重要的東西都應該列出來!

它基本上只是將數據從文本框拉到特定的單元格中。現在,我只用一次單元測試它。 希望第二雙眼睛能幫助我找到解決方案。

+0

當你說重要的一切應該列出,是,這不是你使用的完整代碼? –

+0

@SimonPrice對,我的意思是代碼的其餘部分屬於其他不必要的東西。 – Aroueterra

+0

好的,當你調試這個時會發生什麼? –

回答

0

我在釋放〜釋放對象(WB)之前移動了〜WB.Close()〜代碼用一些文本改變了單元[1,1]。我改變了窗體的路徑和文本,但excel部分正確保存。希望這可以幫助。

private Excel.Application Xls; 
private Excel.Workbooks XlsB; 
private Excel.Workbook WB; 
private Excel.Worksheet WS; 
private Excel.Sheets WBs; 
string lblPath = "SomePath"; 
string txtTATW = "Some Text"; 

private void btnPrint_Click(object sender, EventArgs e) 
{ 
    try 
    { 
    Xls = new Excel.Application(); 
    XlsB = Xls.Workbooks; 
    WB = XlsB.Open(@"H:\ExcelTestFolder\TestAddData.xlsx", 0, false, 5, "", "", true, 
     XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
    WBs = WB.Worksheets; 
    WS = WBs.get_Item(1); 
    WS.Cells[1, 1] = txtTATW; 
    WB.Save(); 
    } 
    catch (Exception ex) 
    { 
    MessageBox.Show("Write Excel: " + ex.Message); 
    } 
    finally 
    { 
    GC.Collect(); 
    GC.WaitForPendingFinalizers(); 
    WB.Close(); 
    Xls.Quit(); 
    releaseObject(WS); 
    releaseObject(WBs); 
    releaseObject(WB); 
    releaseObject(XlsB); 
    releaseObject(Xls); 
    } 
    MessageBox.Show("Finished Updating File"); 
} 
+0

我會給它一個鏡頭。 – Aroueterra

+0

我跑了它,它按預期工作。 – JohnG

+0

ERMAHGERD我是個白癡!我一直在爲此花費4個小時嘗試不同的事情,事實證明我的打印按鈕沒有鏈接到任何特定的事件!所以當我點擊它時,沒有任何反應! :D神,那真是愚蠢。但你確實指出了垃圾收集器的錯誤,非常感謝我的朋友!案件結案。 (它的工作) – Aroueterra

相關問題