2016-11-24 44 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

相关问题