在追加三列之后将数据写入错误的位置
本文关键字:数据 错误 位置 之后 追加 三列 | 更新日期: 2023-09-27 18:21:48
我将数据从一个位置复制到另一个位置,能够读取和打印所有值,并能够在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字段值不更新。我认为它替换了数据,然后正在进行追加。
是否需要任何更新语句来解决此问题?
Tim几乎做对了,但严格来说,问题并不是与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...
UsedRange
不一定从A1开始,所以如果你使用的范围是(例如)D1:F20,那么UsedRange.Cells[1,1]
就是D1。
因此,如果要可靠地更新图纸上的固定位置,请不要将UsedRange
用作cells
的基础。
相反,使用类似的东西
worksheet.Range["A1"] = "AccountNumber";