2015-11-13 17 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

良好的通话 - 我错过了插入 –