2015-11-13 19 views
1

我將數據從一個位置複製到另一個位置,並且能夠讀取和打印所有值,並且能夠在Excel文件中附加三列。因此,現在A,B,C柱成爲d,E,F(變速)等。追加三列後將數據寫入錯誤位置

  Excel.Application app = new Excel.Application(); 
      Excel.Workbooks workbooks = app.Workbooks; 
      string newlocation_filename = @"C:\Windows\Temp\" + FileName; 
      File.Copy(FilePath, newlocation_filename, true); 
      //string filename = FilePath; 
      workbooks.Open(newlocation_filename); 
      Excel.Workbook workbook = workbooks.Item[1]; 
      Excel.Sheets worksheets = workbook.Worksheets; 
      Excel.Worksheet worksheet = (Worksheet)worksheets.Item[1]; 
      Excel.Range cells = worksheet.UsedRange; 
      Range oRng = worksheet.Range["A1"]; 
      oRng.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight,XlInsertFormatOrigin.xlFormatFromRightOrBelow); 

      oRng = worksheet.Range["B1"]; 
      oRng.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight,XlInsertFormatOrigin.xlFormatFromRightOrBelow); 

      oRng = worksheet.Range["C1"]; 
      oRng.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight,XlInsertFormatOrigin.xlFormatFromRightOrBelow); 

      cells[1, 1] = "AccountNumber";//Set value for row 1 and column 2 (A1) 
      cells[1, 2] = "CustomerName"; 
      cells[1, 3] = "ComparisionResult";//Set value for row 1 and column 3 (B1) 

      workbook.Save();//Save Excel-File 
      app.Quit(); 

     } 

從上面的代碼AccountNumberCustomerNameComparisionResult都需要在A1設置,B1,C1細胞(所附新欄目)。但是 它代替了D1,E1,F1(舊的A1,B1,C1意味着在追加之前)字段值中的數據,並且A1,B1,C1字段值沒有更新。我認爲它取代了數據,然後追加正在發生。

任何Update語句都需要解決這個問題?

回答

1

UsedRange不一定從A1開始,所以如果您使用的範圍是(例如)D1:F20那麼UsedRange.Cells[1,1]是D1。

因此,如果要可靠地更新工作表上的固定位置,請勿使用UsedRange作爲cells的基礎。

而是使用類似:

worksheet.Range["A1"] = "AccountNumber"; 
+0

謝謝您的回覆。我只用了固定的位置[1,1],[1,2],[1,3]。未使用usedRange.cell [1,1]。 –

+0

可以請你回來嗎? –

+0

您設置了'cells' ='worksheet.UsedRange',所以'cells [1,1]'是* UsedRange *中的左上角單元格,並且不一定是*工作表中的左上角單元格。 –

2

添了它差不多吧,但嚴格來說,問題不完全相關的錯誤使用UsedRange的,但以後這種情況發生的插入,從而影響了已經分配了範圍變量。首先要將:

Excel.Range cells = worksheet.UsedRange; 

此時,cells[1, 1]A1,因爲後者實際上是第一個使用電池。但是,稍後您在開始處進行三列插入時,您設置的任意範圍都會向右移動3個位置。所以在三次插入之後,cells[1, 1]D1,而不是A1。此轉換將適用於任何範圍對象,不僅(但包括)UsedRange

正是因爲這個原因,cells[1, 1] = "AccountNumber";實際上寫入D1而不是A1

解決方法是移回範圍以補償添加的插入。您可以在寫入單元格之前添加此行:

cells = cells.Offset(0, -3); 
cells[1, 1] = "AccountNumber"; 
// etc... 
+0

非常感謝。它正在工作。謝謝您的回覆A.S.H –

+0

歡迎您@RajeshD :) –

+1

良好的通話 - 我錯過了插入 –