在追加三列后,将数据写入错误的位置

我将数据从一个位置复制到另一个位置,并且能够读取和打印所有值,并能够在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字段值没有更新。 我认为它取代了数据,然后追加正在发生。

任何更新声明都需要解决这个问题?

UsedRange不一定开始于A1,所以如果你使用的范围是(例如)D1:F20那么UsedRange.Cells[1,1]是D1。

因此,如果要可靠地更新工作表上的固定位置,请勿将UsedRange用作cells的基础。

而是使用类似于:

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

Tim几乎是正确的,但严格来说,这个问题与Used Range的错误使用并不完全相关,而是与稍后发生的影响已经分配的范围variables的插入有关。 你首先分配:

 Excel.Range cells = worksheet.UsedRange; 

此时, cells[1, 1]A1 ,因为后者实际上是第一个被使用的单元。 但是后来你在开始时会做三列插入,你设定的任何范围都会向右移动3个位置。 所以在三次插入之后, cells[1, 1]D1 ,而不是A1 。 这种转换将适用于任何范围对象,不仅(但包括) UsedRange

正是由于这个原因, cells[1, 1] = "AccountNumber"; 实际上写入D1而不是A1

解决scheme是将范围移回来补偿添加的插入。 您可以在写入单元格之前添加此行:

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