在追加三列后,将数据写入错误的位置
我将数据从一个位置复制到另一个位置,并且能够读取和打印所有值,并能够在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(); }
从上面的代码AccountNumber
, CustomerName
, ComparisionResult
需要分别在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...