2013-02-25 89 views
0

我的應用程序從9列的excel文件中讀取數據,執行一些工作,並且如果滿足某些條件,則將數據寫入當前行的第9列。這部分工作正常。問題是我沒寫的所有東西都被擦除,甚至文件中的其他工作表也被擦除。將數據寫入Excel單元格擦除現有單元格我不觸摸

這是我的代碼寫入文件的唯一部分。

using Microsoft.Office.Interop.Excel;[...] 


Dictionary<int, string> newlines = new Dictionary<int, string>(); 
//excel reader reads the file, iterates the rows, 
//check up the conditions, add pairs to newlines when needed 

m_excelWriter = new ExcelWriter();  
m_excelWriter.Open(FilePath); 

foreach (var item in newlines) 
{ 
    m_excelWriter.WriteLine(item.Value, item.Key); 
} 
m_excelWriter.Close(); 


public void WriteLine(string Value, int RowNumber) 
{ 
    m_Worksheet.Cells[RowNumber, 8] = Value; 
    //both ways have the problem 
    //((Range)m_Worksheet.Cells[RowNumber, 8]).Value2 = Value; 
} 

這裏Nevyn。我沒有寫這部分。

編輯:看起來就像我現在無法張貼這對你以後讀 ,我實現了(很明顯的)問題

public void Open(string FilePath) 
    { 
     // Open Excel : 
     Process[] ExcelProcessesBefore = Process.GetProcessesByName("EXCEL"); 
     this.m_Application = new Microsoft.Office.Interop.Excel.Application(); 
     Process[] ExcelProcessesAfter = Process.GetProcessesByName("EXCEL"); 
     this.m_ProcessId = this.GetProcessId(ExcelProcessesBefore, ExcelProcessesAfter); 
     this.m_Application.DisplayAlerts = false; 

     // Open the worksheet : 
     this.m_Workbook = this.m_Application.Workbooks.Add(Type.Missing); 
     this.m_Workbook.SaveAs(FilePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
           Type.Missing, XlSaveAsAccessMode.xlNoChange, Type.Missing, 
           Type.Missing, Type.Missing, Type.Missing); 

     m_Worksheet = (_Worksheet)m_Workbook.Worksheets[0]; 

    } 
+0

你的FileOpen代碼是什麼樣的?我正在尋找應用程序初始化和app.Workbooks.Open(...)命令 – Nevyn 2013-02-25 19:01:41

+1

好吧,代碼看起來像它使用了一個已經打開的EXCEL實例,並添加了一個完全空白的新工作簿,然後將其保存到傳入該方法的路徑。如果您從中讀取數據的工作簿已經打開,則不需要重新調用「打開」,但如果它關閉了,那麼您剛纔向我顯示的這種方法將無法工作,它會始終通過覆蓋它來擦除原始數據。 – Nevyn 2013-02-25 19:25:11

+0

我查看了我的帖子後很快就看到了問題,抱歉哈哈。 – 0xFF 2013-02-25 19:26:17

回答

0

我傾向於認爲一樣,直接分配單元格的值是沒有按並不像使用內置功能來設置值那樣工作。

在我的代碼我用這條線來設置單元格值

using Excel = Microsoft.Office.Interop.Excel; 

((Excel.Range)xlWorksheet.Cells[row, ccol]).Value2 = cellVal; 

重新投放細胞的範圍,然後設置範圍Value2設置。我不知道這是否能解決你所遇到的問題。

+0

我也嘗試過這種方式,它也完全一樣的東西。 – 0xFF 2013-02-25 19:00:20

+1

它可能與您打開哪個文件或如何打開它有關係......您可以發佈一些其他處理代碼,如App.Workbooks.Open調用。另外,請確認您確實正在獲取正確的文件,而不是隻打開一個空白的新工作簿,然後在重新保存時覆蓋現有文件 – Nevyn 2013-02-25 19:18:37

相關問題