2012-02-14 101 views
0

我想創建並連續寫入Excel文件。我必須在下面編寫代碼,但我想要添加所有我持續獲得的數據。如何連續寫入excel文件?

CODE:

 Excel.Application xlApp ; 
     Excel.Workbook xlWorkBook ; 
     Excel.Worksheet xlWorkSheet ; 
     object misValue = System.Reflection.Missing.Value; 

     xlApp = new Excel.Application(); 
     xlWorkBook = xlApp.Workbooks.Add(misValue); 

     xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 
     xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com"; 

     xlWorkBook.SaveAs("csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 
     xlWorkBook.Close(true, misValue, misValue); 
     //xlApp.Quit(); 

     releaseObject(xlWorkSheet); 
     releaseObject(xlWorkBook); 
     releaseObject(xlApp); 

     MessageBox.Show("Excel file created , you can find the file c:\\csharp-Excel.xls"); 
    } 

    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(); 
     } 
    } 

在這段代碼,當啓動應用程序,它總是說,你想取代它,它始終關閉應用程序時,程序獲取的數據。

這是我想要的功能:我想像這裏一樣附加文件。

StreamWriter fileWriter = new StreamWriter("test.txt", true); 
    fileWriter.WriteLine(jointHead.Position.X);  
    fileWriter.Close(); 

什麼可以解決這類問題? 謝謝...

+6

我會考慮寫一個文本文件,是在如CSV與Excel兼容的格式,並不斷追加到這一點。你可能會發現它更快更簡單。 – 2012-02-14 14:05:59

+0

順便說一句 - 我知道你的MessageBox.Show(「例外...」)是prolly出於調試目的。請確保不要在最終的應用程序中保留這些位置,而應考慮附加「重要性」枚舉的某種日誌記錄功能。除此之外,我會試圖問爲什麼Excel文件正在使用而不是其他可擴展存儲介質。畢竟,你可以查詢一個數據庫,並根據需要提供一個帶有內容的excel文件。添加爲答案以及 – 2012-02-14 14:23:23

+0

因爲,我有60列和大約400行數據...這就是爲什麼我想使用Excel。我不想創建表,行和列...首先,我試圖只是txt文件。它完美地追加它。但是,如果你有太多的數據,它看起來很混亂。他們之間很難選擇一些數據。這就是爲什麼我想使用excel.It已經有列和行。我並不需要創建表格。你有這個目的的解決方案嗎? – Samet 2012-02-14 14:31:35

回答

0

追加文件使用此代碼INSEAD:

using(StreamWriter fileWriter = new StreamWriter(@"c:\test.txt", true)) 
{ 
    fileWriter.WriteLine("test"); 
} 

否則,因爲你關閉它之前已寫入它,你將不會寫入任何文件。這將追加文件並以正確的方式關閉流。

Here是LINQ to sql教程的鏈接。這可能會幫助您找到保存和加載數據的上帝解決方案

+0

我想表達的想法,我在開始時使用不同的東西。我有60列和大約400行數據。這就是爲什麼我不想使用文本文件。你有任何獨立的行和列? – Samet 2012-02-14 14:27:41

+0

就像之前說過的。我可能會使用數據庫表並將其保存在那裏。如果需要在Excel表格中顯示更改,則可以從數據庫中讀取並將其顯示在Excel文檔中。 – Arion 2012-02-14 14:34:43

+0

你可以給我一些鏈接或數據庫表的一些示例代碼?迄今爲止,我從來沒有對數據庫表做過任何事情。此外,它不是在Excel中顯示的要求。這只是我的想法,以表格顯示。因爲有這麼多的數據。順便說一下,我沒有從數據庫中獲取數據,可以這麼說,這些是鼠標和其他設備的位置。 – Samet 2012-02-14 14:44:05

0

Excel文件是二進制文件,所以連續寫入Excel文件並不合理。

我建議的最佳解決方案是創建一個CSV文件,並不斷寫入。與Excel文件不同,可以將CSV文件視爲簡單的文本流,並可以通過Excel本地打開。

+0

我有60列和大約400行數據...這就是爲什麼我想使用Excel。我不想創建表...你有任何解決方案,爲此目的? – Samet 2012-02-14 14:26:19

0

順便說一句 - 我知道你的MessageBox.Show(「例外...」)是prolly出於調試目的。請確保不要在最終的應用程序中保留這些位置,而應考慮附加「重要性」枚舉的某種日誌記錄功能。

除此之外,我會試圖問爲什麼使用excel文件而不是其他可擴展存儲介質。你畢竟可以保存到數據庫,在需要時查詢它,並顯示一個帶有過濾內容的Excel文件。這樣,除了在一般的releaseObject()try {}/catch {}之外,你不會冒着超出excel行最大值的風險,這個值不會在你的錯誤處理中被處理。

只是我的蘇格蘭帶和吊帶的態度:)